我正在寻找一种算法来计算将凸多边形(P1)定位在另一个凸多边形(P2)内所需的平移,旋转和缩放。我需要它来返回"最合适的",这意味着P1完全包含在P2中并且具有最大可能区域。
请考虑以下图表:http://i.imgur.com/ckaIIv7.png
右侧的黑色多边形(P1)需要最佳放置在左侧的蓝色多边形(P2)内。
我在网上发现了很多关于多边形遏制算法的书面论文,但这些算法是为了确定 多边形是否适合在另一个多边形中,并且能够进行平移和旋转它们。
我正在寻找的算法应始终产生结果,因为它包括缩放多边形P1的能力。 我知道这种类型的算法可以产生多个最佳答案,而且还可以。
任何帮助?
答案 0 :(得分:4)
好的,如果没有人有更好的想法,我想提供一个不那么好的算法。
我们假设您P1
有p
个顶点,P2
有q
个顶点,并且您希望P1
在P2
内O(pq^2)
1}}。
您已经找到了描述如何确定P1是否适合P2的文章。例如,this article在P1
时间内提供算法。如果您知道p2
和a
都是凸的,我不确定它是否会更快。
因此,从大量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;
}
的值进行二元搜索。
这不是很聪明,但至少它给出了答案。如果其他人发布了更好的答案,请忽略我的......