在二维坐标系中,对三角形ABC和某一点P,设A(x1,y1)、B(x2,y2)、C(x3,y3)、P(x,y),如果向量AB×AP、BC×BP、CA×CP指向同一方向,则说明P点在三角形内部。
#include <iostream>
using namespace std;
struct Triangle
{
int x1;
int y1;
int x2;
int y2;
int x3;
int y3;
Triangle(int tx1,int ty1,int tx2,int ty2,int tx3,int ty3)
{
x1=tx1;
y1=ty1;
x2=tx2;
y2=ty2;
x3=tx3;
y3=ty3;
}
};
bool InTriangle(Triangle t,int x,int y);
int main()
{
Triangle t(0,0,4,0,2,4);
cout<<InTriangle(t,9,0)<<endl;
for(int x=0;x<10;x++)
for(int y=0;y<10;y++)
{
cout<<"x="<<x<<"y="<<y<<"是否在三角形中:"<<InTriangle(t,x,y)<<endl;
}
}
bool InTriangle(Triangle t,int x,int y)
{
int t1=(t.x2-t.x1)*(y-t.y1)-(x-t.x1)*(t.y2-t.y1);
int t2=(t.x3-t.x2)*(y-t.y2)-(x-t.x2)*(t.y3-t.y2);
int t3=(t.x1-t.x3)*(y-t.y3)-(x-t.x3)*(t.y1-t.y3);
if(t1>0&&t2>0&&t3>0)
return true;
if(t1<0&&t2<0&&t3<0)
return true;
return false;
}