围绕一个点移动一个圆圈

时间:2011-08-20 16:50:17

标签: flash math rotation

我有一个圆(边界圆)偏离我的实体的中心点,我正在寻找如何在旋转时围绕实体移动圆圈,以便它始终位于角色的同一位置。例如,假设我有一个汽车前部的边界圆,当汽车转弯时,边界圆也需要转动。

所以我有两点:position,它是实体中心点的位置,offset是圆圈与该位置的偏移量。假设角度为0。

所以如果我的车面向0度: position(150,150)和offset(50,0)然后边界圆将是200,150。

现在,如果我将汽车旋转90度,则边界圆应位于150,200的位置。

这就是我现在所拥有的:

var differenceX : Number = _centre.x - _offset.x;
var differenceY : Number = _centre.y - _offset.y;

var rotatedX : Number = differenceX * Math.cos(_angle);
var rotatedY : Number = differenceY * Math.sin(_angle);

var currentOffset : Point = new Point(_centre.x + rotatedX, _centre.y + rotatedY);

但它给了我这些长椭圆形,现在是一个完美的圆圈。

想法?

3 个答案:

答案 0 :(得分:0)

也许尝试不使用实体绘制圆圈:

var circlePositionX : Number = _centre.x - _offset.x;
var circlePositionY : Number = _centre.y - _offset.y;

var radius : Number = 50;

var rotatedX : Number = circlePositionX + (radius * Math.cos(_angle));
var rotatedY : Number = circlePositionY + (radius * Math.sin(_angle));

希望有帮助...

答案 1 :(得分:0)

要旋转汽车,您可以有效地将其带回原点并在那里旋转然后将其平移。圆心是相同的,即它只是汽车上的另一个点。只需在_offset上执行轮换,然后按_centre进行翻译

答案 2 :(得分:0)

您正在旋转对象的偏移和位置之间的差异。我认为你直觉上有一个正确的想法,想要旋转圆圈和它的物体之间的距离,但可能会误认为圆圈位置的偏移?无论哪种方式,由于您已经有偏移,我们不需要计算两者之间的距离。

此外,旋转2D矢量时,还需要使用2D旋转。 2D旋转使用x和y分量来组成每个新的x'和y'分量。快速谷歌返回类似this的内容。

由于代码总是更容易理解:

var cosAngle : Number = Math.cos(_angle);
var sinAngle : Number = Math.sin(_angle);

var rotatedX : Number = _offset.x * cosAngle - _offset.y * sinAngle;
var rotatedY : Number = _offset.x * sinAngle + _offset.y * cosAngle;

var currentOffset : Point = new Point(_centre.x + rotatedX, _centre.y + rotatedY);

之前旋转的椭圆形状是由于没有使用2D旋转而且圆圈的距离可能已经关闭,因为差异X和差异Y不是正确的值。