• 締切済み

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

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

  • パラメトリック曲線について教えて下さい。

    数2Bをやっています。 「時刻tを指定したとき、x座標と y座標を決める手段が確立すれば、運動はとらえられる」 という立場にたてば、平面上の点の運動は、必ず適当な関数f(t),g(t)を用いて x = f(t) y=g(t) と表される、と参考書に書いてあるのですが、本当にどんな曲線でも表せるのですか? 例えば、電話している間に描くような適当なぐるぐる曲線や、ボールペンのインクがでないときに紙にめちゃくちゃに描くような、そんな曲線でも数式にできちゃうのですか? 教えて下さい>_<

  • パラメトリック曲線に関する質問です。

    ある紙飛行機が下記のパラメトリック方程式の軌跡をたどります。 x(t) = t-3sin(t) y(t) = 4-3cos(t) そしてtは紙飛行機を飛ばしてからの時間を示し10秒後に壁にぶつかります。 1) dy/dx と d^2y/dx^2を求めよ。 2) 垂直接線の座標をすべて求めよ。 3) 水平方向の接線の座標をすべて求めよ。 4) xとyそれぞれの単調性を求めよ(tを用いて)。 5) 変曲点を求めよ。 という問題なのですがどのようにしたらいいのでしょうか? どなたかお力を貸してください。

  • Βスプライン曲線とベジェ曲線について

    パソコンの本を読んでいてtruetypeフォントは2次のΒスプライン曲線を使っていますと紹介されて以下の2式で描けますとだけしか書かれていなかったのでよくわかりませんでした。 Βスプライン曲線の x=(1-t)^2x1+2(1-t)tx2+t^2x3 y=(1-t)^2y1+2(1-t)ty2+t^2y3 0≦t≦1 という式はどのように導き出すのでしょうか? また ベジェ曲線についてもどのように導き出すのでしょうか?

  • この曲線(特性曲線)がどうなっているか教えて下さい

    この曲線(特性曲線)がどのようになっているのか分かりません。 A>0を任意定数とする曲線 x(t)=Asint、y(t)=Acost(-∞<-t<∞) です。 グラフにするとどうなっているのでしょうか? どなたか教えて下さい。お願いします。

  • 曲線の長さ

    x^(2/3) + y^(2/3) = a^(2/3)  (a>0) としたときの曲線の長さはどう出せばよいのでしょうか^^; 媒介変数をtとして、 x=f(t) y=g(t) と表せたときの曲線の公式   α L=∫ ( ( f'(t) )^2 +( g'(t) )^2 )^(1/2) dt   β を使うんですよね?でもコレを使うようにうまく置き換える方法ってのがみつからなくて。 x = t として、無理やり計算しようとしたんですが、計算がやばくなったので途中で断念しました。これで根性でとくしかないのですかねぇ^^; やりかたのヒントだけでもいいので教えてくれるとうれしいです^^

  • スプライン曲線について

    2次のBスプライン曲線は x=(1-t)**2*x1+2*t*(1-t)*x2+t**2*x3 y=(1-t)**2*y1+2*t*(1-t)*y2+t**2*y3 で表わせるらしいのですがどのようにしたら求められるのでしょうか?教えてください.

  • パスカルの蝸牛曲線

    歴史曲線で有名な、「パスカルの蝸牛曲線」を3次元方程式にしてみたいのですが、どのように考えたらよいのでしょうか?? 「パスカルの蝸牛曲線」は (x^2 + y^2 - 2ax)^2 - b^2(x^2 + y^2) = 0 で表されています。y^2の部分を「y^2 + z^2 + C」のような形にすれば良いのでしょうか??計算方法をよろしくお願いします。

  • 曲線

    分からない問題があるのですが、f(x,y)=x^3+y^3-3xy (x, y∈R) のとき、方程式f(x、y)=0が定める平面曲線Cで 1) 直線y = tx とC との交点を考え,C のパラメータt による表示を与 えよ. 2) 曲線Cのうち,パラメータ0 ≦ t < 1 に対応する部分で囲まれた領域(C の補 集合の有界連結成分) の面積を求めよ. というものが分かりません。どなたか回答お願いします。

  • 曲線の長さについて

    x^(1/2) + y^(1/2) = 1 この曲線の長さはどのように求めたらいいでしょうか? 媒介表示をしようとして x=(cos2t)^4 y=(sin2t)^4 としたとき, 公式s=∫ ( (dx/dt)^2 + (dy/dt)^2 )^(1/2) dt で計算しようとしてもうまく積分ができず困ってます。どなたか教えてください。お願いします。

  • 曲線と曲面のちがい

    曲線と曲面のちがいを教えてください。 具体的には z = f(x,y) と z(t) = f(x(t), y(t)) の違いとでもいいましょうか。   z = f(x,y) ・・・・・・・(1) は普通曲面を表すと思うのですが  x,y をパラメータ t で表したとき   z(t) = f(x(t), y(t)) ・・・・・・・(2) もしくは   r↑(t) = ( x(t), y(t), z(t) ) ・・・・・・・(3) は本当に曲線しか表していないのですか? (1)でも(2)でも空間座標の1点を表すということでは変わりないと思うのですが。  ベクトル解析の本ではパラメータ s を積分で t と対応させていますが、これは初めから(3)が空間曲線を表していることを前提にしています。(2)、または(3)は曲面にはなり得ないといういことがよくわからないのです。

専門家に質問してみよう