假设(比如三角形),我想将一个对象从 A 移动到 B,然后将 B 移动到 C,然后将 C 移动到 A。我该怎么做?
我用谷歌搜索了很多,但找不到围绕多边形移动物体(比如球)的例子。我知道,我可以用贝塞尔曲线来完成它,但是对于一个简单的三角形或矩形,我怎么能没有它呢?请给出一些伪代码或任何语言的代码。(首选 JavaScript/处理)。
假设(比如三角形),我想将一个对象从 A 移动到 B,然后将 B 移动到 C,然后将 C 移动到 A。我该怎么做?
我用谷歌搜索了很多,但找不到围绕多边形移动物体(比如球)的例子。我知道,我可以用贝塞尔曲线来完成它,但是对于一个简单的三角形或矩形,我怎么能没有它呢?请给出一些伪代码或任何语言的代码。(首选 JavaScript/处理)。
您可以使用插值获得位置:
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 时。
伪:
//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
。