Reference: Parametric Curve

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

説明

曲線上の任意のポイントPのOXYZでの座標は、自由パラメータuについての3つの関数f(u)、g(u)、およびh(u)で一意に表すことができます。曲線の範囲は、uの最初と最後の値で決まります。これは曲線のパラメトリック表現です。


図 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で指定されます。
図 2. パラメータで定義されたサイクロイド曲線


対応する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"
/>  

コメント

  1. Reference_ParamCurveを使用して、Constraint_PTCVConstraint_CVCV、およびConstraint_CVSFの要素を定義できます。
  2. 曲線間の拘束を定義する場合、2つの曲線間に必ず一意の接触ポイントがあることを確認します。
  3. 閉じた曲線を定義する場合は、曲線がその閉じたポイントで2次の連続条件を満たしていることを確認します。この条件が満たされない場合、曲線上の接触ポイントが閉じたポイントを横切るたびに反力のスパイクが生じます。
  4. MotionSolveは、パラメータuが指定した制限内に留まるように制限することはありません。シミュレーションでuが指定された範囲を超える必要がある場合、MotionSolveはこれを許容します。
  5. キュービック補間の詳細については、CUBSPLのヘルプページをご参照ください。