贝塞尔曲线 b 样条曲线 程序

23
贝贝贝贝贝 B 贝贝贝贝贝贝

Upload: uta

Post on 12-Jan-2016

207 views

Category:

Documents


0 download

DESCRIPTION

贝塞尔曲线 B 样条曲线 程序. Option Explicit Private Function NNum(n As Integer) As Long Dim i As Integer, r As Long If n = 0 Or n = 1 Then NNum = 1 Exit Function End If r = 1 For i = 2 To n r = r * i Next. NNum = r End Function Private Function CNum(i As Integer, n As Integer) As Long - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 贝塞尔曲线 B 样条曲线 程序

贝塞尔曲线 B 样条曲线程序

Page 2: 贝塞尔曲线 B 样条曲线 程序

Option ExplicitPrivate Function NNum(n As Integer) As LongDim i As Integer, r As LongIf n = 0 Or n = 1 Then NNum = 1 Exit FunctionEnd Ifr = 1For i = 2 To n r = r * iNext

Page 3: 贝塞尔曲线 B 样条曲线 程序

NNum = r

End Function

Private Function CNum(i As Integer, n As Integer) As Long

CNum = NNum(n) / (NNum(i) * NNum(n - i))

End

Private Function BensteinB(t As Single, i As Integer, n As Integer) As Single

If i = 0 Then

BensteinB = (1 - t) ^ n

Exit Function

End If

Page 4: 贝塞尔曲线 B 样条曲线 程序

If i = n Then

BensteinB = t ^ n

Exit Function

End If

BensteinB = CNum(i, n) * t ^ i * (1 - t) ^ (n - i)

End Function

Private Function BSplineB(t As Single, k As Integer, n As Integer) As Single

Dim j As Integer, r As Single

r = 0

Page 5: 贝塞尔曲线 B 样条曲线 程序

For j = 0 To n - k r = r + (-1) ^ j * CNum(j, n + 1) * (t + n - k - j) ^

nNextBSplineB = r / NNum(n)End FunctionPrivate Function BZline(t As Single, x() As Singl

e) As SingleDim i As Integer, r As Single, n As Integern = UBound(x)r = 0

Page 6: 贝塞尔曲线 B 样条曲线 程序

For i = 0 To n

r = r + BensteinB(t, i, n) * x(i)

Next

BZline = r

End Function

Private Function BSPline(t As Single, x() As Single) As Single

Dim i As Integer, r As Single, n As Integer

n = UBound(x)

r = 0

Page 7: 贝塞尔曲线 B 样条曲线 程序

For i = 0 To n

r = r + BSplineB(t, i, n) * x(i)

Next

BSPline = r

End Function

Private Sub DBZline(x() As Single, y() As Single)

Dim t As Single

Dim x1 As Single, y1 As Single, x0 As Single, y0 As Single

t = 0

Page 8: 贝塞尔曲线 B 样条曲线 程序

x0 = BZline(t, x)

y0 = BZline(t, y)

For t = 0 To 1 Step 0.01

x1 = BZline(t, x)

y1 = BZline(t, y)

Pic.Line (x0, y0)-(x1, y1), RGB(255, 0, 0)

x0 = x1

y0 = y1

Next

End Sub

Page 9: 贝塞尔曲线 B 样条曲线 程序

Private Sub DSPline(x() As Single, y() As Single)

Dim t As Single

Dim x1 As Single, y1 As Single, x0 As Single, y0 As Single

t = 0

x0 = BSPline(t, x)

y0 = BSPline(t, y)

Page 10: 贝塞尔曲线 B 样条曲线 程序

For t = 0 To 1 Step 0.01

x1 = BSPline(t, x)

y1 = BSPline(t, y)

Pic.Line (x0, y0)-(x1, y1), RGB(255, 0, 0)

x0 = x1

y0 = y1

Next

End Sub

Page 11: 贝塞尔曲线 B 样条曲线 程序

Private Sub cmdBezier_Click(index As Integer)Dim x(5) As Single, y(5) As Single, x1(2) As Sing

le, y1(2) As SingleDim i As Integer, j As IntegerPic.Clsx(0) = 100: x(1) = 2000: x(2) = 3000: x(3) = 4000:

x(4) = 2000: x(5) = 1000y(0) = 200: y(1) = 3000: y(2) = 300: y(3) = 4000:

y(4) = 5000: y(5) = 3000For i = 0 To UBound(x) - 1 Pic.Line (x(i), y(i))-(x(i + 1), y(i + 1))Next

Page 12: 贝塞尔曲线 B 样条曲线 程序

If index = 0 Then

DBZline x, y

Else

For i = 0 To UBound(x) - UBound(x1)

For j = 0 To UBound(x1)

x1(j) = x(i + j)

y1(j) = y(i + j)

Next

DSPline x1, y1

Next

End If

End Sub

Page 13: 贝塞尔曲线 B 样条曲线 程序

贝塞尔曲面

Page 14: 贝塞尔曲线 B 样条曲线 程序

贝塞尔曲面  给定 (m+1)(n+1) 个空间点列 bi,j(i=0,1,

2,…,n;j=0,1,2,…,n) 后,可以定义 mn次贝塞尔曲面如下式所示:

jimj

n

i

m

jni bvBuBvuP ,,

0 0,,

Page 15: 贝塞尔曲线 B 样条曲线 程序

1.双一次贝塞尔曲面 当 m=n=1 时,有  B0,1(t)=1-t, B1,1(t)=t所以 

v

v

bb

bbuu

vB

vB

bb

bbvBuBvuP

11

,,

1,10,1

1,00,0

1,1

1,0

1,10,1

1,00,01,11,0

Page 16: 贝塞尔曲线 B 样条曲线 程序

2.双二次贝塞尔曲面当 m=n=2 时,有

  B0,2(t)=(1-t)2, B1,2(t)=2t(1-t), B2,2(t)=t2

所以有

vB

vB

vB

bbb

bbb

bbb

uBuBuBvuP

2,2

2,1

2,0

2,21,20,2

2,11,10,1

2,01,00,0

2,22,12,0,

Page 17: 贝塞尔曲线 B 样条曲线 程序

3.双二次贝塞尔曲面当 m=n=3 时,有

  B0,3(t)=(1-t)3, B1,3(t)=3t(1-t)2, B2,3(t)= 3 (1-t)2t

B3,3(t)= t3

所以有

Page 18: 贝塞尔曲线 B 样条曲线 程序

vB

vB

vB

vB

bbbb

bbbb

bbbb

bbbb

uBuBuBuBvuP

3,3

3,2

3,1

3,0

3,32,31,30,3

3,22,21,20,2

3,22,11,10,1

3,02,01,00,0

3,33,23,13,0,

Page 19: 贝塞尔曲线 B 样条曲线 程序

B 样条曲面

Page 20: 贝塞尔曲线 B 样条曲线 程序

 给定 (m+1)(n+1) 个空间点列 bi,j(i=0,1,2,…,n;j=0,1,2,…,n) 后,可以定义 mn 次B 样条曲面如下式所示:

jimj

n

i

m

jni bvFuFvuP ,,

0 0,,

Page 21: 贝塞尔曲线 B 样条曲线 程序
Page 22: 贝塞尔曲线 B 样条曲线 程序

实验曲线的绘制方法

Page 23: 贝塞尔曲线 B 样条曲线 程序

1. 最小二乘法 对于一系列的数据点 (xi,yi) 和所要绘制的曲

线 y=f(x), 用什么样的标准来评价这条曲线是处于较为合理的状态呢?通常用数据点的坐标值与曲线上对应的坐标之差作为评判的标准。

i = f(xi)-yi

常用的评判方法是:使残差的平方和达到最小-最小二乘法。