我有顶点列表,即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)。
答案 0 :(得分:5)
一次查看三个连续点(我们称之为p0
,p1
,p2
)。如果p2 = p0 + k(p1 - p0)
k
是任意实数,则这三个点共线(形成一条线)。我们可以用联立方程表达上述条件:
(x2 - x0) = k(x1 - x0)
(y2 - y0) = k(y1 - y0)
理论上,您需要做的就是依次获取每组三个点。计算x分量和y分量的k
值;如果它们相同,那么这些线是共线的,所以删除p1
。
实际上,由于定点或浮点的限制,在一般情况下这变得更加棘手。一旦它们的坐标被量化,应该共线的点可能不是非常共线的。因此,在进行比较时,您可能需要允许一些误差范围。
答案 1 :(得分:2)
答案 2 :(得分:0)
自动执行此操作的一种方法是获取包含minX,maxX,minY和maxY(即最大扩展坐标并假设数组中的其他点都在矩形范围内)的组合的点。 / p>
如果这不能回答您的问题,您可能想要提供更多细节和约束。