2次元図形の描画 – プログラミング – Home

通知
すべてクリア

[解決済] 2次元図形の描画


twistor
 twistor
(@twistor)
ゲスト
結合: 19年前
投稿: 11
Topic starter  

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 図形の描画方法としてはOpenGLやCDCがあることは知ってはいるのですが、
> はたしてどちらを用いたらよいのでしょうか??

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


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

聞いてる内容が
『何かを書くには、鉛筆とボールペンとマジックどれがいいでしょう?』
ぐらいに抽象的すぎると思います

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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

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

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


返信引用
twistor
 twistor
(@twistor)
ゲスト
結合: 19年前
投稿: 11
Topic starter  

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

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


返信引用
もけけ
 もけけ
(@もけけ)
ゲスト
結合: 19年前
投稿: 1
 

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

単純に実データから画面上の座標に変換するときに補正してもいけると思います。
Y軸の0にしたい位置の座標から引くだけでも大丈夫だと思います。

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

この辺の座標変換の計算は正に算数で何とかなる話なので
頭をひねってみるのも良いかも知れません。
経験しておくと何かの足しにはなりそうです。


返信引用
twistor
 twistor
(@twistor)
ゲスト
結合: 19年前
投稿: 11
Topic starter  

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


返信引用
twistor
 twistor
(@twistor)
ゲスト
結合: 19年前
投稿: 11
Topic starter  

もけけさん

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました