名称 | ・・・・・・・ |
tを指定し、その点の曲率、曲率半径を計算 |
|
ルーチン名 | ・・・・・・・ |
Kyokuritu |
|
スクリプトNo | ・・・・・・・ | sub_set01- 005 | |
file名 | ・・・・・・・ | ScriptSet01.lzh sub_set01のページからセットごとダウンロードしてください。 |
|
概略 | ・・・・・・・ |
tパラメータ=tbの地点の曲率(κ)を計算する。 |
|
使用前提 | ・・・・・・・ |
線形状(べジェ曲線)を選択して適切な引数を指定してから実行する。 |
|
依存関係 | ・・・・・・・ |
GetnVec |
ベジエ制御点P0〜P3の座標値の取得---sub_set01-012 |
引数説明 | ・・・・・・・ |
Vec3: |
(in)線型状の座標データ【3次元配列】が格納されている。 |
戻り値説明 | ・・・・・・・ |
tパラメータ(=tb)の地点の曲率 |
|
変数説明 | ・・・・・・・ |
XYZ0(2)〜XYZ3(2) |
階差 |
注意点 | ・・・・・・・ |
内部で使用するsBibunがfalseを戻したときの処理はしていません。 |
|
スクリプト | |||
'--------------ベジェ曲線の曲率(κ)を求める Function kyokuritu(Vec3,PtNo,tb) '戻値---曲率κ '引数--- ' Vec3:(in)対象となる線形状の座標データ(3次元) ' PtNo:(in)PtNo番目のアンカーポイント〜PtNo+1番目のアンカーポイントまでが計算の対象となる。 ' tb :(in)tパラメータ(指定値) Dim XYZ0(2),XYZ1(2),XYZ2(2),XYZ3(2) '階差 Dim Kapper,Rou 'Kapper:曲率 Rou:曲率半径 Dim Pos(2), dPos(2), ddPos(2) 'Posの微分、Posの二階微分(tで微分) Dim P '3次のベジエ制御点P0〜P3の座標値 Dim sPos(2),ssPos(2) 'Posの微分、Posの二階微分(s弧長で微分) 'ベジェ計算用の座標データを取り出す P=GetnVec(Vec3,PtNo) '階差を求めtの一階微分、二階微分を計算する Call kaisa(P,XYZ0,XYZ1,XYZ2,XYZ3) Call tBibun(XYZ0,XYZ1,XYZ2,XYZ3,tb,Pos,dPos,ddPos) 'sの一階微分、二階微分を計算する Call sBibun(dPos,ddPos,sPos,ssPos) 'κ(曲率)を求める公式 kyokuritu=sqr(ssPos(0)^2+ssPos(1)^2+ssPos(2)^2) Rou=1/kyokuritu XShade.Message PtNo&"番目で、ベジェパラメータt="&tb&"のときの曲率κ="_ &round(kyokuritu*1000000)/1000000 XShade.Message PtNo&"番目で、ベジェパラメータt="&tb&"のときの曲率半径ρ="_ &round(Rou*1000)/1000 End Function |
|||
使用例 | |||
Dim NA,Vec3,PtNo Dim tb,a 'アンカーポイントの数を取得 NA=XShade.NumberOfAnchorPoints() 'アンカーポイントの座標値を取得 Vec3=GetVec3(NA) '-------------------ベジェ曲線でtを指定し、その点の曲率、曲率半径を計算 ' (アンカーポイント番号PtNo〜PtNo+1の部分が対象) PtNo=0: tb=0.55 a=Kyokuritu(Vec3,PtNo,tb) |