如何在保持圆周围位置的同时缩放多边形

Posted

技术标签:

【中文标题】如何在保持圆周围位置的同时缩放多边形【英文标题】:How to scale polygon while maintaining position around circle 【发布时间】:2015-06-05 03:08:03 【问题描述】:

如果我有如下图所示,并且我想将顶部矩形缩放一些倍数,这样左侧仍然会像现在一样接触圆,我该怎么做呢?这是在 C++ 中完成的,其中矩形由四个顶点表示,圆由中心和半径表示。

要进行缩放,我只需将所有顶点乘以比例因子,然后我需要将矩形平移回来,使其仍然接触圆。不知道怎么翻译。

谢谢。

【问题讨论】:

【参考方案1】:

首先,找到圆与矩形接触的点。您可以通过计算与从圆心到它接触矩形的点的线平行的长矩形边缘之一的角度来做到这一点。取远角的 x 和 y 值并从中减去近角 x 和 y。那么角度是

角度 = atan2(y 差,x 差)。

然后将其与圆心和圆半径一起使用来计算它们接触的点:

touch.x = center.x + cos(角度) * 半径; touch.y = center.y + sin(角度) * 半径;

那么,对于矩形的每个角点:

从矩形角点减去触摸点 乘以刻度值 添加接触点

这会围绕触摸点缩放矩形,因此触摸点本身不受影响。

【讨论】:

以上是关于如何在保持圆周围位置的同时缩放多边形的主要内容,如果未能解决你的问题,请参考以下文章

将圆连接成多边形的算法

倒回多边形的索引

bzoj1294: [SCOI2009]围豆豆Bean

Mapbox GL JS:缩放到过滤的多边形?

使用 D3.js geom 缩放 voronoi 多边形,结果为 lat long,而不是 px 坐标

如何自动缩放mapView以显示覆盖