c# - 如何判断一个点是在线的右侧还是左侧

标签 c# math geometry convex-hull

我有一组点。我想将它们分成 2 个不同的集合。为此,我选择了两个点(ab)并在它们之间画了一条假想线。现在我想将这条线左侧的所有点都放在一组中,将这条线右侧的所有点放在另一组中。

我如何判断给定点 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/

相关文章:

C# find函数问题(不能高亮)

c# - 在数据库表中插入 DataGridVIew 单元格值

c# - 如何在 C# 中从第二项开始获取新数组?

algorithm - 吸引点集合中分配点优化问题的需要算法

c# - 通过 .net winform 应用程序连接到 sql server

java - 如何获得交通模拟中的曲线半径?

math - 计算两个运动球将碰撞的x/y点

javascript - 在 Canvas 上绘制六边形,测试鼠标单击事件与六边形

javascript - 如何计算直线和任意形状的交点?

algorithm - 最大线性维度 2d 点集