javascript - 找到位于二次曲线上的两点之间的控制点

标签 javascript math canvas curve quadratic

我在两点之间绘制一条二次曲线,然后在该曲线上找到一个随机点。我想突出显示随机点和终点之间的曲线部分。

所以我想在随机点和终点之间再找一个控制点,然后在原来的曲线之上再画一条不同笔触颜色的二次曲线。

有没有可能找到这样的点?或者还有其他方法可以完成这个任务吗?

Image

这是我正在处理的一段代码:

var startpoint = {x: 50, y: 50}; // Red
var endpoint = {x: 50, y: 250}; // Green
var controlpoint = {x: 100, y: 150}; // Blue

var t = 0.75;
var randompoint = {
    x: (1 - t) * (1 - t) * startpoint.x + 2 * (1 - t) * t * controlpoint.x + t * t * endpoint.x, 
    y: (1 - t) * (1 - t) * startpoint.y + 2 * (1 - t) * t * controlpoint.y + t * t * endpoint.y
}; // Orange


context.beginPath();
context.moveTo(startpoint.x, startpoint.y);
context.quadraticCurveTo(controlpoint.x, controlpoint.y, endpoint.x, endpoint.y);
context.stroke();

这是MBo回答后的工作代码

function lerp(a, b, t)
{
    var _t = 1 - t;
    return {
        x: a.x * _t + b.x * t,
        y: a.y * _t + b.y * t
    };
}

var newpoint = lerp(controlpoint, endpoint, t);

context.beginPath();
context.moveTo(randompoint.x, randompoint.y);
context.quadraticCurveTo(newpoint.x, newpoint.y, endpoint.x, endpoint.y);
context.stroke();

最佳答案

是的,您可以通过简单的方法为这条新曲线创建新的控制点:

   P1' = P0 * (1-t) + P1 *  t

其中P0为起点,P1为旧曲线控制点,P1'为新曲线控制点

(这是一般贝塞尔曲线分割问题的特例)

关于javascript - 找到位于二次曲线上的两点之间的控制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901366/

相关文章:

javascript - Url.Action编译错误: BC30988: Type or 'With' expected

javascript - 圆环图 Vanilla JS 和 HTML Canvas

web-applications - SVG 中的 Web 应用程序、性能问题和可行性

javascript - HTML5 Canvas 4 条线,每个线点上有渐变

python - python简单加法程序

javascript - 有效加载重复图像

javascript - Couchdb _design/doc/_update/push 不能作为对象工作

JavaScript 函数问题

c++ - 将无理分数转换为一组四个真/假分数

C#:如何将整数四舍五入到最接近的 1000