Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 绕点移动圆_Flash_Math_Rotation - Fatal编程技术网

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不是正确的值