如何将凸多边形分成两个给定比例的区域?

时间:2011-06-22 14:35:36

标签: geometry polygon computational-geometry data-partitioning convex

在P的边界上给定凸多边形P和A点,如何计算P边界上的B点,使AB将P分成给定比例的两个区域?

理想情况下,我想要一个分析解决方案。作为最后的手段,我可​​以在多边形的任何地方绘制一条线,并逐渐移动它,直到比例正确到达给定的精度。

一旦我知道它应该在多边形上的哪两个点之间,我已经研究了如何计算B.所以,如果有办法找出它应该在哪个点之间,我应该可以从那里拿走它!

2 个答案:

答案 0 :(得分:2)

将多边形从点A拆分为三角形,并计算它们的面积。然后,您可以根据比例将每个端点的三角形添加到每个多边形,直到只剩下一个三角形。然后你知道B点就在那个三角形的底部。

答案 1 :(得分:1)

通常情况下,我在发布后几分钟就回答了我自己的问题!

我确定B应该去哪些点之间的代码类似于:

while areaSoFar + areas[i] < targetArea:
    i++
    areaSoFar += areas[i]

事实证明,我只需要将区域总和公式的最后一个元素插入到同一个检查中:

while areaSoFar + areas[i] + points[i].x * start.y - points[i].y * start.x < targetArea:
    i++
    areaSoFar += areas[i]

请注意,上面的[]数组包含area summation formula的每个元素。

这与Guffa的回答相似,但效率稍高。