Article View: fj.comp.theory
Article #77Re: 点列の間引き
From: S.Kubo
Date: Mon, 16 Mar 1998 00:00
Date: Mon, 16 Mar 1998 00:00
111 lines
4938 bytes
4938 bytes
久保です。
manabu ishi wrote in message <6ei0h2$20k@sunsp.sunsp.mcor.co.jp>...
>さて、久保さんに頂いたご回答ですが、
>大変参考になったのですが、一つ分からないところがありました。
>
>|1.始点->終点を線分で結ぶ。
>|2.中間の点を順番に以下の処理をする。
>|3.「1」の線分と「2」への距離がある誤差範囲を超えたら
>| 始点->誤差範囲を超えた点、誤差範囲を超えた点->終点
>| の2つを新しい線分にする。
>
>「2.の中間の点」というのは、線分の中間ということではなく、
>トレースポイント間の曲線の中間の点、ということになるのだと
>思いますが(もし違っていたら申し訳ありません)、
>そうすると、以下のような場合はどのように回避すれば
>良いのでしょうか?
>
>この図だと、誤差は0になってしまいますよね?
>
> +++
> + +
> + +
> + +
>*------¥------*
> + +
> + +
> + +
> +++
>
> *:トレースポイント
> ¥:トレースポイント間の曲線の中間の点
> +:(実際には滑らかな線で表されているのでこの点はないが)曲線を表す点。
> -:トレースポイント間を結ぶ線分
>
>
>このような形状の場合は1本の線分で表されると思うのですが、
>諦めるしかないのでしょうか?
うーーん。説明がへたくそで済みません。
「一番遠い点」と言う言葉をはしょりました(^^;
>「2.の中間の点」というのは、線分の中間ということではなく、
>トレースポイント間の曲線の中間の点、ということになるのだと
>思いますが(もし違っていたら申し訳ありません)、
途中の点全てをサーチして一番遠い点だと思ってください。
#固定長フォントでなくても良いですね?
元
+++
+ +
+ +
+ +
S------+-------E
+ +
+ +
+ +
+++
Step1
+Q+
+ +
+ +
+ +
S------+------E
+ | +
+ | +
+ | +
+P+
P点が一番遠いので、S->PとP->Eの線分にする。
次のステップS->Pの線分はQ点が遠いのでS->Q、Q->P。
この一番遠い点が誤差内なら処理終了。
すると例の曲線は、
S->Q->P->Eと言う折れ線になります。
誤差を小さく取ると曲率の付近で細かい線分になることが
作図でわかると思います。
#ところでこのCADは「手書き図面」じゃないですよね?
#手書き線をベクタデータ変換にするとか?
#それとも地図かな?
origin=オリジナル点列
create=生成後点列
void ReEnter( WORD sIndex, WORD eIndex ){
Line = origin[]の指標 sIndex,eIndex から直線の式を生成。
pos(遠い指標点); F = 0(最長);
for( register WORD i = sIndex + 1; i < eIndex; i++ ){
long ph = Lineとorigin[i]点の長さ(直線と垂線の足)計算。
if( F < ph ){ F = ph; pos = i; }最長点長さと指標の記憶
}
if( F > 許容誤差 ){
ReEnter( sIndex, pos ); 再帰に入れちゃう。
ReEnter( pos, eIndex ); 再帰に入れちゃう。
}else{
create[生成後の点列指標++] = eIndex;
}
}
こんな感じかな?
これでoriginを間引いた線分の折れ線の指標がCreateに溜まります。
origin[100]で使う点(最長点)が3,6,10,40,60なら、
create[] = { 3,6,10,40,60 }が入ると言うことです。
点は、origin[create[3]]で取り出す。
~~~~~~~~~~久保覚~~
>・・<。oO E-mail rest@big.or.jp (WEB)
ミ__ミ E-mail pao@mfi.or.jp (Private)
URL http://www2.big.or.jp/~rest/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Technical Details
Message-ID:
<6eimi8$1bm@mail.mfi.or.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6e7fqr$2fr@sunsp.sunsp.mcor.co.jp> <6eh7ce$h7t@mail.mfi.or.jp> <6ei0h2$20k@sunsp.sunsp.mcor.co.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: f4956,7a88fc761ab60d2a X-Google-Attributes: gidf4956,public X-Google-Thread: 10a0b6,1d835a804232b23b X-Google-Attributes: gid10a0b6,public From: "S.Kubo" <pao@mfi.or.jp> Subject: Re: 点列の間引き Date: 1998/03/16 Message-ID: <6eimi8$1bm@mail.mfi.or.jp> X-Deja-AN: 334475728 Content-Transfer-Encoding: 7bit References: <6e7fqr$2fr@sunsp.sunsp.mcor.co.jp> <6eh7ce$h7t@mail.mfi.or.jp> <6ei0h2$20k@sunsp.sunsp.mcor.co.jp> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Organization: Mount Fuji Internet. Newsgroups: fj.comp.theory,fj.sci.math