问题是这样的有一条路和一个商店,知道路和商店的坐标位置,现在想知道商店在这条路的左边还是右边?
采用叉乘(向量积)的定义来判断。
| x y z |
da X db = |3 0 0| = 0x + 0y - 9z = -9z < 0
|-1 -3 0|
使用右手定则判断其值确实应该是<0的
ab方向为正方向,那么点在线段的右侧,其向量积<0。同样还能得到,点在线段的左侧向量积>=0,
点在线段上向量积=0.
下面用代码实现:
公式:da X db = [(X1 - X3)*(Y2 - Y3) - (X2 - X3)*(Y1 - Y3)] Z
struct Point
{
float x;
float y;
}
int RelationPointandLine(Point& pt, vector<Point>& Line)
{
// 假设Line中有两个点
float fZ = (Line.at(0).x - pt.x) * (Line.at(1).y - pt.y) - (Line.at(1).x - pt.x)*(Line.at(0).y - pt.y);
if(fz < 0.000001 && fz > -0.000001)
{
return 0; // 在线段上
}
else if(fz > 0)
{
return 1; // 在线段的左侧
}
else
{
return -1; // 在线段的右侧
}
}