J29 Tunnan för SFP1

Started by 3:e_PetterGul, November 07, 2002, 18:38:22

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

Lupson

Mikke: Jag ska försöka förklara begripligt. Jag vill kunna få tag i höjden i en viss punkt i en triangel. Jag har xyz-värden för triangelns alla hörn och (x,z) för den givna punkten. y är den vertikala axeln.

Har prövat att beräkna vinklarna i höjd mellan p1->p2 och p1->p3 för att sedan beräkna höjden utifrån skillnaden mellan den givna punkten och p1 men det fungerade inte. Jag har pulat med att definiera triangeln som ett "plan" och sedan beräkna en skärningspunkt för ett rät linje som går genom trianglen, men det fungerar inte heller. Matematiken bakom den ekvationen förstår jag inte speciellt mycket av.

Har även prövat ett par andra metoder jag hittat på nätet men tyvärr har ingen metod ännu gett ett tillfredsställande resultat. Det känns som om det borde finnas en formel för att lösa problemet. Tyvärr är jag ingen höjdare på matematik så hjälp hade varit trevligt.

Kolla screenshotsen så förstår du nog vad jag är ute efter - att kunna placera objekt precis på marken. Sen kommer nästa problem - att rotera dem så de ligger platt mot alla ytor, men där har jag en del idéer iaf...
Tack på förhand!
/Lupson
Mvh Lupson - kortklippt.

"Kustartilleriet fördröjer fienden i kustbandet till militär hjälp kan anlända".
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Core i5 E3570K - Fractal Design Define Mini - Sapphire R290 Tri-X

AndersO

Hej

Om du vet vilken triangel som din punkt är ovanför (antar att det är en heightmap du har) skulle man kunna räkna ut höjden så här, tror jag:

a=y1*(z2-z3)+y2*(z3-z1)+y3*(z1-z2);
b=z1*(x2-x3)+z2*(x3-x1)+z3*(x1-x2);
c=x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2);
d=-x1*(y2*z3-y3*z2)-x2*(y3*z1-y1*z3)-x3*(y1*z2-y2*z1);
return -(a*x+c*z+d)/b;

triangel=x1,y1,z1 - x2,y2,z2 - x3,y3,z3
punkt= x,y,z

ââ,¬Å"I will make weapons from your booones!!ââ,¬Â

Lupson

AndersO: Tackar! Har prövat med en dylik formel tidigare, men jag tror den var avsedd för kvadrater från början vilket kan ha pajat till det hela när jag skulle fixa till den. Ska genast pröva din formel. Tack!

(Det är en Heightmap)

/Lupson
Mvh Lupson - kortklippt.

"Kustartilleriet fördröjer fienden i kustbandet till militär hjälp kan anlända".
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Core i5 E3570K - Fractal Design Define Mini - Sapphire R290 Tri-X

AndersO

#11
Eller vänta nu, hmm.. Va så länge sen jag skrev de där, men när jag tittar på kodsnutten ser det ut som om den returnerar markkhöjden, dvs står du på mount everest så returnerar den 8848, eller va de nu är.

Så.. Du får ta din punkts y - retur värdet, om du nu vill ha meter över land dvs. Du hoppar en meter på everest:

8849-8848=1

Va pedagogisk jag är :)
ââ,¬Å"I will make weapons from your booones!!ââ,¬Â

Lupson

Det fungerar nästan...det verkar som om formeln fungerar men jag tror min metod för att hitta aktuell triangel är lite felaktig. Antingen traverserar jag Heightmapen i LOD-nivå-steg, typ var 10:e punkt på mapen blir ett hörn i en triangel. I metoden nu tar jag och avrundar till närmaste "jämna" punkt. Jag tror denna metoden inte är riktigt bra. Den andra metoden är att traversera den länkade listan där all triangeldata finns. Problemet är bara att det blir väldigt prestandakrävande att traversera listan och för varje triangel göra en matematiskt ganska intensiv kontroll för att kontrollera ifall den aktuella punkten ligger i den aktuella triangeln...nog om det...din formel fungerar nästan iaf, ska jobba fram en bra metod att verkligen hitta precis rätt triangel nu också.

Tack för hjälpen! (Tar gärna emot fler tips i ämnet.. :)  )

/lupson
Mvh Lupson - kortklippt.

"Kustartilleriet fördröjer fienden i kustbandet till militär hjälp kan anlända".
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Core i5 E3570K - Fractal Design Define Mini - Sapphire R290 Tri-X

AndersO

En bra grej med heightmap är att man vet direkt vilken "ruta" man är på genom att ta x och z och skala om dom lite.. Gör du så eller?. Behöver ju inte loopa igenom alla trianglarna i heightmapen för att kolla vilken man är i. När man väl vet vilken ruta så är det bara 2 trianglar att kolla, dom som gör upp rutan.

Om det är samma "skala" på heightmappen och koordinaterna så blir det typ så här:

vector p1,p2,p3,heightmap[10][10];

triangel1
p1=heightmap[(int)x][(int)z];
p2=heightmap[(int)x][1+(int)z];
p3=heightmap[1+(int)x][1+(int)z];

triangel2
p1=heightmap[(int)x+1][(int)z];
p2=heightmap[(int)x+1][1+(int)z];
p3=heightmap[1+(int)x][1+(int)z];


Eller nåt sånt, du förstår idén antar jag. :)

ââ,¬Å"I will make weapons from your booones!!ââ,¬Â

Mikke_EAF331

Har alla mina matteböcker på jobbet (slipper se dom hemma på så sätt ;)), men nog borde det gå att lösa med linjär algebra alltid.

Du kan definiera planet utifrån punnkterna i triangeln, och kan du det så bör det saknade värdet inte vara något problem att plocka ut den saknade koordinaten.

http://www.numbertheory.org/book
Mikke_EAF331, C.O. EAF

Mikke_EAF331

Har tittat lite mer på länken jag gav och jag tror kapitel 8 kan hjälpa dig om du orkar gå igenom det så att du lyckas förstå det. Jag gav upp för idag, inte för att det är för svårt, men det kan ta ett tag om du inte sysslat med det förrut. ;) Har du tur finns det nån annan här som har det färskare i minnet som kan ge dig ett bra svar direkt. :)

Ah, titta på sidan 178 och framåt.

Ett plan beskrivs som t.ex. 2x-7y+6z=21

Trots att min mattelärare svarade att en maskiningenjör knappast har användning av linjär algebra i verkligheten, så får jag exempel på hur användbar det kan vara då och då. :D
Mikke_EAF331, C.O. EAF