Flash 绕点移动圆
我有一个圆(边界圆)从实体的中心点偏移,我正在研究如何在实体旋转时围绕实体移动该圆,使其始终位于角色的同一位置。例如,假设汽车前部有一个边界圆,当汽车转弯时,该边界圆也需要转弯 所以我有两个点:Flash 绕点移动圆,flash,math,rotation,Flash,Math,Rotation,我有一个圆(边界圆)从实体的中心点偏移,我正在研究如何在实体旋转时围绕实体移动该圆,使其始终位于角色的同一位置。例如,假设汽车前部有一个边界圆,当汽车转弯时,该边界圆也需要转弯 所以我有两个点:position是实体中心点的位置,offset是圆从该位置的偏移量。这假定角度为0 因此,如果我的车面向0度: 位置(150150)和偏移量(50,0),则边界圆将位于200150 现在,如果我将汽车旋转90度,边界圆应该在位置150200处 这就是我现在拥有的: var differenceX : N
position
是实体中心点的位置,offset
是圆从该位置的偏移量。这假定角度为0
因此,如果我的车面向0度:
位置
(150150)和偏移量
(50,0),则边界圆将位于200150
现在,如果我将汽车旋转90度,边界圆应该在位置150200处
这就是我现在拥有的:
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);
但它给了我这些长椭圆形,现在是一个完美的圆圈
想法?可能尝试不使用实体绘制圆:
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));
希望这有助于……旋转汽车,您可以有效地将其带回原点并在那里旋转,然后将其平移回去。圆心是相同的,即它只是汽车上的另一个点。只需在
\u offset
上单独执行旋转,然后通过\u center
.您正在旋转偏移和对象位置之间的差值。我认为你直觉上有一个正确的想法,想要旋转圆和它的物体之间的距离,但可能把偏移量误认为是圆的位置?。无论哪种方式,由于已经有偏移量,我们不需要计算两者之间的距离 此外,旋转二维向量时,还需要使用二维旋转。二维旋转使用x和y分量组成每个新的x'和y'分量。一个快速的谷歌会返回类似的结果 因为代码总是更容易理解:
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不是正确的值