8

我已经在互联网上搜索了好几天,但是对于似乎应该是一个常见问题的问题,我一直无法找到一个好的答案(或者至少是一个对我有意义的答案)。如何缩放任意多边形?特别是凹多边形。我需要一种可以处理凹面(肯定)和自相交(如果可能)多边形的算法。我用来处理简单凸多边形的明显而简单的算法是计算多边形的质心,将该质心平移到原点,缩放所有顶点,并将多边形平移回其原始位置。

这种方法不适用于许多(或所有)凹多边形,因为质心通常落在多边形之外,因此缩放操作也会导致平移,我需要能够在没有最终结果的情况下“就地”缩放多边形正在翻译。

有人知道缩放凹多边形的方法吗?或者也许是一种找到“视觉中心”的方法,可以用作缩放操作的参考框架?

澄清一下,我在 2D 空间中工作,我想使用“视觉中心”作为参考框架来缩放我的多边形。所以也许另一种问这个问题的方法是,我如何找到凹面和/或自相交多边形的视觉中心?

谢谢!

4

3 回答 3

6

我不确定你的问题是什么。

您正在仿射空间中工作,并且正在寻找仿射变换来缩放多边形?

如果我是对的,只需编写转换矩阵:

并用矩阵变换你的多边形

您可以查找仿射变换矩阵。

希望能帮助到你


编辑

如果你想保持相同的“中心”,你可以用中心 G = 多边形的重心做一个参数 lambda 的同质化:

它验证:
在此处输入图像描述

G 不会移动,因为它是同义词的中心。

它仍然会验证下面的关系,所以它仍然是重心。(您只需将关系乘以 lambda)

在您的情况下,G 很容易确定: G(x,y) :(点的 x 值的平均值,点的 y 值的平均值)

它应该做你需要的

于 2011-07-26T13:31:56.410 回答
3

也许克雷格正在寻找一种“多边形偏移”算法——多边形中的每条边都被一个给定的值偏移。例如,给定一个顺时针方向的多边形,向左偏移边会增加多边形的大小。如果这是 Craig 正在寻找的东西,那么在此之前已经提出并回答了这个问题 -一种用于膨胀/放气(偏移、缓冲)多边形的算法

如果您正在寻找现成的(开源免费软件)解决方案,我还创建了一个用 Delphi、C++ 和 C# 编写的裁剪库 ( Clipper ),其中包括一个相当简单的多边形偏移功能。

于 2011-07-26T18:08:45.457 回答
1

您找不到好的答案的原因是您的要求不精确。首先明确定义“就地”的含义。什么保持不变?

一旦你弄清楚了,然后将常量点平移到原点,像往常一样缩放多边形,然后平移回来。

于 2011-07-26T13:38:41.640 回答