【问题标题】:Java: Perimeter of a convex polygonJava:凸多边形的周长
【发布时间】:2015-04-27 17:01:06
【问题描述】:

我有一个ArrayList 和一些Point-s。保证点是凸多边形的一部分。

如何计算这个凸多边形的周长?

更新:ArrayList 中的点不正确

更新 2:所有点都是凸多边形边缘的一部分

【问题讨论】:

  • 你可以将点转换成一个新的LineSegments类,然后将线段的长度相加。如果这些点是无序的,你可以构造一个矩阵来确定谁是相互连接的,以及你是否有一个完整的多边形。
  • 在多边形周围找到点对的正确方法是什么?我应该如何排序?
  • 在创建这个多边形时是否使用了所有点?
  • 所有点都是边的一部分
  • -1:“请求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作的总结,以及您在解决问题时遇到的困难的描述。” stackoverflow.com/help/on-topic

标签: java arraylist polygon point convex


【解决方案1】:

这些点是否按顺序排列?如果是这样,你只需要总结从每个顶点到下一个顶点的距离

【讨论】:

  • 它们没有任何顺序,所以我猜排序方法是我真正的问题。
  • 我知道该怎么做,但我想我会先挑战你:只使用点,你能找到多边形的中心吗?如果是这样,一旦你有了中心,你能以某种方式使用从中心到所有点的线的角度来排列它们吗?
【解决方案2】:
【解决方案3】:

如果点没有排序,它不可能没有确定正确的顺序。那是因为如果有超过 3 个点,它们就可以形成不止一个多边形。

我不完全确定点形成凸多边形的约束是否足以从点云确定规范形状。

我的猜测是,通过从列表中获取一个随机点,然后寻找 最近的 剩余点,您可以建立一个规范顺序。从那里它只是总结了由连续点形成的线的长度。

编辑:再三考虑,放弃这个想法。它不适用于所有情况。这样您就可以排列点并检查形成的多边形是否确实是凸的。

关于如何检查多边形是否凸面的问题已在此处提出并回答:How do determine if a polygon is complex/convex/nonconvex?

【讨论】:

  • 难道不能通过寻找重叠的线段来确定点是否乱序吗?
  • @SaviourSelf 好吧,两条线段之间的交点肯定可以证明多边形不是凸的;所以它有助于解决这个难题。
  • 对,但是如果所有的点都用完了,那不是只有1个没有交叉点的电路吗?
  • @SaviourSelf 如果存在没有交点但也不是凸的排列怎么办?
  • 假设所有点都可以形成一个凸多边形,这种情况有可能吗?我不认为是这样,因为它会导致交叉。
猜你喜欢
  • 2014-02-23
  • 1970-01-01
  • 2017-03-18
  • 2020-03-20
  • 2021-02-13
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2012-08-04
相关资源
最近更新 更多