sub_set01へ戻る

名称 ・・・・・・・

t=taの地点の座標の取得

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

calcPos

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

tパラメータ(=ta)から座標値のみを求める。

使用前提 ・・・・・・・

線形状(べジェ曲線)を選択して適切な引数を指定してから実行する。
引数に渡すVec3,PtNo,taを前もって用意しておく。
戻り値を受け取るバリアント変数を用意(宣言)しておく。

依存関係 ・・・・・・・

GetnVec:
kaisa:

ベジエ制御点P0〜P3の座標値の取得---sub_set01-012
階差の計算(ベジエ制御点Pから階差を計算)---sub_set01-016

引数説明 ・・・・・・・

Vec3 :
PtNo :

(in)座標データ(アンカーポイント番号、方向[x,y,z]、種類[アンカー,In,Out])
(in)取り出す座標値のアンカーポイント番号(指定する)

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

tパラメータtaでの座標値。
配列(1次元、サイズ2)で戻るので通常の(バリアント)変数で受け取る。

変数説明 ・・・・・・・

XYZ0(2)〜XYZ3(2)
Pos(2):
P:
j :

階差
ベジェ曲線上の点の座標値
ベジエ制御点P0〜P3の座標値
カウンタ用変数

注意点 ・・・・・・・

引数taは0〜1の範囲で指定してください。戻り値は配列で戻るのでバリアント変数で受けて配列と同様に扱ってください。

 
スクリプト
'-----------tパラメータから座標値(のみ)の計算
Function calcPos(Vec3,PtNo,ta)
'階差とtパラメータ(=ta)から座標値のみを求める。
'戻値---tパラメータtaでの座標値
'引数---
' Vec3  :(in)座標データ(アンカーポイント番号、座標軸方向[x,y,z]、ポイントの種類[アンカー,In,Out])
' PtNo  :(in)取り出す座標値のアンカーポイント番号(指定する)
' ta     :(in)求めたいtパラメータ

  Dim XYZ0(2),XYZ1(2),XYZ2(2),XYZ3(2)  '階差
  Dim Pos(2)  ':座標値用配列
  Dim P       ':3次のベジエ制御点P0〜P3の座標値
  Dim j       ':カウンタ用変数(xyz)

  P=GetnVec(Vec3,PtNo)
  Call kaisa(P,XYZ0,XYZ1,XYZ2,XYZ3)

  For j = 0 To 2
    Pos(j) = XYZ3(j)*ta^3+3*XYZ2(j)*ta^2+3*XYZ1(j)*ta+XYZ0(j)
  Next
  calcPos=Pos
End function
使用例
  Dim NA,Vec3,PtNo
  Dim Vec3,NA,ta,PtNo,ta

  'アンカーポイントの数を取得
  NA=XShade.NumberOfAnchorPoints()
  'アンカーポイントの座標値を取得
  Vec3=GetVec3(NA)

'--------------------ベジェ曲線でt=taの地点の座標を計算する。
'    (アンカーポイント番号PtNo〜PtNo+1の部分が対象)
  ta=0.32: PtNo=0
  Pos=calcPos(Vec3,PtNo,ta)
  XShade.Message"x="&round(Pos(0)*1000)/1000&_
  "   y="&round(Pos(1)*1000)/1000&_
  "   z="&round(Pos(2)*1000)/1000("OKが押されました。")
end sub

sub_set01へ戻る