sub_set01へ戻る

名称 ・・・・・・・

ベジエ制御点P0〜P3の座標値の取得

ルーチン名 ・・・・・・・

GetnVec

スクリプトNo ・・・・・・・ sub_set01- 012
file名 ・・・・・・・ ScriptSet01.lzh
sub_set01のページからセットごとダウンロードしてください。
概略 ・・・・・・・

与えられた線形状の座標データVec3と指定したアンカーポイント番号PtNoとPtNo+1の区間にあるbezier曲線の制御点P0からP3の座標値を取得する。

使用前提 ・・・・・・・

PtNoに最終ポイントを指定するとエラーになります。(閉じた線形状の最後の弧には対応していないということです。)
GetVec3(sub-004)を使って前もって線形状の座標データVec3を取得して置いてください。
呼び出し側で、戻り値(配列)を受けるを受ける変数(バリアント)を用意(宣言)しておいてください。

依存関係 ・・・・・・・

直接の依存は無い

間接的にはGetVec3(sub-004)との併用になります。

引数説明 ・・・・・・・

Vec3
PtNo

(in)線型状の座標データ【3次元配列】が格納されている。
(in)PtNo番目〜PtNo+1番目のアンカーポイントまで計算される。

戻り値説明 ・・・・・・・

ベジエ制御点P0〜P3の座標値[2次元、3×4要素の配列] が戻りますので普通のバリアント変数で受けてください。

変数説明 ・・・・・・・

i
P(3,2)

カウンタ用変数
ベジェ制御点P0〜P3を各方向(x,y,z)毎に保持する変数。

注意点 ・・・・・・・

閉じた線形状の最後の弧に対応していないことに注意!! 作ったときに必要がなかったので・・・
改良は簡単です,OpenClose(開閉)を示す引数を追加し,NoPtが最終ポイント(uboundで判るはず)で,しかもClose(閉じた線形状)であったならばVec3(PtNo+1, j ,*) の部分をVec3(0, j ,*)に置き換えるように処理を切り分ければできます。(呼び出し側の引数の修正を忘れないように)

 
スクリプト
'------------------------------ベジェ計算に使うP0〜P3の座標をVecから拾い出す	
Function GetnVec(Vec3,PtNo)
'戻値---'3次のベジエ制御点P0〜P3の座標値(2次元)
'引数---
' Vec3  :(in)座標データ(アンカーポイント番号、座標軸方向[x,y,z]、ポイントの種類[アンカー,In,Out])
' PtNo  :(in)取り出す座標値のアンカーポイント番号(指定する)
  Dim j,P(3,2)
  for j=0 to 2 
    P(0,j)=Vec3(PtNo,j,0)                'P0:最初のポイントの座標値		
    P(1,j)=Vec3(PtNo,j,2)                'P1:最初のポイントのInハンドル座標値
    P(2,j)=Vec3(PtNo+1,j,1)              'P2:次のポイントのOutハンドル座標値
    P(3,j)=Vec3(PtNo+1,j,0)              'P3:次のポイントの座標値
  next
  GetnVec=P
End Function
使用例
主サブルーチンの例題を参照してください。

sub_set01へ戻る