Jump to content
php.lv forumi

Recommended Posts

Posted (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 by andrisp
Posted

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?

Posted (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 by andrisp
Posted (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 by andrisp
Posted

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

Posted

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.

Posted

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 ;)

Posted

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;

}

Posted

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 ;)

Posted
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.

Posted (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 by andrisp
Posted

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

×
×
  • Create New...