【问题标题】:How to find the mathematical function defining a bezier curve如何找到定义贝塞尔曲线的数学函数
【发布时间】:2009-12-05 22:12:24
【问题描述】:

我正在尝试实现贝塞尔曲线和线段相交测试。我的搜索结果最接近的是采用贝塞尔曲线(为简单起见,我们将其限制为三个控制点)找到生成该曲线的数学函数并将其放在 origo 上。然后,将线段的函数作为另一个函数,让它们相等,求解方程。

许多来源都陈述了上述解决方案(除非我误解了它们),我的问题是我找不到计算生成贝塞尔曲线的数学函数的方法。

哦,请指出我是否完全偏离了寻找交叉点的轨道。

【问题讨论】:

    标签: language-agnostic math bezier


    【解决方案1】:

    贝塞尔曲线是一个参数函数。二次贝塞尔曲线(即三个控制点)可以表示为:F(t) = A(1 - t)^2 + 2B(1 - t)t + Ct^2 其中ABC是点,t从零到一。

    这会给你两个方程:

    x = a(1 - t)^2 + 2b(1 - t)t + ct^2

    y = d(1 - t)^2 + 2e(1 - t)t + ft^2

    如果您将例如线方程 (y = kx + m) 添加到其中,您将得到三个方程和三个未知数 (x, y 和 t)。

    【讨论】:

    • 你定义的函数 B(t) 似乎包含在它的定义中,这是故意的吗?还是 A、B 和 C 是二维(至少在我的示例中)坐标?
    • A、B 和 C 是二维坐标,是的。 B 的重用是无意的。
    • 在中间项上缺少 2 的系数。应该是:F(t) = A(1 - t)^2 + 2*B(1 - t)t + Ct^2
    • 谢谢 zanlok,你当然是对的。 B 是一个控制点,所以 2 应该是明确的。我很惊讶近四年来没有人注意到这一点......
    猜你喜欢
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2018-12-03
    • 2016-10-05
    • 2021-12-19
    • 2011-09-12
    相关资源
    最近更新 更多