我试图找出给定三角形的内部或外部是否有原点。
下面的代码总是给出 Origin不在给定的三角形内。我不知道为什么会这样以及如何解决它。
float distance(int x1, int y1,int x2,int y2)
{
int dis = (((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
float dis1 = sqrt(dis);
return dis1;
}
float AreaOfTriangle(float a, float b, float c)
{
float s = (a+b+c)/2;
float Area = sqrt(s*(s-a)*(s-b)*(s-c));
cout << Area << endl;
return Area;
}
int main()
{
float dis1 = distance(-1,-1,0,1);
float dis2 = distance(1,-1,-1,-1);
float dis3 = distance(0,1,1,-1);
float area = AreaOfTriangle(dis1,dis2,dis3);
float dis4 = distance(0,0,-1,-1);
float dis5 = distance(0,0,1,-1);
float area1 = AreaOfTriangle(dis2,dis4,dis5);
float dis6 = distance(0,1,0,0);
float area2 = AreaOfTriangle(dis1,dis4,dis6);
float area3 = AreaOfTriangle(dis3,dis5,dis6);
float a = area1 + area2 + area3;
cout << endl << a;
if(area == a)
{
cout << "Origin is Inside Given Triangle";
}
else
{
cout << "Origin is not Inside Given Triangle";
}
return 0;
}
答案 0 :(得分:1)
我认为你可以做到这一点
考虑点a,b和c(ax,ay),(bx,by)和(cx,cy)
定义A = ax + ay,B = bx + by和C = cx + cy
定义z = y(B / A)+(1-y)(C / A)
为y = 0和y = 1计算z。如果其中一个或两个值介于0和1之间,则三角形包含原点
答案 1 :(得分:0)
给定点a,b,c。
当然,这是非常通用的,也可以推断到任何一点,前三个步骤是优化。在实施过程中还需要解决一些问题,但应该成立。
你需要弄清楚如何正确地进行浮点运算。