algorithm - 在多边形内移动多边形
问题描述
我在找出解决以下问题的算法时遇到了麻烦:
我希望用户能够将矩形(可以是任何类型的多边形)捕捉到多边形的 4 个角,使其尽可能远离多边形内部。
到目前为止我正在尝试什么:
- 允许用户获取对象。
- 找到多边形上距离矩形最近的顶点。
- 找到矩形上最远的顶点到多边形最近的顶点。
- 使用平面找到与最远矩形点到多边形点的第一个交点。
- 根据最远点是否在 x/y 坐标中更远,使用相应的 x/y 平面向上或向下移动。
- 继续重复上述步骤,直到一切都在里面。
解决方案
只要封闭多边形是凸的,您就可以将其写为线性规划问题,然后应用https://en.wikipedia.org/wiki/Simplex_algorithm来找到答案。您放入的较小多边形可以根据需要复杂。
您的不等式是确保较小多边形的每个顶点都在较大多边形内部的所有条件。您不必在这里很聪明,不会出现额外的不平等是没有成本的。
要优化的函数构造如下。查看您尝试接近的顶点的内角。在该点绘制一个坐标系,一个轴直接指向多边形(称为该轴y
),另一个与第一个成直角(称为该轴x
)。您想最小化您要y
放入的多边形上最近顶点的值。(只需将要放入的多边形放在中间,然后搜索最近的顶点。使用它。
您找到的解决方案是将两个顶点尽可能靠近的解决方案,条件是较小的多边形必须位于较大的多边形之内。
推荐阅读
- node.js - 如何将 mp3 音频从 http api 流式传输到节点服务器?
- javascript - 图片上传中的问题阅读本机
- wso2 - 如何设置 WSO2 API 网关?
- android - 符号层图标大小更改 Mapbox - Android 不工作
- ruby - 如何安装“rubygems”
- android - 工具提示内的底部工作表不起作用,此弹出窗口显示在底部工作表后面
- c# - 使用 FlaUI 处理不支持的属性?
- mysql - 按位掩码中设置的位数排序
- flutter - 如何在颤动中使列和行内的框的自定义高度
- php - Firebase 推送通知在 android kotlin 和 PHP 中不起作用