如何计算具有给定隐函数的贝塞尔曲线的控制点?
How to calculate control points for a bezier curve with a given implicit function?
我正在尝试编写一个程序来绘制贝塞尔曲线段,以实现我教科书中的知识。我想尝试制作一个绘图程序来使用隐式函数绘制一些东西。我希望我的程序按如下方式工作。
- 用户输入隐式函数,假设 y=2x^3。
- 计算控制点(不知道怎么做)
- 绘制贝塞尔曲线(完成)
- 下一功能
理论上,我可以通过直接替换来绘制曲线,但我可能会对曲线做一些修改,我想实现我所学的东西,所以,我想明智地做(直接替换似乎很愚蠢)。呵呵^^
编辑 1:假设边界由用户提供
第一步是为曲线生成参数化表达式。给出的例子可以很容易地转换:
c(t) = (t, 2 * t^3)^T
现在用Monomial basis表示这条曲线:
c(t) = / 0 1 0 0 \ * (1, t, t^2, t^3)^T
\ 0 0 0 2 /
= C * M(t)
在这个表达式中,第一个矩阵C
是系数矩阵。我们需要做的就是将这个矩阵转换为 Bernstein 基。将单项式基变换为伯恩斯坦基的矩阵为:
/ 1 - 3t + 3t^2 - t^3 \ / 1 -3 3 -1 \ / 1 \
B(t) = | 3t - 6t^2 + 3t^3 | = | 0 3 -6 3 | * | t |
| 3t^2 - 3t^3 | | 0 0 3 -3 | | t^2 |
\ t^3 / \ 0 0 0 1 / \ t^3 /
这个等式可以倒过来得到:
/ 1 1 1 1 \
M(t) = | 0 1/3 2/3 1 | * B(t)
| 0 0 1/3 1 |
\ 0 0 0 1 /
将其代入曲线方程,得到:
c(t) = C * M(t)
/ 1 1 1 1 \
= C * | 0 1/3 2/3 1 | * B(t)
| 0 0 1/3 1 |
\ 0 0 0 1 /
可以计算第一个矩阵乘积:
c(t) = / 0 1/3 2/3 1 \ * B(t)
\ 0 0 0 2 /
这为您提供了贝塞尔曲线的控制点:
p0 = (0, 0)^T
p1 = (1/3, 0)^T
p2 = (2/3, 0)^T
p3 = (1, 2)^T
这个过程可以应用于任何多项式曲线。
形式为
的方程的通解
y = a + b * x + c * x^2 + d * x^3
是:
p0 = (0, a)^T
p1 = (1/3, a + b/3)^T
p2 = (2/3, a + 2b/3 + c/3)^T
p3 = (1, a + b + c + d)^T
我正在尝试编写一个程序来绘制贝塞尔曲线段,以实现我教科书中的知识。我想尝试制作一个绘图程序来使用隐式函数绘制一些东西。我希望我的程序按如下方式工作。
- 用户输入隐式函数,假设 y=2x^3。
- 计算控制点(不知道怎么做)
- 绘制贝塞尔曲线(完成)
- 下一功能
理论上,我可以通过直接替换来绘制曲线,但我可能会对曲线做一些修改,我想实现我所学的东西,所以,我想明智地做(直接替换似乎很愚蠢)。呵呵^^
编辑 1:假设边界由用户提供
第一步是为曲线生成参数化表达式。给出的例子可以很容易地转换:
c(t) = (t, 2 * t^3)^T
现在用Monomial basis表示这条曲线:
c(t) = / 0 1 0 0 \ * (1, t, t^2, t^3)^T
\ 0 0 0 2 /
= C * M(t)
在这个表达式中,第一个矩阵C
是系数矩阵。我们需要做的就是将这个矩阵转换为 Bernstein 基。将单项式基变换为伯恩斯坦基的矩阵为:
/ 1 - 3t + 3t^2 - t^3 \ / 1 -3 3 -1 \ / 1 \
B(t) = | 3t - 6t^2 + 3t^3 | = | 0 3 -6 3 | * | t |
| 3t^2 - 3t^3 | | 0 0 3 -3 | | t^2 |
\ t^3 / \ 0 0 0 1 / \ t^3 /
这个等式可以倒过来得到:
/ 1 1 1 1 \
M(t) = | 0 1/3 2/3 1 | * B(t)
| 0 0 1/3 1 |
\ 0 0 0 1 /
将其代入曲线方程,得到:
c(t) = C * M(t)
/ 1 1 1 1 \
= C * | 0 1/3 2/3 1 | * B(t)
| 0 0 1/3 1 |
\ 0 0 0 1 /
可以计算第一个矩阵乘积:
c(t) = / 0 1/3 2/3 1 \ * B(t)
\ 0 0 0 2 /
这为您提供了贝塞尔曲线的控制点:
p0 = (0, 0)^T
p1 = (1/3, 0)^T
p2 = (2/3, 0)^T
p3 = (1, 2)^T
这个过程可以应用于任何多项式曲线。
形式为
的方程的通解y = a + b * x + c * x^2 + d * x^3
是:
p0 = (0, a)^T
p1 = (1/3, a + b/3)^T
p2 = (2/3, a + 2b/3 + c/3)^T
p3 = (1, a + b + c + d)^T