如何找到凸多边形与其他凸多边形的最佳拟合

时间:2015-07-21 19:08:51

标签: algorithm geometry polygon convex-polygon best-fit

我正在寻找一种算法来计算将凸多边形(P1)定位在另一个凸多边形(P2)内所需的平移,旋转和缩放。我需要它来返回"最合适的",这意味着P1完全包含在P2中并且具有最大可能区域。

请考虑以下图表:http://i.imgur.com/ckaIIv7.png

右侧的黑色多边形(P1)需要最佳放置在左侧的蓝色多边形(P2)内。

我在网上发现了很多关于多边形遏制算法的书面论文,但这些算法是为了确定 多边形是否适合在另一个多边形中,并且能够进行平移和旋转它们。

我正在寻找的算法应始终产生结果,因为它包括缩放多边形P1的能力。 我知道这种类型的算法可以产生多个最佳答案,而且还可以。

任何帮助?

1 个答案:

答案 0 :(得分:4)

好的,如果没有人有更好的想法,我想提供一个不那么好的算法。

我们假设您P1p个顶点,P2q个顶点,并且您希望P1P2O(pq^2) 1}}。

您已经找到了描述如何确定P1是否适合P2的文章。例如,this articleP1时间内提供算法。如果您知道p2a都是凸的,我不确定它是否会更快。

因此,从大量a(P1)开始,(P2)无法放入a内,并对#include <iostream> #include <string> #include <stdlib.h> using namespace std; int main(){ string strKingdom = ""; bool conquered_me;//see if was conquered, was going to use this on other program and true = game over. int gold; int food; int citizens; int soldiers; cout << endl <<"Name of kingdom: "; cin >> strKingdom; cout << endl << "were you conquered (true/false): "; cin >> conquered_me; cout << endl << "How many gold do you have?:"; cin>>gold; cout << endl << "How many food do you have?:"; cin >> food; cout << endl << "How many citizens do you have?:"; cin >> citizens; cout << endl << "How many soldiers do you have?:"; cin >> soldiers; return 0; } 的值进行二元搜索。

这不是很聪明,但至少它给出了答案。如果其他人发布了更好的答案,请忽略我的......