Java 将凸多边形拟合到给定的矩形中

Java 将凸多边形拟合到给定的矩形中,java,algorithm,geometry,convex-polygon,Java,Algorithm,Geometry,Convex Polygon,我想拿一个凸多边形,通过旋转和缩放将其拟合到一个给定的矩形中 我的方法是以小步(如1°)旋转多边形,并始终测量分数(最大水平距离/最大垂直距离),取离分数最近的分数(矩形宽度/矩形高度),并缩放它以适合矩形 我想知道是否有一种“不那么原始”的方法。此外,“最佳拟合”的定义可能比测量最大水平和垂直距离更好。我的真正目标是,当我将多边形存储为图像文件或打印在页面上时,使其“看起来不错”。 当旋转卡钳算法查找具有两条平行线的对极顶点时,需要四条垂直线-边界矩形 选择第一个垂直,找到它的对足垂直-它是

我想拿一个凸多边形,通过旋转和缩放将其拟合到一个给定的矩形中

我的方法是以小步(如1°)旋转多边形,并始终测量分数(最大水平距离/最大垂直距离),取离分数最近的分数(矩形宽度/矩形高度),并缩放它以适合矩形

我想知道是否有一种“不那么原始”的方法。此外,“最佳拟合”的定义可能比测量最大水平和垂直距离更好。我的真正目标是,当我将多边形存储为图像文件或打印在页面上时,使其“看起来不错”。

当旋转卡钳算法查找具有两条平行线的对极顶点时,需要四条垂直线-边界矩形

选择第一个垂直,找到它的对足垂直-它是第一对卡钳。
建造与第一对垂直的第二对卡钳。
将两个卡钳对一起旋转,直到找到下一个对卡钳(第一个卡钳之间或第二个卡钳之间)-确定下一个极值角度点。
继续旋转卡钳

边界矩形的宽度和高度将在极值点之间连续变化。宽度/高度比例也将是连续的。如果你发现在第i个极值点W/HP,其中P是需要的比例,那么区间i..i+1包含需要的P值()

当您找到带解的井距(如果存在)时,只需计算该角度井距处井径宽度的比例(三角方程),并获得准确的角度值。三角方程看起来像

Sin(A) / Sin(A + Pi/2) = F   
or
Sin(A) / Cos(A) = Tan(A) = F

直观地说,您应该尝试依次将多边形的每条边与矩形的一条边对齐,进行边界框计算,然后查看哪个旋转最适合您的矩形。这应该“看起来不错”,因为人们会看到你的多边形边很好地与你的矩形对齐,感觉很好。