Hi Scott,

this has been described as the most cost efficient (clock cycle wise) algo in 
game programming gems (if I recall correctly). I translated this to rev a while 
back:

Theory is, if the point is inside the triangle, then the sum of all partial 
areas equals the area of the whole triangle. 
To avoid rounding errors it does not check for equality, but a instead looks if 
the value is smaller than possible rounding error (I still hope for sub pixel 
position in the future, thus I left it in).

Hope that helps,

Malte

function withinTriangle x1,y1,x2,y2,x3,y3,px,py
   -- x1 / y1 to x3 / y3 define the triangle, pX and pY are the point to check
   local area1,area2
   put area(x1,y1,x2,y2,px,py) + area(x2,y2,x3,y3,px,py) + 
area(x3,y3,x1,y1,px,py) into area1
   put area(x1,y1,x2,y2,x3,y3) into area2
   return abs(area1-area2)<0.000000000001
end withinTriangle

function area x1,y1,x2,y2,x3,y3
   return abs(x1*y2+x2*y3+x3*y1-x1*y3-x3*y2-x2*y1)/2
end area_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to