
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
C言語 配列で座標
-
3次元空間上の2つの座標から...
-
黒体放射軌跡のxy色度座標への...
-
ビットマップ画像の座標を小数...
-
Excel関数で指定範囲内に有るか...
-
EXCEL VBA でウインドウの...
-
Fortranの導入について質問
-
SetWindowOrgとSetViewportOrg...
-
VBで車のアナログスピードメー...
-
OpenCvSharp4による画像判定解...
-
マインクラフト(pc版)で座標...
-
選択範囲の座標値の抽出
-
直線上にある点の座標の求め方
-
エクセルで回転する座標の出し方
-
任意軸回転を、XYZ軸回転の...
-
「アイテムは収集されました」...
-
エクセルで作った新しいウイン...
-
コントロールの書式設定で、“コ...
-
皆さん、おはようございます♪ ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
始点、終点の二つの座標と半径...
-
3次元空間上の2つの座標から...
-
エクセルで回転する座標の出し方
-
C言語 配列で座標
-
エクセルである点からの距離で...
-
シーケンサー(PLC?)で制...
-
多角形の内部かどうか判定する方法
-
Excel VBA で自在に図形を変化...
-
最小二乗平面
-
回転する矩形同士の当たり判定...
-
VBで、開いているExcelシートの...
-
ワード上Shapeの位置情報を統一...
-
図形が重なりあっているかどうか
-
C言語で制作するピラミッドアー...
-
ガウシアンフィルタのCプログラム
-
Excel関数で指定範囲内に有るか...
-
3次元座標上の2直線の交点判...
-
ダイアログ内コントロールの位...
おすすめ情報