2次元図形の描画

[戻る]
twistor 2006/03/19(日) 20:59:23
ファイルから浮動少数値で記述されたデータを読み込んで、図形を描画したいと考えてい
ます。
図形は2次元で、
その大きさは (-1.0, -1.0)〜(1.0, 1.0)の(一辺2の長さの)正方形に収まるサイズから、
(-100.0, -100.0)〜(100.0, 100.0)の(一辺200の長さの)正方形に収まるサイズ等、デー
タにより様々です(1つのファイルには1つのデータが入っています)。
これらのデータを描画するにはどうすればよいのでしょうか?
図形の描画方法としてはOpenGLやCDCがあることは知ってはいるのですが、はたしてどち
らを用いたらよいのでしょうか??(もっともCDCに至っては名前しか知らないので、浮動
小数点データに使えるかも存じません)
初歩的なところから分からない状況に陥っているのですが、どなたかよろしくお願いいた
します。

επιστημη 2006/03/19(日) 21:54:10
> 図形の描画方法としてはOpenGLやCDCがあることは知ってはいるのですが、
> はたしてどちらを用いたらよいのでしょうか??

お好みでしょう。線画ならCDC(? DeviceContextのことか?) が楽ではないかと。

ryo 2006/03/19(日) 23:38:15
聞いてる内容が
『何かを書くには、鉛筆とボールペンとマジックどれがいいでしょう?』
ぐらいに抽象的すぎると思います

まず、「正の整数の線の描画」から始めるのがよろしいかと。
この程度ならVCの初心者向けの本に出てるはず

#これができれば、二次元の描画なら、小数点だろうとなんだろうと
#算数の範囲内の応用ですむ。

PATIO 2006/03/20(月) 15:15:31
内容的にも線の描画ですし、皆さんが言われているようにGDIで描画しても
十分事足りると思います。
GDIで描画する場合、基本的に指定する値は整数値の座標になりますが、
データの浮動小数点数を実画面の座標にマッピングする時に整数値になるように
変換すればよいだけだと思います。

ryoさんが書かれているように実際の画面上の座標にマッピングする部分の
計算は算数の範囲で大丈夫だと思いますのでその辺はご自分で考えてみる事を
お勧めします。

あと、一足飛びに結論を求めるのではなく、段階的に理解を進める事を
お勧めします。

twistor 2006/03/20(月) 15:35:05
お返事ありがとうございます。
>CDC(? DeviceContextのことか?)
はい、その通りです。
>聞いてる内容が
>『何かを書くには、鉛筆とボールペンとマジックどれがいいでしょう?』
>ぐらいに抽象的すぎると思います
最初の質問の時にはまさにそのくらいのことも分かっていない段階でした。

確かにDeviceContextの方が楽なようですので、これで描画することにしました。
そこで再び問題にあたってしまいました。
Y軸が下向きになるのを解消するために、
 SetViewportExt( x, y ) を用いる(但しyは負の値)、
という記述を目にしたのですが、直りません。
全然反映されていないようなのですが、この方法、間違っているのでしょうか?
あるいは別の方法をご存知でしたら教えていただけませんか?

もけけ 2006/03/20(月) 15:43:11
>Y軸が下向きになるのを解消するために、
SetMapModeかな

PATIO 2006/03/20(月) 15:53:22
単純に実データから画面上の座標に変換するときに補正してもいけると思います。
Y軸の0にしたい位置の座標から引くだけでも大丈夫だと思います。

SetViewportExtは用途的におかしいような気がしますけれど。
私が知らないだけだろうか。
HELPで見る限りでは該当するような使い方は見当たりません。

PATIO 2006/03/20(月) 15:56:00
この辺の座標変換の計算は正に算数で何とかなる話なので
頭をひねってみるのも良いかも知れません。
経験しておくと何かの足しにはなりそうです。

twistor 2006/03/20(月) 21:23:51
[[解決]]
皆さんどうもありがとうございます。
SetViewportExt()はおかしかったのですね・・・、勉強になりました。
SetMapMode()は引数にMM_ANISOTROPICを指定して試してみたのですが、やはりうまくでき
ませんでした。ただ、自分の勉強&経験不足によるところが多いと思うので、プログラム
の別の部分を直したら正しく表示できるのかもしれません。
多くの方のアドバイスどおり、表示する際に座標変換する方針で進めていこうと思います。
ありがとうございました。

twistor 2006/03/20(月) 21:31:33
[[解決]]
もけけさん

>>Y軸が下向きになるのを解消するために、
>SetMapModeかな

失礼しました!
引数は MM_ISOTROPIC だったのですね。
つい思い込みで、
>SetMapMode()は引数にMM_ANISOTROPICを指定して
いました。
MM_ISOTROPIC 指定にしてSetViewportExt()で第二引数に負の値を与えたところ、望みど
おりの表示が得られました。
はやとちりしてすみませんでした。
アドバイスどうもありがとうございました。

古いスレッドには追加発言できません。