仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 16:22:00
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: スプライン曲線の長さ 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: スプライン曲線の長さ  (閲覧数 5000 回)
chura
Jr. メンバー
**

オフライン

投稿: 25



I'm a llama!

プロファイルを見る
スプライン曲線の長さ
« 投稿日: 2006/08/30 - 11:10:32 »
引用して返信

いつもお世話になっております。

勉強不足で申し訳ないのですがスプライン曲線の長さを取得するするに
はどのようにしたらよいのでしょうか?カーブを取り出し、GetLength2()
で取得すると-2が返ってきます  ヘルプにもそのような記述が無いよ
う思うのです・・・。
しかし、Solidworksの計測機能では正しく計測しているようなので当然
できるとは思います。

サンプルを添付しますのでご存知の方、ぜひご教授願います。
 len.lzh
議長に報告する   記録済み
chura
Jr. メンバー
**

オフライン

投稿: 25



I'm a llama!

プロファイルを見る
(一応解決)Re:スプライン曲線の長さ
« 返信 #1 投稿日: 2006/08/31 - 11:08:30 »
引用して返信

その後いろいろ調べまして、とりあえず(?)解決しました
簡単に言うと、スプラインの場合は曲線を細かく分割し足しこむという
単純なものです。分割は次のいずれかで分割し、2点間距離を足しこむ
ことになります。細かく分割するほど高精度に計算できますが、後者の
方が最適な位置で分割できます。
 ・EvaluateでN等分点を取得
 ・GetTessPtsで誤差の許容値を考慮した点を取得

結局のところ、スプライン曲線の距離というのは近似値でしか求められ
ないということなのかなぁ?・・・だからGetLength2では取得できない
とか

一応、後者のサンプルを記述しておきます。
SolidWorksの計測ツールがこれで計算しているかどうかは不明です。ち
なみにサンプルこ許容誤差では計測結果は一致しませんでした。

double  chordTolerance = 0.1 / 1000;  // 弦の公差許容値:0.1mm(速度優先)
double  lengthTolerance = 1.0 / 1000;  // 長さの公差許容値:1.0mm(速度優先)
double  startPoint[6];
double  endPoint[6];
long   arraySize;
long   pointNum;
double* outPoint;

hRes = m_iCurve->IEvaluate(sParam, startPoint);    // 始点を取得
hRes = m_iCurve->IEvaluate(eParam, endPoint);      // 終点を取得

hRes = m_iCurve->IGetTessPtsSize(      // 出力配列のサイズを取得
            chordTolerance, lengthTolerance,
            startPoint, endPoint, &arraySize);

outPoint = new double[arraySize];      // テソレーション点のx,y,zの位置:
                                        //  [ x1, y1, z1, x2, y2, z2, ... ]

hRes = m_iCurve->IGetTessPts(          // 分割点を取得
            chordTolerance, lengthTolerance,
            startPoint, endPoint, outPoint);

pointNum = arraySize / 3;
dbLen = 0.0;
for(long i=0; i<pointNum-1; i++)
{
    dbLen += Dist(outPoint[i*3+0], outPoint[i*3+1], outPoint[i*3+2],
                  outPoint[i*3+3], outPoint[i*3+4], outPoint[i*3+5]);
}

delete []outPoint;


議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: スプライン曲線の長さ 前のトピック 次のトピック
ジャンプします: