|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 15, 2005 12:16 pm Post subject: |
|
Izlasi manu jautājumu vēlreiz :)
Kā tu īsti definē poligonu ar kuru pārbaudīt sadursmi?
Tikai a,b,c? |
|
Back to top |
|
|
s1 Guest
|
Posted: Tue Feb 15, 2005 12:29 pm Post subject: |
|
Nu jā, tikai a,b,c. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 15, 2005 12:34 pm Post subject: |
|
Tad tev viss ir nepareizi! Padomā tak loģiski. Skaties:
Piemēram tu gribi nodefinēt poligonu plaknē, kura ir paralēla zemei, tb atrodās zOx plaknē, un pie tam, tā atrodas augstumā 0. Tavā gadījumā tu droši vien ņemtu normāli, kas vērsta vertikāli augšup, tb (0,1,0). Tagad padomā kā definētos līdzīgs poligons, tikai plaknē, kuraa ir augstumā 10. Tb y koordinātei atļauts būt tikai 10, bet x un z ir vienalga kādas. Vai tagad redzi, ka šai planei normāles vektors ir pilnīgi tāds pats, kā iepriekšējais (0,1,0). Tātad nepietiek tikai ar normāles vektoru (A,B,C). Vajag ieviest vēl vienu definējamo vērtību = D. Pirmajā gadījuma D=0, otrajā D=-10 (tb plaknes attālums līdz (0,0,0) punktam). Tagad var redzēt kā izskatās šo plakņu vienādojumi formā Ax+By+Cz+D=0. Pirmai plaknei 0x+1y+0z+0=0, bet otrajai - 0x+1y+0z-10=0. Lūk kur rodās D koeficients. Šī spriešana ir līdzīga arī ne-paralēlām pret koordināšu asīm plaknēm. Vienk šādi ir vieglāk izskaidrot un uztver to. Jo ne-paralēlām plaknēm ir sarežģītākas formulas.
Ja interesē, kā no dota trīsstūra, kas uzdots ar 3 punktiem - V1(x1,y1,z1), V2(x2,y2,z2) un V3(x3,y3,z3) pārbaudīt vai punkts P(x,y,z) ir tuvu šim trīsstūrim, tad tas darās kautkā šādi:
Aprēķini matricas:
Code: | |x-x1 y-y1 z-z1|
M = |x-x2 y-y2 z-z2|
|x-x3 y-y3 z-z3| | determinantu det(M) un tad:
vai_ir_vienaa_plaknee := abs(det(M))<EPS;
Determinanta vērtība nosaka to, ka trīs vektori (matricas rindas) ir koplanāri (atrodas vienā plaknē) tad un tikai tad, ja det(M)=0. Tā lūk.
Bet protams, tev vēl jāpārbauda, vai punkts ir tuvu šim trīsstūrim, tb vai P ir iekš V1, V2, V3 veidotā poligona, citādi iedomājies: P=(0,0,0), un V1, V2, V3 veido trīsstūri xOz plaknē, tikai kautkur pie vērtībām Y=0, X~=100 Z~=100, tb tālu prom no (0,0,0) punkta. Matricas determinants det(M) būs = 0, bet, protams, acīmredzami, ka punkts nepieder trīsstūrim (bet tie vektori ir koplanāri, jo visiem Y=0). Tā ka.. domā :) |
|
Back to top |
|
|
s1 Guest
|
Posted: Tue Feb 15, 2005 12:50 pm Post subject: |
|
Bubu, man radās pāris jautājumi : tanī matricā, kas ir domāts x un x1 un
kapēc jāzina, vai vektori ir vienā plaknē |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 15, 2005 12:58 pm Post subject: |
|
Izlasi vēlreiz, kas ir dots - V1(x1,y1,z1), V2(x2,y2,z2), V3(x3,y3,z3) un P(x,y,z).
Lai punkts P sadurtos ar trīsstūri V1,V2,V3 - viens no nosacījumiem ir, lai šie izveidotie vektori būtu vienā plaknē. Īstenība šie vektori, ja neesi vēl pamanījis nozīmē nogriežņu orientāciju no P uz attiecīgi V1, V2, V3 (pa matricas rindām). Otrs - lai tas punkts atrastos trīsstūra iekšienē. To var pārbaudīt, piemēram, skatoties uz šo uzkonstruēto trīs vektoru leņķiem (uzzīmē bildi, tad kļūs skaidrāks) |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Feb 15, 2005 1:20 pm Post subject: |
|
Reku otrajam gadījumam bilde:
Tātad, ja abs(det(M))<EPS, tad der pārbaudīt:
if ((a<A) && (b<B) && (c<C)) { tagad P noteikti ir sadūries ar trīsstūri; } :)
Tas protams no tīri tādām ģeometriskām konstrukcijām. Tas nav arī optimāli rēķināt leņķus, jo tur būs ietvertas trigonometriskas operācijas. To var visu panākt ar diezgan vienkāršām darbībām, izmantojot nedaudz analītiskās ģeometrijas operācijas (tb vektoru skalāro reizināšanu). To arī vajag parādīt priekšā? :) |
|
Back to top |
|
|
Lāčblēdis
Joined: 16 Jan 2005 Posts: 113
|
Posted: Tue Feb 15, 2005 2:10 pm Post subject: |
|
Jā, redzams, ka steidzami vajag jaunas sadaļas, kura būs veltīta matemātikai. |
|
Back to top |
|
|
s1 Guest
|
Posted: Tue Feb 15, 2005 5:10 pm Post subject: |
|
Pārlasīju otreiz visu Bubu rakstīto un mēģināju tajā iebraukt, taču pēc tam man sāka reibt galva un radās nepārvaramas slāpes kautko uzdzert. . ............
Esmu atguvies. |
|
Back to top |
|
|
s1 Guest
|
Posted: Tue Feb 15, 2005 5:18 pm Post subject: |
|
Izskatās, ka man sanāca .
Patiesībā man vajadzēja aprēķināt attālumu no punkta līdz plaknei.
Attālumu es aprēķināju šādi: aprēķināju vektoru d no trīstūra virsotnes līdz punktam. Un tad pēc formulas attālums = n.x*d.x + n.y*d.y + n.z*d.z. n - trīstūra normāles vvektors. |
|
Back to top |
|
|
Hobits Indago organizātors
Joined: 04 Jul 2003 Posts: 491 Location: Riga
|
Posted: Tue Feb 15, 2005 9:36 pm Post subject: |
|
Meegjinaashu izskaidrot to ko bubu tur tik dzilji izklastiija:
1) Kaa noteikt d veertiibu preksh plaknes?
Ja ir zinaams trijstuuris un plaknes virziens (a,b,c) kuram tas pieder
tad d var ieguut izmantojot jebkuru no punktiem kuri veido sho trijsturi (p)un ievietojot to luuk sheit:
d = -(a*px+b*py+c*pz)
2) Kaa noteikt punkta attaalumu liidz plaknei?
Ja Tev ir punkts p, un plakne a,b,c,d, tad distanci var ieguut sekojoshi:
dist = a*px+b*py+c*pz+d
3) Sheit ir kods kaa noteikt vai punkts atrodas trijstuura iekspusee (tai bildei augstaak):
http://astronomy.swin.edu.au/~pbourke/geometry/insidepoly/ |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|