Jump to content
php.lv forumi

Kustība 2D plaknē


andrisp

Recommended Posts

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 by andrisp
Link to comment
Share on other sites

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 by andrisp
Link to comment
Share on other sites

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

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

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

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 by andrisp
Link to comment
Share on other sites

×
×
  • Create New...