【发布时间】:2019-10-02 18:48:19
【问题描述】:
我需要几个点的贝塞尔函数并将其分开一些步骤。想象一下带有虚线的海盗地图 :) 我有一个破折号(一些带有 x/y 位置和旋转的显示对象)用于构建此地图
我找到了画布方法.quadraticCurveTo() 等,但我需要特定的函数来将曲线与步骤分开
我使用较早的原生函数作为基本贝塞尔曲线
function bezier(t, p0, p1, p2, p3){
var cX = 3 * (p1.x - p0.x),
bX = 3 * (p2.x - p1.x) - cX,
aX = p3.x - p0.x - cX - bX;
var cY = 3 * (p1.y - p0.y),
bY = 3 * (p2.y - p1.y) - cY,
aY = p3.y - p0.y - cY - bY;
var x = (aX * Math.pow(t, 3)) + (bX * Math.pow(t, 2)) + (cX * t) + p0.x;
var y = (aY * Math.pow(t, 3)) + (bY * Math.pow(t, 2)) + (cY * t) + p0.y;
return {x: x, y: y};
}
但我不知道我可以用它来解决我的问题,因为我只有带有简单点 [{x:0, y:0}, {x:-30, y:-50}, {x:-10, y:-100}, {x:-30, y:-150}] 的初始数组(没有贝塞尔控制点)
请帮我计算软路径的控制点
【问题讨论】:
-
这看起来不像是贝塞尔函数?对于三次曲线(因为您显示四个点),它是
a(1-t)³ + 3bt(1-t)² + 3ct²(1-t) + dt³其中 a、b、c 和 d 是您的坐标值。此外,Canvas2D API 支持使用bezierCurveTo()的三次贝塞尔曲线,因此甚至没有任何理由手动计算任何曲线坐标。所以说了这么多,给pomax.github.io/bezierinfo看看吧。
标签: javascript bezier