我有一个圆(边界圆)偏离我的实体的中心点,我正在寻找如何在旋转时围绕实体移动圆圈,以便它始终位于角色的同一位置。例如,假设我有一个汽车前部的边界圆,当汽车转弯时,边界圆也需要转动。
所以我有两点: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);
但它给了我这些长椭圆形,现在是一个完美的圆圈。
想法?
答案 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不是正确的值。