如何沿多边形移动对象

How to move object along the polygons

本文关键字:对象 移动 多边形 何沿      更新时间:2023-09-26

假设(比如三角形),我想将一个对象从 A 移动到 B,然后从 B 移动到 C,然后从 C 移动到 A。我该怎么做?

我用谷歌搜索了很多,但找不到在多边形周围移动物体(比如球)的例子。我知道,我可以用贝塞尔曲线来完成,但是对于一个简单的三角形或矩形,没有它怎么办?请提供一些伪代码或任何语言的代码。(更喜欢JavaScript/Processing)。

插值

您可以使用插值来获取位置:

x = x1 + (x2 - x1) * f;
y = y1 + (y2 - y1) * f;

x1, y1是你的第一点,x2, y2你的终点。

f 是一个介于 0.0 和 1.0 之间的值,它决定了您在行上的位置(即 0 = 开始,0.5 是一半,1 = 结束)。

当您f = 1时,您只需转到多边形中的下一段并将f重置为 0。

小提琴 (JS)

//prepare first segment:
x1 = nextX1;
y1 = nextY1;
x2 = nextX2;
y2 = nextY2;
loop:
    f += speed;  /// f.ex. 0.01
    x = x1 + (x2 - x1) * f;
    y = y1 + (y2 - y1) * f;
    if f=1 then
        f = 0;
        x1 = nextX1;
        y1 = nextY1;
        x2 = nextX2;
        y2 = nextY2;
    repeat loop;

JavaScript 中的示例(有关完整的工作示例,请参阅上面的演示链接)

function loop() {
    /// leave a trace behind for demo
    ctx.clearRect(x + 1, y + 1, 6, 6);
    
    f += speed;
    
    if (f >= 1) {
        /// initialize next line in polygon (see demo)
        getNextSegment();
    }
    /// Here: get x and y based on interpolation       
    x = x1 + (x2 - x1) * f;
    y = y1 + (y2 - y1) * f;    
    /// draw something to show position
    ctx.fillRect(x, y, 8, 8);
    
    /// loop
    requestAnimationFrame(loop);
}

对于恒速,计算起点终点之间的距离,并在用于speed的距离上除以步长值(预定义的固定值)。