三点包络曲线方程
geogebra吧
全部回复
仅看楼主
level 11
如图,有A、B、C三点,在线段AB、BC上均匀取n个点,定义一线段,起点为AB上的点,止点为B上的点,依次取均匀点,则线段序列如下:
A = (-2.50468, -1.46694)
B = (3.72762, -1.60998)
C = (2.07248, 2.73219)
f = 线段(A, B)
g = 线段(B, C)
h = 线段(C, A)
n = 40
l1 = 序列(A + t (B - A), t, 0, 1, 1 / n)
l2 = 序列(B + t (C - B), t, 0, 1, 1 / n)
l3 = 序列(C + t (A - C), t, 0, 1, 1 / n)
l4 = 序列(线段(l1(i), l2(i)), i, 1, n)
同理,其它两边包络线如下:
l5 = 序列(线段(l2(i), l3(i)), i, 1, n)
l6 = 序列(线段(l3(i), l1(i)), i, 1, n)
我们需要包络形成的曲线呢?如下边红色线方程是什么?
这时候,上边用序列法是不能得到曲线的,我们用下边方法,先定义AB、BC、CA线段:
a = 曲线(A + t (B - A), t, 0, 1)
b = 曲线(B + t (C - B), t, 0, 1)
c = 曲线(C + t (A - C), t, 0, 1)
画一个从a到b的曲面:
t = 曲面((1 - u / n) a(v / n) + u / n b(v / n), u, 0, n, v, 0, n)
我们发现,这个曲面与序列法生成的线段序列是一样的,而这个曲面中如下曲线是我们需要的:
u = 曲线(t(v, v), v, 0, n)
这个曲线根据 参数关系,我们其实不需要通过曲面来定义:
d = 曲线((1 - t) a(t) + t b(t), t, 0, 1)
同理,其它两条曲线如下:
e = 曲线((1 - t) b(t) + t c(t), t, 0, 1)
i = 曲线((1 - t) c(t) + t a(t), t, 0, 1)
2021年02月28日 13点02分 1
level 11
取其中一条曲线d我们继续研究一下,发现它与贝塞尔曲线很像,我们试着在线段AB、CB上描点D、E:
D = 描点(f)
k = 路径值(D)
E = 描点(g, 1 - k)
这样处理,是保持D、E在两条线段同步,然后作贝氏曲线:
j = 曲线(A (1 - t)³ + 3D t (1 - t)² + 3 * E t² (1 - t) + C t³, t, 0, 1)
当我们移动D点,k为2/3时,曲线与包络曲线重合:
为了证明这一发现,我们在运算区中继续分析这两曲线,为了不与现有点混在一起,我们让A为A_1,B为A_2,C为A_3,让D为D_1,E为E_1:
则贝氏曲线方程为:
A_1 (1 - t)³ + 3D_1 t (1 - t)² + 3 * E_1 t² (1 - t) + A_3 t³
根据上边D路径值为2/3,我们很容易得到:
D_1=A_1+2(A_2-A_1)/3
E_1=A_3+2(A_2-A_3)/3
包络曲线方程我们也可以把线段方程代入后得到:
(1-t)*(A_1+t*(A_2-A_1))+t*(A_2+t*(A_3-A_2))
下面贴出运算区情况:
贝氏曲线替换掉D_1和E_1,包络曲线作展开处理,得到的方程完全一样。至此,我们可以确定,上边的发现完全是正确的,即包络曲线与贝氏曲线,当控制点分别两线段2/3处时,两曲线相等。
2021年02月28日 14点02分 2
level 11
A、B、C折线换成曲线,也是可以参考上边方法,只是效果差点:
2021年03月03日 08点03分 3
level 6
好文章,怎么没有人顶呢,我来顶起来吧
2024年09月28日 00点09分 4
level 6
楼主,为啥我弄的时候显示t是未知变量
2025年03月23日 04点03分 6
1