Reference: Parametric Curve
Model ElementReference_ParamCurveは、パラメトリック曲線要素を定義します。1つの自由パラメータuについて、1つのパラメトリック曲線が定義されます。下の図で、座標系OXYZを基準にして曲線Cが定義されているとします。
説明

図 1. パラメトリック曲線
パラメトリック曲線は開いていても閉じていてもかまいません。曲線は、次に示す閉境界の条件を満たす場合に閉じていると言います。
f(u_start) = f(u_end)
f'(u_start) = f'(u_end)
f''(u_start) = f''(u_end)
g(u_start) = g(u_end)
g'(u_start) = g'(u_end)
g''(u_start) = g''(u_end)
h(u_start) = h(u_end)
h'(u_start) = h'(u_end)
h''(u_start) = h''(u_end)
解析、スプラインの2つのタイプのパラメトリック曲線があります。 スプライン表現では、曲線の(x、y、z)データをデータポイントのマトリクスとして指定するか、XMLファイルで直接指定する必要があります。 MotionSolveは、データポイントでスプラインをフィットさせ、自動的にu変数について曲線をパラメータ化します。
解析表現では、ユーザー作成のサブルーチンCURSUBで、関数f()、g()、およびh()を定義する必要があります。解析的に定義された曲線の場合、uの範囲は明示的に指定する必要があります。
曲線が閉じている場合、MotionSolveでは、スプラインデータの最初と最後のポイントが同じであることが必要です。同様に、上記の閉境界条件を満たす必要があります。
パラメトリック曲線は、MotionSolveにおいて、高次対偶拘束のモデル化に使用されます。Reference_ParamCurveは、剛体上でのみ定義することができます。弾性体では定義できません。
フォーマット
<Reference_ParamCurve
id = "integer"
label = "Name of the Curve"
is_u_closed = { "TRUE" | "FALSE" }
is_curve_points = { "TRUE" | "FALSE" }
[ quintic = { "TRUE" | "FALSE" } ]
{
matrix_id = "integer" >
| u_start = "real"
u_end = "real"
usrsub_dll_name = "valid_path_name"
usrsub_param_string = "USER([[par_1[,...][,par_n]])
"
usrsub_fnc_name = "custom_fnc_name" >
| u_start = "real"
u_end = "real"
script_name = valid_path_name
interpreter = "PYTHON" | "MATLAB"
usrsub_param_string = "USER([[par_1[,...][,par_n]])
"
usrsub_fnc_name = "custom_fnc_name" >
| num_xyz_triple = "integer" >
x1 y1 z1
x2 y2 z2
... ... ...
xn yn zn
}
/>
属性
- id
- 要素識別番号(整数 > 0)。この番号は、すべてのReference_ParamCurvesの中で一意です。
- label
- Reference_ParamCurve要素の名前。
- is_u_closed
- TRUEまたはFALSEを選択します。Uパラメトリック空間で曲線が閉じている場合、TRUEを選択します。Uパラメトリック空間で曲線が開いている場合、FALSEを選択します。
- is_curve_points
-
TRUEまたはFALSEから選択します。
TRUEは、曲線がポイントを通過することを意味します。
FALSEは、概して、曲線(Bスプライン)がポイントの近くに留まって、ポイントを通過しないことを意味します。
- quintic
-
TRUEまたはFALSEを選択します。
TRUEは、曲線補間の次数が5であることを示します。
FALSEは、曲線補間の次数が4であることを示します。
デフォルト値はFALSEです。
- matrix_id
- 曲線データを含むReference_Matrix要素を指定します。マトリクスには、個々の曲線ポイントのx、y、およびzデータのみを含める必要があります。閉じた曲線の場合、最初と最後のデータポイントは同じである必要があります。
- u_start
- Uの最小値。u_start < u_endです。u_startは、is_curve_points = FALSEの場合にのみ設定します。言い換えると、CURSUBを使用して曲線を定義する場合です。
- u_end
- Uの最大値。u_start < u_endです。u_endは、is_curve_points = FALSEの場合にのみ設定します。言い換えると、CURSUBを使用して曲線を定義する場合です。
- usrsub_param_string
- データファイルからユーザー定義のCURSUBに渡されるパラメータのリスト。このキーワードは、is_curve_points = FALSEの場合にのみ使用します。言い換えると、CURSUBを使用して曲線を定義する場合です。
- usrsub_dll_name
- ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンCURSUBを読み込みます。このキーワードは、is_curve_points = FALSEの場合にのみ使用します。言い換えると、CURSUBを使用して曲線を定義する場合です。
- usrsub_fnc_name
- ユーザーサブルーチンCURSUBの代替名を指定します。
- script_name
- usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
- interpreter
- ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。
- num_xyz_triple
-
曲線内のx-y-zポイントの数を指定します。曲線ポイントがReference_ParamCurve要素自体に組み込まれている場合にのみ使用します。このオプションは、MATRIXまたはusrsub_param_stringパラメータと共に使用することはできません。
例
次の例は、パラメトリック空間で定義されるサイクロイドをMotionSolveに実装する方法を定義しています。この例の独立パラメータは、変数tです。サイクロイドは次のように定義されます:
x = a * (t - sin(t))
y = a * (1-cos(t))
- Reference_CurveのIDは569です。
- 開いた曲線を定義します。
- 独立パラメータtは0から始まります。
- 独立パラメータtは5.1で終わります。
- 曲線ポイントはmatrix_id/23で指定されます。

対応するMotionSolve XMLステートメントは次のようになります:
<Reference_ParamCurve
id = "569"
is_u_closed = "FALSE"
is_curve_points = "TRUE"
matrix_id = "23"
/>
2番目の例は、ユーザー定義のサブルーチンCURSUB内の実装と全く同じように指定する方法を示しています。
<Reference_ParamCurve
id = "569"
is_u_closed = "FALSE"
is_curve_points = "FALSE"
u_start = "0"
u_end = "5.1"
usrsub_param_string = "USER(22,11)"
usrsub_dll_name = "C:\gates\curve.dll"
/>
コメント
- Reference_ParamCurveを使用して、Constraint_PTCV、Constraint_CVCV、およびConstraint_CVSFの要素を定義できます。
- 曲線間の拘束を定義する場合、2つの曲線間に必ず一意の接触ポイントがあることを確認します。
- 閉じた曲線を定義する場合は、曲線がその閉じたポイントで2次の連続条件を満たしていることを確認します。この条件が満たされない場合、曲線上の接触ポイントが閉じたポイントを横切るたびに反力のスパイクが生じます。
- MotionSolveは、パラメータuが指定した制限内に留まるように制限することはありません。シミュレーションでuが指定された範囲を超える必要がある場合、MotionSolveはこれを許容します。
- キュービック補間の詳細については、CUBSPLのヘルプページをご参照ください。