在P的边界上给定凸多边形P和A点,如何计算P边界上的B点,使AB将P分成给定比例的两个区域?
理想情况下,我想要一个分析解决方案。作为最后的手段,我可以在多边形的任何地方绘制一条线,并逐渐移动它,直到比例正确到达给定的精度。
一旦我知道它应该在多边形上的哪两个点之间,我已经研究了如何计算B.所以,如果有办法找出它应该在哪个点之间,我应该可以从那里拿走它!
答案 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的回答相似,但效率稍高。