Given three corner points of a triangle, and one more point
P. Write a function to check whether P lies within the triangle or not.
B(10,30)
/ \
/ \
/ \
/ P \ P'
/ \
A(0,0) ----------- C(20,0)
The program needs to read the values of three coordinates
A(x1,y1)
B(x2,y2)
C(x3,y3)
as well as another coordinate P(x,y) and determine whether
this point is inside a triangle formed from the 3 point above.
Solution:
Let the coordinates of three corners be (x1, y1), (x2, y2)
and (x3, y3). And coordinates of the given point P be (x, y)
1) Calculate area of the given triangle, i.e., area of the
triangle ABC in the above diagram. Area A = [ x1(y2 – y3) + x2(y3 – y1) +
x3(y1-y2)]/2
2) Calculate area of the triangle PAB. We can use the same
formula for this. Let this area be A1.
3) Calculate area of the triangle PBC. Let this area be A2.
4) Calculate area of the triangle PAC. Let this area be A3.
5) If P lies inside the triangle, then A1 + A2 + A3 must be
equal to A.
Implementation
float area(int x1, int y1, int x2, int y2, int x3, int y3)
{
return
abs((x1*(y2-y3) + x2*(y3-y1)+ x3*(y1-y2))/2.0);
}
/* A function to check whether point P(x, y) lies inside the
triangle */
bool isInside(int x1, int y1, int x2, int y2, int x3, int
y3, int x, int y)
{
/* Calculate area
of triangle ABC */
float A = area (x1,
y1, x2, y2, x3, y3);
/* Calculate area
of triangle PBC */
float A1 = area (x,
y, x2, y2, x3, y3);
/* Calculate area
of triangle PAC */
float A2 = area
(x1, y1, x, y, x3, y3);
/* Calculate area
of triangle PAB */
float A3 = area
(x1, y1, x2, y2, x, y);
/* Check if sum of
A1, A2 and A3 is same as A */
return (A == A1 +
A2 +A3);
}
Nice and very helpful article....
ReplyDeleteSwitch Case in C examples
if-else in C with examples