我正在进行一项赋值,我们得到一个(my_x,my_y)坐标,我们必须判断这个坐标是在自由空间还是在障碍物内。
正如你所看到的,从图中可以看出,我必须判断某一点是否存在于任何障碍之中。
检查越界是否容易和简单。 同样,我检查circle为(伪代码):
如果sqrt((my_x-5)^ 2 +(my_y-3.5)^ 2)< = 0.5
这意味着它在圈内。
if((my_x> = 3.5 || my_x< = 6.5)&&((my_y> = 5 || my_y< = 6)
这意味着它在矩形内部。
但是我被困在三角形的情况下。主要原因是my_x和my_y是十进制类型,并且可以取任何值,最多2位小数。现在一个是有几个if条件,然后检查每个。
我想知道是否有一些更好的算法来定义三角形可能正在使用方程式以及它可能是什么。
答案 0 :(得分:0)
您可以使用vector products
的概念来查找某个点是否在三角形内: -
假设您需要检查点(x,y)
。 (x1,y1),(x2,y2),(x3,y3)
是三角形的三个顶点。然后每个三元组((x1,y1),(x2,y2),(x,y)),((x2,y2),(x3,y3),(x,y)),((x3,y3),(x1,y1),(x,y))
具有相同的符号。
vector product of (x1,y1),(x2,y2),(x,y)
vp = (x-x2)*(y1-y2) - (y-y2)*(x1-x2)
因此对所有三元组使用相同的等式: -
sign1 = sign((x-x2)*(y1-y2) - (y-y2)*(x1-x2))
sign2 = sign((x-x3)*(y2-y3) - (y-y3)*(x2-x3))
sign3 = sign((x-x1)*(y3-y1) - (y-y1)*(x3-x1))
if(sign1==sign2==sign3) { //inside
return(true);
}
else return(false) // outside