more collision detection
-->question part<--
The part that I''m wondering about is how do you find the intersection of a vector and the triangle''s plane, given the triangle''s three points (or possibly the normal if you need that). Notice I said vector, and not ray.
That should be an easy question, but it stumps me. I have the following worked out though:
Thanks for any help.
darrennix@msn.com
-->solution part<--
A point is in a triangle if the point is contained by all three of the triangle''s angles. A point is contained if its angle from an edge is less than the angle. In other words,
if(ptinangle(point, a, b, c) && ptinangle(point, b, c, a) && ptinangle(point, c, a, b))
// it''s in the triangle!
bool ptinangle(CONST POINT &v, CONST POINT &v0, CONST POINT &v1, CONST POINT &v2)
{
double
fTheta = acos(((v.x-v0.x)*(v2.x-v0.x)+(v.y-v0.y)*(v2.y-v0.y))/(mag(v-v0)*mag(v2-v0))),
fAngle = acos(((v1.x-v0.x)*(v2.x-v0.x)+(v1.y-v0.y)*(v2.y-v0.y))/(mag(v1-v0)*mag(v2-v0)));
if(fTheta < fAngle) return true;
return false;
}
That''s in 2D because I wrote a simple test app that fills all points with a color depending on whether they''re in the triangle. Email me if you want to see it.
it looks like u already know the rayintersection test...
if that test resolves in a collision, see if the begin point and the end point of the vertex are on the same side of the plane through the triangle...if so, there''s no collision...
if not so, there''s a collision...
(u can do that easily with the plane equitation)
does that make sense?
ok,
hope that helped,
cya,
Phil
if that test resolves in a collision, see if the begin point and the end point of the vertex are on the same side of the plane through the triangle...if so, there''s no collision...
if not so, there''s a collision...
(u can do that easily with the plane equitation)
does that make sense?
ok,
hope that helped,
cya,
Phil
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement