5

我有顶点列表,即List<Point>包含以下正方形点:(0,0),(1,0),(2,0),(3,0),(4,0),(4,1), (4,2), (4,3), (4,4), (3,4), (2,4), (1,4), (0,4), (0,3), (0 ,2), (0,1), (0,0)

在此处输入图像描述

要画一个正方形,我只需要四个点(0,0),(0,4),(4,4),(4,0),我如何从列表中删除多余的(直线)点?

它并不总是正方形的,基本上我想减少点的数量,如果它们形成直线。例如 (0,0), (0,1), (0,2), (0,3), (0,4) 使直线而不是绘制所有四个点它会很快从点画一条线(0,0), (0,4)。

4

2 回答 2

5

一次查看三个连续的点(我们称它们为p0p1p2)。p2 = p0 + k(p1 - p0)如果wherek是任意实数,这三个点是共线的(形成一条线) 。我们可以用联立方程来表达上述条件:

(x2 - x0) = k(x1 - x0)
(y2 - y0) = k(y1 - y0)

从理论上讲,您需要做的就是依次取每组三个点。计算kx 分量和 y 分量的值;如果它们相同,那么这些线是共线的,所以 delete p1

在实践中,由于定点或浮点的限制,这在一般情况下变得更加棘手。一旦它们的坐标被量化,应该共线的点可能不会完全共线。因此,在进行比较时,您可能需要允许一些误差范围。

于 2011-01-09T17:23:44.947 回答
0

自动执行此操作的一种方法是获取包含 minX、maxX、minY 和 maxY 组合的点(这是最分散的坐标,并假设数组中的其他点都在矩形范围内)。

如果这不能回答您想到的问题,您可能需要提供更多详细信息和限制条件。

于 2011-01-09T17:20:34.543 回答