名称 | ・・・・・・・ |
tを指定し、その点の接線の単位ベクトルを計算 |
|
ルーチン名 | ・・・・・・・ |
eVecSessen |
|
スクリプトNo | ・・・・・・・ | sub_set01- 006 | |
file名 | ・・・・・・・ | ScriptSet01.lzh sub_set01のページからセットごとダウンロードしてください。 |
|
概略 | ・・・・・・・ |
tパラメータ=tbを指定し、その地点の接線の方向ベクトルを計算する。 |
|
使用前提 | ・・・・・・・ |
線形状(べジェ曲線)を選択して適切な引数を指定してから実行する。 |
|
依存関係 | ・・・・・・・ |
GetnVec |
ベジエ制御点P0〜P3の座標値の取得---sub_set01-012 |
引数説明 | ・・・・・・・ |
Vec3 |
(in)線型状の座標データ(3次元配列)が格納されている。 |
戻り値説明 | ・・・・・・・ |
成功したときは接線方向ベクトルが配列で、失敗したときはfalseが返されます。 |
|
変数説明 | ・・・・・・・ |
XYZ0(2)〜XYZ3(2) |
階差 |
注意点 | ・・・・・・・ |
このサブルーチン自体には表示機能も描画機能もありませんのでtestDrawLineルーチンを使って確認テストをしてみてください。 |
|
スクリプト | |||
'--------------ベジェ曲線の接線パラメーター Function eVecSessen(Vec3,PtNo,tb) 'ベジェパラメータtでのベジェ曲線の接線のパラメータeVec(l,m,n)を算出する '戻値---接線の方向ベクトル '引数--- ' PtNo:(in)PtNo番目のアンカーポイント〜PtNo+1番目のアンカーポイントまでが計算の対象となる。 ' tb :(in)tパラメータ(指定値) ' Vec3:(in)対象となる線形状の座標データ(3次元配列) Dim XYZ0(2),XYZ1(2),XYZ2(2),XYZ3(2) '階差 Dim Pos(2), dPos(2), ddPos(2) 'Posの微分、Posの二階微分(tで微分) Dim P '3次のベジエ制御点P0〜P3の座標値 Dim eVec(2) '接線の方向(単位)ベクトル Dim j,S P=GetnVec(Vec3,PtNo) '階差を求めtの一階微分、二階微分を計算する Call kaisa(P,XYZ0,XYZ1,XYZ2,XYZ3) Call tBibun(XYZ0,XYZ1,XYZ2,XYZ3,tb,Pos,dPos,ddPos) S=sqr(dPos(0)^2+dPos(1)^2+dPos(2)^2) If S=0 then eVecSessen=false:Exit Function end if for j=0 to 2 eVec(j)=dPos(j)/S next eVecSessen=eVec End Function |
|||
使用例 | |||
Dim NA,Vec3,PtNo Dim eVec,Pos,tb,L '-------------------ベジェ曲線でtを指定し、その点の接線の単位ベクトルを計算 ' (アンカーポイント番号PtNo〜PtNo+1の部分が対象) PtNo=0: tb=0.55: L=400 eVec=eVecSessen(Vec3,PtNo,tb) if not IsArray(eVec) then exit sub Pos=calcPos(Vec3,PtNo,tb) Call testDrawLine(eVec,Pos,PtNo,tb,L) |