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

时间:2015-06-05 03:08:04

标签: c++ algorithm math geometry

如果我有如下图所示的图,我想通过某种因素缩放顶部矩形,使得左侧仍然像现在一样触摸圆圈,我将如何去做?这是在C ++中完成的,矩形由四个顶点表示,圆由中心和半径表示。

要缩放,我只需将所有顶点乘以比例因子,然后我需要将矩形平移回来,使其仍然接触圆圈。我不确定如何翻译。

感谢。

Graph

1 个答案:

答案 0 :(得分:1)

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

angle = atan2(y差异,x差异)。

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

touch.x = center.x + cos(angle)* radius; touch.y = center.y + sin(角度)* radius;

然后,对于矩形的每个角点:

  • 从矩形角点减去触摸点
  • 乘以比例值
  • 添加触摸点

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