我使用Raphael JS构建了一个由三个元素组成的简单二维汽车。为此,我将身体作为图像和两个轮胎。我将元素分开是因为我希望轮胎在动画中旋转。
var curCar = raphael.image("car.png", /* x */ 0, /* y */ 0, /* width */ 120, /* height*/ 82)
var tires = raphael.set();
tires.push(
raphael.image("tire.png", 2, 50, 32, 32),
raphael.image("tire.png", 84, 50, 32, 32)
);
如您所见,轮胎位于汽车的“底部”并且已经对齐。现在,curCar 遵循使用 Raphael.animate 的路径,该路径运行良好。对于动画的每次更新,我都会将轮胎转换为 curCar 的位置。它看起来像这样:
function animationUpdate (pos) {
curCar.transform("t" + [pos.x, pos.y] +" r"+ pos.alpha);
tires.transform("t" + [pos.x, pos.y ]);
};
“t”代表平移(x,y),r代表旋转。这些值由 Raphael 自动计算。当沿着直线行驶时,这一切都可以解决,但是一旦 curCar 旋转,轮胎的计算就会失败。
一个例子:
curCar 位于位置 x: 100 / y: 200 并旋转 10°。轮胎被转换为 x:102 / y:150 和 x:184 / y:250。因此 curCar 旋转了 10°,轮胎就错位了。
我的主要问题是:
考虑到旋转,我如何计算正确的 X/Y 位置?必须有一个通用的数学公式来做到这一点。