J29 Tunnan för SFP1

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

Previous topic - Next topic

0 Members and 4 Guests are viewing this topic.

Lupson

Mikke & Anders: Det är metoden med att avgränsa en kvadrat jag använder, men jag har inte luskat fram hur man korrekt avgör vilken av trianglarna punkten ligger inom. Har prövat lite olika grejer tidigare men då har jag fått väsentligt förändrade höjddata varje gång jag "bytt" triangel vilket förstås ser för j-vligt ut i programmet. Att avgöra "rätt" kvadrat tror jag att jag löst, men som sagt - hur jag avgör vilken av trianglarna det ligger inom det är knepigt.

Matematiskt gick jag Natur på gymnasiet kurs A-E, samt att jag tillbringade en termin på Chalmers (Maskiningenjör) för några år sen. Men jag tokkuggade mattetentorna då.. :(

Ska fundera vidare en stund...
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

*Rotar fram lite urgammal kod*

// Check if an object is within another objects polygon. (Seen from above)
short objectwithinpoly (object3dptr a, object3dptr b, polyptr p, vertexptr v)
{
       short c,i,j;
       float x,z,pxi,pzi,pxj,pzj;

       x=a->x;
       z=a->z;

       c=0;
       j=1;
       for (i=0;i<=p->nv;i++){
               pxi=v[p->vert].x+b->x;
               pzi=v[p->vert].z+b->z;
               pxj=v[p->vert[j]].x+b->x;
               pzj=v[p->vert[j]].z+b->z;

               if ((((pzi<=z) && (z<pzj)) ||
                    ((pzj<=z) && (z<pzi))) &&
                     (x < (pxj - pxi) * (z-pzi) / (pzj - pzi) + pxi)) c=!c;
               j++;
               if (j>p->nv) j=0;
       }
       return c;
}


Känns den igen så är den ursprungligen från CGA FAQ:n.

Lite lustigt namn på funktionen, kollar om en punkt är inom en polygon.
Returnerar 0 om utanför, om inte så är punkten x,z inom polygonen.

pxi, pzi, pxj, pzj är förstås punkter från polygonen.


Ett annat sätt skulle ju va att skapa normaler för triangelns kanter... Så att man får 3 st plan för triangeln, tänk visuellt en toblerone ask... Sen tar man bara 3 dotpodukter..

for (i=0;i<3;i++)
 dot=Dotproduct(punkt - triangelpunkt, edgenormal);

om alla dotprodukter är positiva (eller om de va negativa hmm..) så är punkten inuti toblerone asken, och därmed triangeln..

Eller så skulle man kunna räkna vinklar, om en punkt är inuti en triangel så är summan av alla vinklar 360 (en vinkel är vinkeln mellan punkten och 2 hörn av triangeln). Om summan är mindre än 360 så är punkten utanför. Den metoden funkar också på konkava polygoner..


Finns säkert fler metoder, kommer inte på fler nu bara.




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

Lupson

Den sista metoden - den där man räknar vinklar, den bör inte vara så svår att implementera. De andra ser iofs lovande ut, har pulat/snott ihop en Plane-klass som bör kunna fungera till detta ändamål. Men vinkelsumma förstår jag mig på så den blir bra...men jag får ta tag i det imorrn, nu ska jag göra annat..
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

Obizzz

här ser man en tråd med massa nya svar sedan sist jag kollade och blir alldeles till sig och så är det massa jävla uträkningar o skit! skäms på er! :p :) ;)
"It's not easy because it's difficult" - François Duval, Rallye de France 2004
--------------------
Martin Ãâ€"berg
www.martinoberg.se

mar.oberg på googles emailtjänst

Lupson

Vi fortsätter matematikdiskussionen här:

http://straight-pipes.org/nosig/read.php?TID=964

Nu blev du väl glad, Obizzz? :)

/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

Phlerp

Aj aj aj, har vi en liten adminfacist här? /:=|
Matte är ju bara trevligt ;)... fast det är klart det kanske inte var riktigt det bästa stället.

Obizzz

trevligt? i helvete heller :) skapa sig problem att lösa usch :D
"It's not easy because it's difficult" - François Duval, Rallye de France 2004
--------------------
Martin Ãâ€"berg
www.martinoberg.se

mar.oberg på googles emailtjänst

Phlerp

Sorry PetterGul, men jag kunde inte låta bli ;) ... Har ingen aning hur jag skall exportera den till SF, men det är en senare fråga. :D :D :D

http://www.viktoria.se/~yorick/P1SF/