
No.3ベストアンサー
- 回答日時:
対数軸はY軸ではなくX軸でしたね。
なので,
Dim logY As Double
logY = Math.Log(y, 10)
は
Dim logX As Double
logX = Math.Log(x, 10)
と読み替えてください。
で,グラフですが,今回の場合だと,y = f(x)の形式ですから,
xを変化させながら(logX, y)をDrawLineで結んでいけばよいことになります。
画面は方眼紙だと思って,まずは方眼紙に自分でグラフを書くことを考えてください。
ただし,DrawLineを使う場合はフリーハンドではなく,定規で線を結ぶことになります。
さて,方眼紙には最初から座標が振ってあります。
この座標は印刷されていて,変更できない物と考えてください。
ここに自分でグラフを書くなら,その座標と書きたい座標の対応を考えますよね。
それと同じ事を,コードで書くことになります。
で,言葉で説明しようと思っていたのですが,チェック用にコードを書いたので手抜きして載せてしまいます。
Const a As Double ' a
Dim width As Integer ' Control.ClientSize.WidthやImage.Width等から得られる描画領域の幅
Dim height As Integer ' Control.ClientSize.HeightやImage.Height等から得られる描画領域の高さ
Dim g As Graphics ' 出力先のGraphicsオブジェクト
Dim previousLogX As Double = Math.Log(1, 10.0) ' 一つ前の点のLog Xの値
Dim previousY As Double = 1 / (1 + a) ' 一つ前の点のYの値
Dim scaleX As Double = 2 ' スケーリング用。Log Xの最大値
Dim scaleY As Double = previousY ' スケーリング用。Yの最大値
For x As Integer = 2 To 100 ' 1は計算済み
Dim logX As Double = Math.Log(x, 10)
Dim y As Double = 1 / (x + a)
' 座標を計算する
Dim prevPosX As Integer = CType(Math.Floor(width * previousLogX / scaleX), Integer)
Dim prevPosY As Integer = height - CType(Math.Floor(height * previousY / scaleY), Integer) ' Y軸は座標が逆
Dim posX As Integer = CType(Math.Floor(width * logX / scaleX), Integer)
Dim posY As Integer = height - CType(Math.Floor(height * y / scaleY), Integer)
g.DrawLine(Pens.Blue, prevPosX, prevPosY, posX, posY)
' 前の値を覚えておく
previousLogX = logX
previousY = y
Next
あくまでチェック用のテストコードなので無駄も多いですし,
Graphicsの変換行列を使えば計算は不要かもしれませんが……。
No.2
- 回答日時:
Logの算出方法がわからない,ということでしょうか。
そうであれば,System.MathクラスのLogメソッドを使います。
Const a As Double = ***
Dim x As Double
Dim y As Double
Dim logY As Double
y = 1 / (a + x)
logY = Math.Log(y, 10)
あとは,左上を原点として右下方向に値が増加する座標系であると言うことに注意して,線を引いていけばよいです。
# Y軸が通常と向きが逆になっています。
参考URL:http://msdn.microsoft.com/ja-jp/library/hd50b6h5 …
この回答への補足
Yune-Kichiさま
コメントありがとうございます。イメージできました。
がしかし、logYとgrph.DrawLine関数をどう結びつけると線を引けるのかも理解しておりませんでした。
grph.DrawLine(Pens.Blue, x1, y1, x2, y2)
申し訳ありませんが、もう少しだけお付き合いください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのグラフに上下限値の横棒を表示させたい 5 2022/12/12 11:09
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- Excel(エクセル) <スプレッドシート>採用進捗 グラフ作成について 3 2022/10/23 15:52
- Excel(エクセル) 関数式を教えてください。 AとBのセルがあり、Aのセルに値がある場合はCのセルへ1と表示。 AとBの 5 2022/03/23 14:38
- Visual Basic(VBA) C3とC4のセルに、Visual basicで実行した時入力した値をC3に表示させ、その後に、C3に 1 2023/07/14 09:43
- Excel(エクセル) ピボットテーブルの表示変更の仕方 初心者なので、的外れな質問だったらすみません 受注日ごとに商品名と 1 2022/04/26 23:23
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) Excelでグラフの種類「縦棒」でグラフを作ったのですが横軸が同じものが複数に分かれて表示されてしま 1 2022/12/26 22:39
- Excel(エクセル) Excelで日付のグラフへの表示 2 2022/04/15 11:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
多角形の内部かどうか判定する方法
-
エクセルである点からの距離で...
-
Excel関数で指定範囲内に有るか...
-
matlab-図形表示
-
任意軸回転を、XYZ軸回転の...
-
緊急 ベーシックで国旗の作り方...
-
objective-c 画像の反転と回転
-
●Excel VBA 配列●教...
-
C言語で制作するピラミッドアー...
-
CADソフトの線の表現?
-
3次元空間上の2つの座標から...
-
StretchDIBits
-
「関数ポインタとして評価され...
-
SetWindowOrgとSetViewportOrg...
-
c++でのプログラミングについて
-
vb2010でpictureboxにグラフを描く
-
ExcelやAccessで社内の端末の配...
-
Pythonの質問です。 input関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
エクセルで回転する座標の出し方
-
ダイアログ内コントロールの位...
-
多角形の内部かどうか判定する方法
-
交差する2線分の交点座標の求め方
-
ワード上Shapeの位置情報を統一...
-
C言語 配列で座標
-
閉図形の座標の配列が右回りか...
-
シーケンサー(PLC?)で制...
-
Excel VBA で自在に図形を変化...
-
直線上にある点の座標の求め方
-
エクセルである点からの距離で...
-
OpenCvSharp4による画像判定解...
-
始点、終点の二つの座標と半径...
-
GLで座標を変えて回転させたい
-
ピクチャボックスの座標取得
-
最小二乗平面
-
c言語でキーボードから2点の座...
おすすめ情報