感谢您对该问题的澄清评论.我已经拿走了所需要的不是一个数学上正确的结果,而是一个"适合",它比任何类似的其他形状的适合性更好.
我没有在这个问题上投入大量的算法脑力,而是让计算机担心它.生成4个随机点组; 检查由凸起连接这4个点形成的四边形是否与多边形不相交,并计算四边形的面积.重复100万次,检索面积最小的四边形.
您可以应用一些约束来使您的点不是完全随机的; 这可以大大提高收敛性.
我一直相信,即使对于蛮力解决方案,在飞机上随机投掷4点也是一个非常低效的开始.因此,以下改进:
与总是需要8个随机数(4个点中的每一个的x和y坐标)相反,该解决方案仅需要(4 + p)个随机数.而且,产生的线不是在平面中盲目地挣扎,而是每个都接触多边形.这确保了四边形从一开始就至少非常靠近多边形.
吝啬的算法
从凸多边形开始。当点数超过 4 个时,找到合并成本最低的一对相邻点,然后合并它们,将多边形中的点数减少 1。
通过“合并”,我的意思是将两侧的两条边延伸直到它们在一点相交,然后以该点替换这两条边。
“最便宜”是指合并为多边形增加最小面积的对。
Before: After consolidating P and Q:
P'
/\
P____Q / \
/ \ / \
/ \ / \
/ \ / \
Run Code Online (Sandbox Code Playgroud)
在 O(n log n) 中运行。但这仅产生近似值,我对此并不完全满意。算法在生成漂亮的正五边形方面做得越好,最后一次合并必须吃掉的区域就越大。