2011-08-20 76 views
0

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

所以我有两点: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

也许尽量不要使用实体画圆:

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)); 

希望帮助...

0

要旋转你有效地把它回原点车和旋转它那里,然后翻译回来。圆心同样也就是它只是车上的另一点。只需在_offset上单独执行轮换,然后再通过_centre 进行转换。

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); 

以前的旋转的椭圆形状是由于不使用二维旋转和您的圈子的距离大概了下来,因为differenceX和differenceY间没有”正确的价值观。