# Point in triangle ??

Hi!
My problem is:
I want to test, if a point/vector(x|y) is within a specified triangle with the points A,B,C. I need a precise solution for that, so not a bounding-sphere…

Ther are quite a feW slusions for this problem . i like the parametric approach. So what u goto
do is think of this point as point on surface, So u will have two parametrs say U and V and three vertices plus the point (you don’t know if it is inside or outside) . so u can solve for U and V if U and V are between o and 1 you can say the point isinside the triangle. I guess i have the code for that i can give it u if u need it. Tell me what do u think

Originally posted by TheBlob:
Hi!
My problem is:
I want to test, if a point/vector(x|y) is within a specified triangle with the points A,B,C. I need a precise solution for that, so not a bounding-sphere…

Thanks, i would really appreciate, if you could post some code!!
But what purpose have the parameters U and V?? Please explain…i think your solution sounds very good. I´ve seen something with trigo-functions, but i think it´s too slow!

I guess u can use this code
// Here u and v are alpha and beta

void IMF_MESHPNT_find_u_v_triangle(ure_array original_location,ure_array vertex, doublealpha,double*beta)
{
double numerator;
double denominator;
int alpha_beta_found=0; // This flag is set to 1 if the point happens to be on the node
int ii,jj; // Counter for for

``````float tol;

// Loop over three vertices of triangle
for(ii=0;ii&lt;3;ii++){
// IMPORTANT: The tolarance is 1e-03 (!!!!!)
// This one to see of th epoint is on one of the vertices
if(vertex[ii].almostEqual(original_location,1e-03)){

switch ( ii ) {
case 0:
*alpha=0;
*beta=0;
break;

case 1:
*alpha=1;
*beta=0;
break;

case 2:
*alpha=1;
*beta=1;
break;

default:
break;
}
alpha_beta_found=1;
}
}

if(!alpha_beta_found){
numerator = ((vertex - vertex)*(original_location- vertex)) -
((original_location - vertex) * (vertex - vertex));
denominator=((vertex - vertex)*(vertex - vertex)) -
((vertex - vertex)*(vertex - vertex));
*alpha = numerator/denominator;

numerator = original_location - vertex -
(vertex - vertex)*(*alpha);
denominator = (*alpha)*(vertex - vertex);
*beta=numerator/denominator;
}
``````

}

Originally posted by TheBlob:
Thanks, i would really appreciate, if you could post some code!!
But what purpose have the parameters U and V?? Please explain…i think your solution sounds very good. I´ve seen something with trigo-functions, but i think it´s too slow!

dont know if it is correct, but it should be what i used:

VECTOR vector1= b-a
VECTOR vector2= c-a
VECTOR point= p-a
float u= vector1point / (vector1.sizepoint.size)
float v= vector2point / (vector2.sizepoint.size)

if(u*v <= 1) inside else outside

p is your point, and have to be on the surface of the triangle, if you dont know how the get this point, ask, but in 2d it is always …

[This message has been edited by T2k (edited 11-24-2001).]

[This message has been edited by T2k (edited 11-24-2001).]