PaperJS-如何沿路径移动和沿路径旋转

时间:2019-06-19 12:24:21

标签: javascript math paperjs

here中显示的示例说明了如何在Paperjs中沿路径移动对象,但是如何正确地沿路径旋转对象?

在上面链接中显示的示例中,人们通过使用圆圈作为示例来提出建议。但是一旦更改为反角new Path.Rectangle(new Point(20,20), new Size(20,20));,您就会看到它沿路径移动,但实际上并没有沿路​​径方向旋转。

如何计算旋转并将其设置为我的对象?

1 个答案:

答案 0 :(得分:2)

为了计算旋转,您需要知道矩形位置处路径的切向量。
可以使用path.getTangentAt(offset)方法来检索。
然后,使项目旋转动画的一种简单方法是将item.applyMatrix设置为false,然后在每帧上对item.rotation属性进行动画处理。

这里是sketch演示解决方案。

// Create the rectangle to animate along the path.
// Note that matrix is not applied, this will allow us to easily animate its
// rotation.
var rectangle = new Path.Rectangle({
    point: view.center,
    size: new Size(100, 200),
    strokeColor: 'orange',
    applyMatrix: false
});

// Create the path along which the rectangle will be animated.
var path = new Path.Circle({
    center: view.center,
    radius: 250,
    strokeColor: 'blue'
});

// On each frame...
function onFrame(event) {
    // ...calculate the time of the animation between 0 and 1... 
    var slowness = 400;
    var time = event.count % slowness / slowness;
    // ...and move the rectangle.
    updateRectangle(time);
}

function updateRectangle(time) {
    // Calculate the offset relatively to the path length.
    var offset = time * path.length;
    // Get point to position the rectangle.
    var point = path.getPointAt(offset);
    // Get tangent vector at this point.
    var tangent = path.getTangentAt(offset);
    // Move rectangle.
    rectangle.position = point;
    // Rotate rectangle.
    rectangle.rotation = tangent.angle;
}