Shade3D 公式

06 Bezier line 基礎 [ Shade Labo ]


#1

06 - 1 座標


bezier line の4つの control point 座標 [ **p0**, **p1**, **p2**, **p3** ] と bezier parameter ( 0 ~1 ) から parameter t での bezier line 上の座標 **p**( t ) を求める。

太字はベクトルを表す

          [ 式 06 - 01 ]




次の script は、Shade 上で選択した線形状の最初の区間の bezier parameter = 0.5 の位置の座標を求めます。


[ script 06 - 01 ]     Shade 上で線形状を選択して実行

#  線形状の最初の区間の bezier parameter = 0.5 の位置の座標を求める

#  Shade 上で線形状を選択して実行


import labo

bz = labo.get_bezier(xshade, 0)	#  [P]
t = 0.5
T = labo.bezier_t(t)			#  [T]
M = labo.bezier_m()				#  [M]
p = T*M*bz						#  [T] x [M] x [P]

print 'T ='
print T
print 'M ='
print M
print 'bz ='
print bz
print 'p ='
print p							#  座標値

#2

06 - 2 接線ベクトル


bezier line の4つの control point 座標 [ **p0**, **p1**, **p2**, **p3** ] と bezier parameter ( 0 ~1 ) から parameter t での bezier line 上の 接線ベクトル **Vt**( t ) ( 単位ベクトル )は、その点での座標値を paremeter t で微分することで求まる。
          [ 式 06 - 02 ]

次の script は、Shade 上で選択した線形状の最初の区間の bezier parameter = 0.5 の位置の接線ベクトル ( 単位ベクトル ) を求めます。
[ script 06 - 02 ]     Shade 上で線形状を選択して実行
#  線形状の最初の区間の bezier parameter = 0.5 の位置の接線ベクトル ( 単位ベクトル ) を求める

#  Shade 上で線形状を選択して実行


import labo

bz = labo.get_bezier(xshade, 0)		#  [P]
t = 0.5
Td = labo.bezier_t_derivative(t)	#  d[T]/dt
M = labo.bezier_m()					#  [M]
v = Td*M*bz							#  d[T]/dt x [M] x [P]
v.norm()							#  単位ベクトル化

print 'Td ='
print Td
print 'M ='
print M
print 'bz ='
print bz
print 'v ='
print v								#  接線ベクトル