andrisp Posted November 18, 2006 Report Share Posted November 18, 2006 (edited) Vai kādam ir pa rokai kādi linki uz saitiem, kur parādīti un paskaidroti dažādi algoritmi ar ko rēķināt koordinātes plaknē kustīgam objektam. Piemēram - ir zināms sākuma punkts (x,y) un beigu punkts (x1, y1), vajadzētu izrēķināt visus punktus pa starpu. Edited November 18, 2006 by andrisp Link to comment Share on other sites More sharing options...
bubu Posted November 18, 2006 Report Share Posted November 18, 2006 Tas tak vienkārši: x = x0 + (x1-x0)*t y = y0 + (y1-y0)*t Maini t no 0 līdz 1 un koordinātes mainīsies no (x0,y0) punkta līdz (x1,y1) punktam. Taisnes vienādojumus vai tad pamatskolā nemācīja? Link to comment Share on other sites More sharing options...
andrisp Posted November 18, 2006 Author Report Share Posted November 18, 2006 (edited) Paldies, bubu, skolas laikā man matemātika īpaši neinteresēja, tāpēc neko daudz neatceros. Bet vai tiešām šādas lietas jau pamatskolā mācija ? PS. Njā, tiešām diezgan vienkārši :). Edited November 18, 2006 by andrisp Link to comment Share on other sites More sharing options...
andrisp Posted November 19, 2006 Author Report Share Posted November 19, 2006 (edited) Vēl vien lieta: Piem., ir zināms punkts plaknē. Kā varu "uzzīmēt" (aprēķināt x-us un y-us) apkārt šim punktam riņķa līniju ar konkrētu rādiusu ? Ja mācētu sagūglēt tādas lietas, neprasītu :). UPD: kaut ko tomēr atrodu: - http://www.davidbetz.net/graphics/ - http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm Edited November 19, 2006 by andrisp Link to comment Share on other sites More sharing options...
Paulinjsh Posted November 19, 2006 Report Share Posted November 19, 2006 Vienādojumā ieliec. Ja atmiņa neviļ, tad riņķa līnijas vienādojums bija: x^2 + y^2 = 1 Link to comment Share on other sites More sharing options...
bubu Posted November 19, 2006 Report Share Posted November 19, 2006 andrisp: tādas lietas ir viegli uzgūglēt. Piemēram uz tavu pašu pirmo jautājumu: "line equation" Uz to otru: "circle equation" Pareizais riņķa vienādojums ir: x^2 + y^2 = R^2. Ja rinķis neatrodas koordināšu sākumpunktā, tad: (x-x0)^2 + (y-y0)^2 = R^2. (šo toč atceros, ka mācīja pamatskolā) Taču atrast vienādojumu (to, kuru paulinjsh gandrīž pareizi uzrakstīja) visdrīžāk tev nevajag. Jo gan jau tu taisies zīmē tos punktus uz ekrāna. Bet ekrāns plaknes koordinātes nav nepārtrauktas kā matemātikā. Ekrāns sastāv no pikseļiem noteiktā lielumā. Tāpēc zīmēt pikseļus pēc rinķa analītiskā vienādojuma nebūs labi. Būs jāņem pārāk daudz punktus. Lai zīmētu līnijas un riņķus pa pikseļiem ir jāskatās uz Bresenham's algoritmu: http://en.wikipedia.org/wiki/Bresenham%27s_algorithm Ja gribēsi aizpildītus trijstūrus zīmēt, tad tos vajag pa līnijām zīmēt: Poligonus savukārt vajag zīmēt pa trijstūriem vispārīgā gadījumā: http://www.devmaster.net/articles/software...ering/part3.php Link to comment Share on other sites More sharing options...
andrisp Posted November 19, 2006 Author Report Share Posted November 19, 2006 Paldies, bubu, par info un linkiem. Noteikti izpētīšu to Bresenhama algoritmu. PS. Man vairāk tās koordinātes rēķināt vajag, lai varētu modelēt (pareizais vārds?) kustību nevis lai zīmētu figūras. Link to comment Share on other sites More sharing options...
bubu Posted November 19, 2006 Report Share Posted November 19, 2006 Ak kustību, nu tad jā, tad pēc analītiskās formulas ņem un viss būs. (modelēt, simulēt, rēķināt - viens pīpis, doma jau skaidra ;) Link to comment Share on other sites More sharing options...
andrisp Posted November 20, 2006 Author Report Share Posted November 20, 2006 Es īsti nesaprotu, kā lai to formulu (x-x0)^2 + (y-y0)^2 = R^2 izmantoju. Tur taču ir divi nezināmie mainīgie, kas jāatrod. Tomēr sasērčoju un sabūvēju kautko šādu: function get_circle_xy(xc, yc, r) { var rl = new Array(); for(var a = 0; a < 360; a++) { rl[a] = new Array(); rl[a]['x'] = r * Math.cos(a * Math.PI / 180) + xc; rl[a]['y'] = r * Math.sin(a * Math.PI / 180) + yc; } return rl; } Link to comment Share on other sites More sharing options...
bubu Posted November 20, 2006 Report Share Posted November 20, 2006 Nu emm.. tu prasīji, kā atrast punktus uz riņķa līnijas. Atbilde ir: visi punkti (,x,y), kuri apmierina to vienādojumu. Es neiedomājos, ka tālāk to sin un cos izvešana nav acīmredzama ;) Link to comment Share on other sites More sharing options...
andrisp Posted November 20, 2006 Author Report Share Posted November 20, 2006 Ah, nu jā - es to savādāk domāju. Kā arī trigonometrija man ir diezgan tumša lieta :/. Link to comment Share on other sites More sharing options...
Kaitnieks Posted November 20, 2006 Report Share Posted November 20, 2006 Es īsti nesaprotu, kā lai to formulu (x-x0)^2 + (y-y0)^2 = R^2 izmantoju. Tur taču ir divi nezināmie mainīgie, kas jāatrod. Tomēr sasērčoju un sabūvēju kautko šādu: function get_circle_xy(xc, yc, r) { var rl = new Array(); for(var a = 0; a < 360; a++) { rl[a] = new Array(); rl[a]['x'] = r * Math.cos(a * Math.PI / 180) + xc; rl[a]['y'] = r * Math.sin(a * Math.PI / 180) + yc; } return rl; } Chau, Andrīt! Tas darbosies, bet var būt diezgan lēni. Izmanto šo formulu: (x',y') = (x cos(t) + y sin(t), y cos(t) - x sin(t); kas griež punktu ap 0 asi. cos(t) un sin(t) vari aprēķināt pirms cikla un paliek tikai saskaitīšana un reizināšana, kas ir ātra. Kam Tev šito vajag? Uzraksti drauģeļos vai tml, moš varu palīdzēt. Link to comment Share on other sites More sharing options...
andrisp Posted November 26, 2006 Author Report Share Posted November 26, 2006 (edited) Izveidoju pēc Kaitnieka formulas vienu kodu, kas nestrādā īsti kā vajadzētu. http://paste.php.lv/4768 Mana kodam pēc manas idejas vajadzēja zīmēt riņķa līniju sākot no 180 grāda visapkārt centra punktam. Ja nemaldos, tad pretēji pulksteņrādītāja virzienam. Itkā visi izrēķinātie punkti ir uz riņķa līnijas, bet ja, piem., t = 1, tad reāli starpība starp iepriekšējo un nākamo punktu ir kādi 100 grādi. Ko es daru nepareizi ? PS. Uz IE riņķa līnija neizskatīsies īsti pēc riņķa līnijas. Edited November 26, 2006 by andrisp Link to comment Share on other sites More sharing options...
bubu Posted November 26, 2006 Report Share Posted November 26, 2006 em.. kodu nelaidu, bet liekas, ka problēma ir reku: cos un sin funkcijas argumentu sagaida radiānos, nevis grādos. 1 grāds = Math.PI/180.0 radiāni Link to comment Share on other sites More sharing options...
andrisp Posted November 26, 2006 Author Report Share Posted November 26, 2006 Paldies, bubu, strādā :) Link to comment Share on other sites More sharing options...
Recommended Posts