- ベストアンサー
VB2010で曲線の書き方。
VB2010でPictureBoxの中に2点を結ぶ曲線を書きたいのですが、どのようにしたらかけるのか教えていただきたいです。 (例) (0,-1)、(1,0)の2点を結ぶ y=3x^3-2x-1のという3次曲線を書く。 直線までならGraphicクラスを用いて、g.drawlineを使う、複数点を通るスプライン曲線を書くならg.drawcurveなどどいうメソッドがあるのですが、このような3次式や2次式の線は書けないのでしょうか?解答よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、物理的に描けないという事は認識していますか? 少なくとも最小単位はピクセルになりますし、点画に なります。 これは、正確には DrawLine で直線さえも描けていない という意味でです。 勿論、近似の点をプロットして人間の目に目的の曲線 っぽく表示するのが目的だとは分かっていますが、 上の原理が分かっていれば、座標計算して点を1つ1つ 塗りつぶしていく事で、あらゆる図形が描けることを 理解できるはずです。 で、それを自動で描いてくれるような機能はありません。 表現するのが何次式なのか?あらゆる条件をクリアできる ような機能を実現するのは難しいでしょう。 かといって自分で描くのも大して難しくないです。 数式の1の単位を画面上の何ピクセルに対応させているか を決め、例えば50ピクセル単位だったら、1ピクセルは 数列の0.02間隔に対応しますから、xを0.02単位でループ で加算していき、その時のyを計算すれば良いだけです。 求められた(x,y)の点を順に塗りつぶしていくだけです。 精度を求めず、スピード重視なら、xを間引きます。 ピクセル単位で計算するのに0.02単位であれば、0.04 単位にすれば計算回数は半分になります。点は1ピクセル ずつ歯抜けになります。この場合、2点間を直線で結べば 間の点が埋まります。
その他の回答 (1)
- MARU4812
- ベストアンサー率43% (196/452)
>1ずつプロットだとひどい精度になってしまいそうですが 数値の1ではなく、1ピクセルですよ? 画面解像度は分かりますか?画面のプロパティで1024×768等 の数値で単位はピクセルです。これが画素数であり、パソコンが 色のついた点を表示できる数です。 今見ている画面は、それ以上細かい表示はできないということです。 今見ている画面がひどい精度だと思うなら、それ以上は表示 する方法がありません。あとは、人間の目に(錯覚で)滑らかに 見えるようにスムージング(アンチエイリアス)と呼ばれるような 加工をするくらいです。 あと、コンピュータの座標系は左上隅が(0,0)なので注意して 下さい。 http://www.atmarkit.co.jp/fdotnet/dotnettips/377screentoclient/screentoclient.html
補足
g.drawlineは直線を引いてくれるものと勘違いしていました。 なるほど、自動でやってくれるというものではないのですね。 下の0.02でプロットしていくとのアドバイスですが、プロットはg.DrawEllipseで円を書くのを利用してしていく感じで(もっといい方法があったら教えていただきたいですが)、それをループしていけばいいのですが、VB2010では座標は整数値でしか扱えないですよね・・・。当然drawEllipseもinteger型しか引数に受け付けませんし。 1ずつプロットだとひどい精度になってしまいそうですが、これが精一杯って感じになってしまうのでしょうか?よろしくお願いします。