我有一组点。我想将它们分成 2 个不同的集合。为此,我选择了两个点(a 和 b)并在它们之间画了一条假想线。现在我想将这条线左侧的所有点都放在一组中,将这条线右侧的所有点放在另一组中。
我如何判断给定点 z 是在左边还是右边?我试图计算 a-z-b 之间的角度 - 小于 180 度的角度在右侧,大于 180 度的角度在左侧 - 但由于 ArcCos 的定义,计算出的角度总是更小大于 180°。是否有计算大于 180° 的角度的公式(或选择右侧或左侧的任何其他公式)?
最佳答案
试试这个使用 cross product 的代码:
public bool isLeft(Point a, Point b, Point c){
return ((b.X - a.X)*(c.Y - a.Y) - (b.Y - a.Y)*(c.X - a.X)) > 0;
}
其中 a = 线点 1; b = 线点 2; c = 要检查的点。
如果公式等于0,则点共线。
如果直线是水平的,则如果点位于直线上方,则返回 true。
关于c# - 如何判断一个点是在线的右侧还是左侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1560492/