如何检查4个点是不是形成凸四边形

Posted

技术标签:

【中文标题】如何检查4个点是不是形成凸四边形【英文标题】:How to check if 4 points form a convex quadrilatera如何检查4个点是否形成凸四边形 【发布时间】:2022-01-23 19:13:21 【问题描述】:

总的来说,我对编码很陌生。我已经为这个问题找到了一些答案,但这些答案对我来说似乎很先进。

我正在尝试编写自己的有限元项目。为此,我想编写一个方法来检查作为输入给出的随机 4 个节点是否形成凸四边形。

我的方法应该是这样的:

private bool IsConvex(Node[4] corners)

    bool isConvex;

    //CODE//

    return isConvex;

Node 类由三个引用其坐标的公共属性定义(.coordX、.coordY、.coordZ)

【问题讨论】:

你问的是数学部分还是编码部分? ***.com/questions/2122305/convex-hull-of-4-points 主要是数学,例如如何将其实现到算法中,而不管语言如何 【参考方案1】:

为了知道一个四边形是否是凸的,你可以做一个三点的三角形,看看第四个点是否在那个三角形里面。如果你设法找到一个包含第四个点的三角形,那么你就没有凸四边形。

好的,你怎么知道一个点是否位于三角形内?

那么,您首先要确定点与向量相比位于哪一侧。 再来一次? 好吧,对于每个向量,您可以确定一个点位于左侧还是右侧:您只需将向量旋转回 Y 轴,您对该点执行相同操作,如果 X 坐标为该点为负数,您的点位于左侧,否则位于右侧,就像在这三种情况下(左、左和右):

一旦你弄清楚了,你定义一个点在三角形内,如果在将三角形描述为向量的三角形之后,你的点在所有向量的同一侧,就像在这个例子中一样(请注意你的三角形由向量 AB、BC 和 CA 组成:这些点必须相互跟随):

祝你好运

【讨论】:

这是正确的,除了首先你必须确定所有四个点都属于同一个平面。否则它们不是凸的。 @JAlex:糟糕,我认为这很明显。 :-) 我刚刚检查了presumed duplicate。我觉得很奇怪,我的提议没有被提及,有那么糟糕吗? 您的提案有很多边缘情况,因为它依赖于旋转并且速度很慢。做乘法比取正弦和余弦要快得多。所以更好的方法使用重心坐标或矩阵行列式来确定一个点是否在三角形内。这是可以在这里改进的部分。

以上是关于如何检查4个点是不是形成凸四边形的主要内容,如果未能解决你的问题,请参考以下文章

CF277B Set of Points——构造题

计算几何+极角排序+爆llE. Convex

求...判断一个点是不是在(不规则)四边形当中

算法.积累20200411

顶点定义框算法中的点?

如何检查给定坐标是不是属于多边形? (离线地理围栏)