- ベストアンサー
MFC
MFCでグラフを描いてそのx軸とy軸にメモリを入れたいのですが プログラムでどう書けばいいか教えてください。
- tnk48
- お礼率9% (7/76)
- その他(プログラミング・開発)
- 回答数7
- ありがとう数2
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
だから、うまくいかないのならそのときのコードを示してください。 前回のコードでは、"y"と表示するようになっているので、あなたがその部分をどのように変更して数字を表示するようにしたかは、あなたしかわかりません。また、軸にどんな数字が表示されれば正解なのかも、こちらではわかりません。 CStringのFormatを使っているのなら、そこで与えているデータにiを含む数式を使っているはずなので、 ・iが0のときにどんな数字が表示されればいいのか ・iが増えたとしたら、表示する数字は減るのか増えるのか を考えれば、Formatに与える数式が分かるはずです。
その他の回答 (6)
- m-take0220
- ベストアンサー率61% (474/777)
>for(i=0;i<400;i+=50){ >pDC->MoveTo(50,60+i); >pDC->LineTo(60,60+i); >pDC->TextOut(30,50+i,"y"); >} この部分のことですか? ループを逆順にするか、y座標の計算を逆にするかですね。 ループを逆にするなら、 for(i=350;0<=i;i-=50) でしょうか。 y座標の計算を逆にするなら、iの最大値は350で、そのときのy座標が410なので、 pDC->MoveTo(50,410-i); pDC->LineTo(50,410-i); でしょうか。
- m-take0220
- ベストアンサー率61% (474/777)
> str.Format("%d",10); strの内容を変更している部分が、for文の外にあるのですから、何回繰り返したところで内容が変わるはずがありません。
補足
ありがとうございます。基本的な間違いでした。 y軸のことに関してなのですがこのままでやると 上から下に数字が打たれていくと思うのですが それを逆転させる方法などありますかね
- zwi
- ベストアンサー率56% (730/1282)
こっちを放置しないで下さい。 http://okwave.jp/qa/q7576661.html ちゃんとC++を勉強したほうが良いと思いますね。 基礎的なことがちゃんと出来ていません。
- m-take0220
- ベストアンサー率61% (474/777)
> 変換した数値をfor文を使って増やせなくて困っています 「困っています」とだけ書かれても、原因は突き止められませんよ。 どんな結果がほしいときに、どんなコードを書いて、どううまくいかないのかを説明しないと。 よくある間違い例というのは確かにあるので、推測で間違いの内容を指摘できることもあるけど、あなたが実際にどう間違ったコードを書いているのかは、コードを見ないとわかりません。
補足
こんな感じです、どう修正すればいいですかね // TODO: この場所にネイティブ データ用の描画コードを追加します。 int x0=50, y0=450, xsp=700, ysp=400, xp, yp ; // float xmax, ymax; int DataN=pDoc->DN, i; pDC->SetTextColor(RGB(0,0,255)); pDC->TextOut(0,0,"グラフ表示"); CPen pc1(PS_SOLID,1,RGB(0,0,0)); CPen pc2(PS_SOLID,2,RGB(0,0,0)); CPen* OldPen=pDC->SelectObject(&pc1); CString str; str.Format("%d",10); if(DataN!=0){ pDC->SelectObject(pc2); pDC->MoveTo(x0,y0); pDC->LineTo(x0+xsp,y0); pDC->MoveTo(x0,y0); pDC->LineTo(x0 ,y0-ysp); for(i=0;i<650;i+=50){ pDC->MoveTo(100+i,440); pDC->LineTo(100+i,450); pDC->SetTextColor(RGB(0,0,0)); pDC->TextOut(100+i,460,str); } for(i=0;i<400;i+=50){ pDC->MoveTo(50,60+i); pDC->LineTo(60,60+i); pDC->TextOut(30,50+i,"y"); } for(i=0;i<=DataN;i++){ xp=(int)(x0+pDoc->Dx[i]/100.0*xsp); yp=(int)(y0-pDoc->Dy[i]/100.0*ysp); if(i==0) pDC->MoveTo(xp,yp); else pDC->LineTo(xp,yp); } } pDC->SelectObject(OldPen); }
- kmee
- ベストアンサー率55% (1857/3366)
数値を文字列に変換すればいいのです。 MFCのCStringクラスを使った方法もありますが、C/C++の標準関数を使った基本的な方法もあります。 サンプルだけじゃなくて、マニュアルとかも読みましょうよ。 やはり、C++の基本くらいはちゃんと勉強してからにしませんか?
補足
数値を文字列に変換するところまではCString strとstr.Formatを使ってできているのですが、変換した数値をfor文を使って増やせなくて困っています
- kmee
- ベストアンサー率55% (1857/3366)
MoveToで始点へ移動、LineToで終点まで線を書く。 横線は (Xの端,y)-(Xの反対の端,y)で、yを適当に変える 縦線は (x,Yの端)-(x,Yの反対の端)で、xを適当に変える 目盛線を入れるのに、やることはこれだけです。 文字も書きたいのなら、TextOutを使います。 実際の使用例がそのサンプルコードに出てます。 この説明でわからないようなら、まことに申し訳ありませんが、MFCを使うのはやめて別な手段を考えるた方が早いです(Excelのマクロの使い方とか)。 あるいは、プログラミングやC++言語そのものを勉強して基礎を身に付けてから、改めてMFCに挑戦することをお勧めします。
お礼
ちゃんとできました、ありがとうございました
補足
TextOutで数字を連続的に表示させる場合はどうすればいいですか?
関連するQ&A
- エクセル2007の質問です
グラフを作成するとき、エクセルのシート上で異なるx軸の数値を合せてグラフを作成することができますでしょうか? 例えば グラフ1 x軸の数値0,2,4,6,8,10 y軸の数値2,4,6,8,10,12 グラフ2 x軸の数値0,1,3,5,7,9,10 y軸の数値2,5,7,9,11,13 という2つのグラフをエクセルシートに貼り付けて、グラフを作成すると、 x軸はグラフ(1)のx軸の数値になり、y軸はグラフ(1)のy軸グラフ2のx軸とy軸となってしまいます。 この二つのグラフを同じグラフにして比較したいのですが、どうすればいいでしょうか。 御教授御願します。
- ベストアンサー
- オフィス系ソフト
- 4次多項式のグラフ
4次多項式のグラフをEXCELで書く問題で困っています。 式と完成したグラフはあるのですが、なぜこのグラフになるのか分かりません。 式:F(t)=t^4/4-2*t^3+11*t^2/3-6*t グラフ:y軸が-100~900まで100目盛りづつ、x軸は0~10まで1目盛りづつ グラフにはF(t)とf(t)、2つのグラフがあります。 F(t)は式が与えられているのでなぜこのグラフになるのか理解できますが、f(t)は式もないしなぜこのグラフになるのかわかりません。 f(t)はF(t)のy軸と同じ値(0)から始まりy軸の200辺りで収まっています。 F(t)を計算すると F(t) x軸 0→y軸 0 x軸 1→y軸 -4.0833 x軸 2→y軸 -9.3333 x軸 3→y軸 -18.75 x軸 4→y軸 -29.333 x軸 5→y軸 -32.083 x軸 6→y軸 -12 x軸 7→y軸 51.916 x軸 8→y軸 186.66 x軸 9→y軸 425.25 x軸10→y軸 806.66 になります。 数学は得意ではないので説明が分かりにくいですが、よろしくお願いいたします。
- ベストアンサー
- 数学・算数
- エクセル2003 グラフについて
実験結果より作成したグラフ(Y軸、上に凸の形状)について質問です。 1.X軸の値が「整数0~75」までとってあり、グラフを自動作成すると、数値が2段になり非常に見づらいです。グラフの形状を変えず、X軸のメモリを任意の数値刻みにするのはどうしたら良いですか? 2.Y軸最大値の所からX軸、Y軸に垂線を引き、そこの数値のみ太字、赤字にするのはどうしたらよいでしょうか? 簡単ですが、グラフをキャプチャーして画像加工で理想を示してみました。 分かる方居りましたらよろしくお願いします
- ベストアンサー
- オフィス系ソフト
- ☆数学の問題(平行移動)☆
(1) y= - 4x + 2 のグラフをx軸方向に-3、y軸方向に(?)平行移動させると y= - 4x + 8という関数のグラフが得られる。 (2)y= 4x + (?)のグラフをx軸方向に3、y軸方向に- 2平行移動させると、 y= 4x - 6という関数のグラフが得られる。 (3) y= 2xx - 4 のグラフをx軸方向に(?)、y軸方向に(?)平行移動させると y= 2xx + 8x + 7という関数のグラフが得られる。 (4) y= xx + bx + 1 のグラフをx軸方向に2、y軸方向にdだけ平行移動させると y= xx + x + 2というう関数のグラフが得られる。このとき b=(?)で、d = (?)である。 グラフの平行移動がいまいち理解できなくて・・・ (3)などの「xx」は「xの2乗」を表しています! 解説など付けて頂けると助かります(*´▽`)*´▽`)*´▽`)ノ
- ベストアンサー
- 数学・算数
- 2次関数のグラフ
y=a(x-p)^2+qのグラフは、y=ax^2のグラフをx軸の方向にp、y軸の方向にq平行移動した放物線ですが、pとqの±はどうやって判断しているのですか? 例えば、y=2(x+1)^2-3は、y=2x^2のグラフをx軸に-1、y軸に-3平行移動させたもので、頂点は(-1,-3)です。 y=-2(x+2)^2+3は、y=-2x^2のグラフを、x軸に-2、y軸に3移動させたものです。 教科書無くしちゃってて・・・お願いします。
- ベストアンサー
- その他(学問・教育)
- Excelでグラフの作成
次の表をExcelで折れ線グラフにしたいのですが。 X軸 1 3 6 Y軸 20 30 40 X,Y軸ともそれぞれ3つの変数があります。これをグラフにするとY軸に1,3,6と20,30、40の2つのグラフができてしまします。
- ベストアンサー
- その他MS Office製品
お礼
上に書くのをわすれたので y座標の計算を逆にすれば軸は反転したのですが 数字はそのままの状態になっています 数字を反転する方法はないですか?
補足
ループを逆順にしてもy座標の計算を逆にしてもうまく表示されないのですが