【发布时间】:2015-09-03 08:37:07
【问题描述】:
我有一个值列表,它们是任意凸形(多边形)的边长。 我怎样才能画出这个形状?什么算法可以帮助我完成这项任务?
例如,我有一个列表:2、5、2、3。绘图必须如下所示:
【问题讨论】:
标签: drawing draw polygon shapes convex
我有一个值列表,它们是任意凸形(多边形)的边长。 我怎样才能画出这个形状?什么算法可以帮助我完成这项任务?
例如,我有一个列表:2、5、2、3。绘图必须如下所示:
【问题讨论】:
标签: drawing draw polygon shapes convex
对此有一个相对简单的(如果有点数学题的话)O(N log N) to O(N^2) (depending on implementation) 基于递归几何/三角函数的解决方案。
第 2 步,要求确保三角形的较小两条边比较大的一条长。
第3步,可以将一个三角形变成2个三角形。
对于我将使用的输入和输出: 输入:边列表 输出:内角列表。
所以output[a] 是在input[a] 的边之前的顶点的内角。
一个很好的参考是located here。
a1 和a2 的顶点位置会改变。导致a1 和a2 前后顶点的内角发生变化。在这种情况下,a1,a2,a3,an,p。 关于确定内角。使用三角学和/或几何学。给定三角形的 3 条边,可以确定角度是多少。给定 2 个边和一个角度(或 1 个角度和 2 个边),可以确定缺少的边和角度。
当然,您可能必须小心在哪里打破边缘,以便形成三角形。
【讨论】:
我会在这里引用an answer I posted on MathOverflow:
如果最长边不长于所有其他边的长度之和,则边链可以闭合。
在您的示例中,最长边为 5,并且不超过 2+2+3=7。 如果将长度为 5 的边替换为长度为 8 的边,则四个段 不能接近凸多边形。 每当您有超过 3 条边时,生成的凸多边形不是 独特的确定性:它的形状具有灵活性。
有关证明的指针,请参阅上面引用的参考资料。
【讨论】: