- ベストアンサー
座標
VC++のMFCで図形を書いているのですが、MFCでは基本画面の左上が原点になり→向きがxの正で↓向きがyの正ですがこれだと-の座標が表示できないというのもあり、改善の方法として2つありますが今回は図形を表示したいだけですので全ての座標に+100をする方法をとりました。 (例:(-20,-20)→(80,80)) しかし講師の方はy座標の符号を変える必要があると言いました。この点がいまいち理解しずらいのですが普通に100足すだけでも移動できてると思うのですがどうなのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Y軸の反転が必要な理由は (-20,-20) から (33,15)へ直線を引く場合 X/Y軸ともに100のオフセットを加えただけでは (80,80) から (133,115)への直線になります これは右下がりの直線ですよね 本来は右上がりの直線が欲しいはずです 原点を(100,100)とするなら (80,120)から(133,85)へ直線を引けば数学などで使う座標系と同じように表示可能です MFCを使うのであれば CDCのSetWindowExt / SetViewportExt/ SetViewOrg / SetMapModeなどを使えば座標変換をしなくても描画できます
その他の回答 (3)
- chie65536
- ベストアンサー率41% (2512/6032)
>しかし講師の方はy座標の符号を変える必要があると言いました。この点がいまいち理解しずらいのですが 点Aを(50,50)、点Bを(50,60)とした時、一般的な2軸座標のグラフは Y | | | | ・B | ・A | --+------------X | のように「点Bの位置は、点Aより上の位置」になります。 このまま、X,Yに100足すだけで描画すると、画面上はどうなるでしょう? 画面には ・A 画面座標で(150,150) ・B 画面座標で(150,160) と描画されます。 質問者さんは「どうしてBの方が下に描画される」のか、疑問に思わないのですか?
- D-Matsu
- ベストアンサー率45% (1080/2394)
要は原点を左下に置いてyの正が↑方向になるようにしなさい、ということでしょう。 > 改善の方法として2つありますが オフセットを与える方法でない、もうひとつの方法はなんですか?
補足
(1)原点の位置を変更する (2)座標の位置をずらす(今回の方法) だと考えますが、他にもあるかもです
- arain
- ベストアンサー率27% (292/1049)
座標の指定を外部入力とか、プログラム内部で初期値として持つということなら、 座標の指定はあくまでも符号付きでやれっていうことじゃないのかな? であれば、入力する際に(80,80)ではなく、(-20,20)で入力して表示する方法を考えろって意味になるけど、 前提としている >しかし講師の方はy座標の符号を変える必要があると言いました。 意味が質問文からだとよくわからない。
補足
質問の方にも書いてありますが、MFCでは左上端が原点で x座標は→へいくほど正 y座標は↓へいくほど正 という概念を持てばBの方が下でも構わないと思うんですが、 そこんとこがわからないんですよ。一般的な座標だとおかしいんですけどね。