• 締切済み

パラメトリック曲線の描画アルゴリズムについて

x = f(t) y = g(t) のように表せるパラメトリック曲線を2次元のビットマップ画像に描画したいと考えています。 (たとえばNURBS) 描画アルゴリズムですが、tを適当に変化させてx,yの組を得てその点を打つことにより曲線 を書くことはできます。 ただこの場合tの増分の選び方が大きいと穴が開いてしまいますし、小さいと何度も同じx,yを 描画することになってしまい効率が悪いです。 x、yの適切な変化量(たとえばプラスマイナス1)となるtの増分を求められればいいのですが、 具体的なアルゴリズムが思い当たりません。 他の方法でも構いませんが、一般的にパラメトリック曲線を描画する高速なアルゴリズムをご存知 でしたらご教授いただけたらと思います。

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

分割数とか分割幅というくくりではなくて、「複雑な曲線の、点と点の間を補間して、なめらかにみせる方法」というのはあります。 スプライン補間とか、似非スプラインとか、シミュレーションの本に載ってました。他にも補間計算法はいろいろあるようなのですが、「スプライン 補間」で検索するといろいろ引っかかってくるんじゃないでしょうか。

すると、全ての回答が全文表示されます。
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

グラフ内の全ドット数は、縦ドット数 × 横ドット数 これ以上多く書くのは無意味。 それ以下だとして、どういう曲線になるのか、直線や放物線のようにx方向に単純増加とか、正葉曲線みたいに渦の様になるのかによっても、分割数は替えた方がよいでしょう。 単純増加グラフなら、単純増加方向のドット数を分割数としてもおおむね見れるグラフになるけど、時々変化の激しいところがあるなら、3倍の分割数を取れば、間にも点が入る。 複雑な図形でも、おおむね全画面内ドット数の 1/10 個のドットを打つと、「かなり細かく、時に重なりつつ、時に飛び抜けることもある」程度になるのでは? よって、tの増分は、範囲 / 上記の分割数 tの範囲自体は、実際の計算値によるので、f(t),g(t)がどういう値を返すのか、リサーチが必要。 t の範囲が先に決まってるなら、tの最小値と最大値でのx,y ペアから、x軸、y軸の単位の方を変更するという手もあるけど、円グラフみたいに元の位置に戻ってくる場合は、どういう式を与えるかで決めることになる。 「高速なアルゴリズム」といってもf(t),g(t)の計算を高速に出来るかどうかが決め手で、点を打つのは、どのみち同じ時間は掛かる。

dsIImaster
質問者

お礼

mpro-gramさん、ご回答ありがとうございました。 「関数に依存するが、概ね画素数で分割すればOK」という考え方ですね。確かに おっしゃるとおりだと思います。 ただやはり知りたいのは、ほぼ過不足なく描画できる⊿tを数学的に保証できる 手法です。 世の中にはパラメトリック曲線を描画できるソフトは多数あるので、なんらかの 有名な方法があるのではないかと思っているのですが・・。

すると、全ての回答が全文表示されます。

関連するQ&A