我无法找出解决以下问题的最佳方法。我尝试了多种解决它们的方法,但我总是遇到一些极端情况。
问题如下:
- 你有一个
List
坐标(x 和 y 点)形成一个封闭的多边形。该列表保证形成一个多边形,其中的点按顺时针方向排列。 - 您将获得
Set
来自上述坐标的坐标(x 和 y 点)List
。 - 您必须找出使用上述所有点形成的线的起点和终点
Set
。
我遇到的问题是我无法弄清楚找到“最佳”起点和终点的方法。对于许多情况,您可以选择第一个和最后一个点(使用 的索引List
)来形成起点和终点,但这可能会导致一条线比它必须的要长。
例如,假设我们有以下多边形:
0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 0
并且Set
我们的线段必须包含以下坐标:0, 7, 3
。
如果我们找到最小和最大索引,我们得到index(0)
, index(7)
,所以我们可以形成线0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
,这是一条有效的线,但它比它需要的长。最好的线段是7 -> 0 -> 1 -> 2 -> 3
.
如何Set
以有效的方式找到最佳(包含所有点的最短)线段?
对于上下文:我正在开发一个使用 JTS 几何图形绘制形状的应用程序。使用贝塞尔曲线平滑绘制的形状以产生“弯曲边缘”。绘制形状后(通过放置点),用户可以编辑形状。我们想使用它们修改的点(形成上述)来计算起点和终点Set
,这样我们就可以只“平滑”受影响的区域。