【发布时间】:2012-03-01 08:45:31
【问题描述】:
谁能告诉我一个算法来编写一个函数,如果 4 个点形成一个四边形,则返回 true,否则返回 false?积分不分先后。
我尝试检查 4 个点的所有排列,看看是否有 3 个点形成一条直线。如果有3个点形成一条直线而不是四边形。但后来我意识到没有办法告诉订单。然后我挣扎了几个小时的思考和谷歌搜索没有结果:(
我已经阅读了这些问题:
- find if 4 points on a plane form a rectangle?
- Determining ordering of vertices to form a quadrilateral
但仍然找不到解决方案。在 1 的情况下,它无法检测到另一种四边形,而在 2 中,它假设点已经是四边形。有没有其他方法可以判断 4 个点是否构成一个四边形?
之前谢谢。
编辑澄清:
我将四边形定义为简单的四边形,基本上是这张图片中显示的所有形状:
带有“四边形”和“复杂”标题的形状除外。
至于“检查共线三元组”方法的问题,我尝试用这样的方式检查垂直线、水平线和对角线:
def is_linear_line(pt1, pt2, pt3):
return (pt1[x] == pt2[x] == pt3[x] ||
pt1[y] == pt2[y] == pt3[y] ||
slope(pt1, pt2) == slope(pt2, pt3))
并意识到矩形和正方形将被视为直线,因为点的斜率将全部相同。希望这能解决问题。
【问题讨论】:
-
如何定义四边形?请更详细地解释检查共线三元组有什么问题。
-
@tom:我已经编辑了问题以进行澄清。如果还有什么不清楚的地方,请告诉我。谢谢。
-
谢谢。按照这个定义,只要可以选择边,任意四个点都可以构成一个四边形。
-
@tom 是对的。问题应该是“如果4个点可以形成一个四边形”。