我们得到了二维平面上4个点的坐标。我们如何找到一个订单,将它们与行连接起来,形成一个四边形 (只要有可能)?
发布于 2015-05-25 12:57:37
在几个阶段中,假设最终结果需要4对点(和/或它们之间的直线方程):
第2步澄清:
让我们说,A点不是在三角形(即BCD)中。每条线都把平原分成两面。我们想找出点(B,C或D) s.t。它和A之间的线是在另外两条线之间运行的(它们在两条线的对立面)。这就是我们不想附加在A上的一点。
例子:给定A(0,0),B(10,0),C(10,10)和D(0,10)。我们有三角BCD。BC线在平原的同一侧离开A&D。DC也是。线路AC离开B&D在平原的对面,所以我们想连接A和B& C。
发布于 2015-05-25 13:45:44
考虑通过绘制前三个点定义的三条线来划分平面。它界定了7个区域。通过三个符号区域测试(三角形的代数面积ABD、BCD、CAD),您可以很容易地找到第四个点属于哪个区域。
在每一种情况下绘制一个四边形是很简单的(每个案例可以有一个、两个或三个解决方案)。
在下面的例子中,使用区域-++中的D,ADBC就可以了。

实际上,两个区域评估就足够了:如果第一个测试返回- (regions -+-,-++或--+),则ADBC是一个解决方案,如果第二个测试返回- (Regions+-+或+--),则ABDC是一个解决方案,否则(Regions++-或+++)是一个解决方案。
发布于 2015-05-25 15:13:12
考虑仿射变换
Px = Ax + u (Bx - Ax) + v (Cx - Ax)
Py = Ay + u (By - Ay) + v (Cy - Ay)它将(0, 0)映射到A,(1, 0)映射到B,(0, 1)映射到C。(这将三角形ABC置于标准位置。)
求解2x2线性系统
Dx = Ax + u (Bx - Ax) + v (Cx - Ax)
Dy = Ay + u (By - Ay) + v (Cy - Ay)给出与(u, v)对应的D值。
然后,
if u < 0 => ABCD
else if v < 0 => BCAD
else => CABD得到的四边形与三角形ABC具有相同的方向。

https://stackoverflow.com/questions/30438748
复制相似问题