1. 概要
OptGraphは三次元の陽関数を表示可能なWindows用アプリです。
図2に示すように、一つの関数を角度や大きさを変えて4つまで表示可能です。
一度に表示できる関数は一つだけで、複数の関数を同時に表示することはできません。
1.1 関連ページ
-
OptGraphのホームページ
$\quad$ダウンロード方法については、こちらをご覧ください。
$\quad$ - 三次元グラフ表示アプリOptGraphの外部データの読み込み機能およびDLL関数機能について
1.2 アプリを作ろうと思ったきっかけ
アプリを作ろうと思ったきっかけは、粒子群最適化のシミュレーションをやってみたいと思ったからです。
粒子群最適化により三次元関数の最小値を探索してみた
適当なアプリを探してみましたが、なかなか満足のいくものを見つけることができなかったので、自分で作ってみることにしました。
グラフ表示部分はできたのですが、せっかくなので数式処理部分も作ればグラフ表示アプリとして使えるのではないかと思い、何かC言語用のライブラリみたいなものを探したのですが、なかなか適当なものを見つけることができず、ネットで公開されていた情報を参考に自作してみました。
1.3 動作環境
Windows11
1.4 参考にさせていただいたサイト
-
隠線処理を用いた三次元グラフの作成
実際に参考にしたのは「Visual C++の易しい使い方(23) ―三次元グラフの陰線処理―」の方ですが、今は公開されていないようです。 - 数式処理の参考にさせていただいたサイトは、探してみましたが見つけることができませんでした。
2. 画面の説明
2.1 グラフ表示に関するもの
- 最上部の大きな四角$\quad:$表示する陽関数を数式として入力するエリア
- Disp Graph$\quad:$グラフを表示する
- Save Imege$\quad:$グラフをpngファイルとして保存する
- Save Parameters$\quad:$グラフの設定値を保存する
(parameter_settings.iniというファイルに保存されます) - Load Parameters$\quad:$グラフの設定値を読み込む
- Xmin$\quad:$x軸の目盛りの最小値
- Xmax$\quad:$x軸の目盛りの最大値
- Ymin$\quad:$y軸の目盛りの最小値
- Ymax$\quad:$y軸の目盛りの最大値
- Zmin$\quad:$z軸の目盛りの最小値
- Zmax$\quad:$z軸の目盛りの最大値
- Graph(1~4)$\quad:$グラフの表示/非表示
- Xaxis(1~4)$\quad:$x軸の表示/非表示
- Yaxis(1~4)$\quad:$y軸の表示/非表示
- Zaxis(1~4)$\quad:$z軸の表示/非表示
- Wire Frame(1~4)$\quad:$ ワイヤーフレームの表示/非表示
- Gradation(1~4)$\quad:$グラデーションの表示/非表示
- Azimuth(1~4)$\quad:$方位角
- Zenith(1~4)$\quad:$天頂角
- X0(1~4)$\quad:$画面上の右方向へのオフセット
- Y0(1~4)$\quad:$画面上の下方向へのオフセット
- Size(1~4)$\quad:$グラフの大きさ
- Wire Frame Roughness$\quad:$ワイヤーフレームの表示の粗さ
$\quad$(値が大きいほど粗く、しかし速く表示される) - Gradation Roughness$\quad:$グラデーションの表示の粗さ
$\quad$(値が大きいほど粗く、しかし速く表示される)
2.2 コンソール画面について
コンソール画面には様々な情報が表示されます
(グラフの表示状況やテキストデータなど)
2.3 外部データの読み込み、および表示に関するもの
外部データの読み込みおよび表示機能に関しては、下記ページをご覧ください。
三次元グラフ表示アプリOptGraphの外部データの読み込み機能およびDLL関数機能について
2.4 DLL(ダイナミック・リンクライブラリ)に関するもの
DLLによる外部関数の使用方法については、下記ページをご覧ください。
三次元グラフ表示アプリOptGraphの外部データの読み込み機能およびDLL関数機能について
3. 関数、演算子および記号定数について
3.1 関数
- sin(x)$\quad:$正弦(サイン)
- cos(x)$\quad:$余弦(コサイン)
- tan(x)$\quad:$正接(タンジェント)
$\quad\quad$入力範囲:abs(cos(x)) >= 1E-14 - asin(x)$\quad:$逆正弦(アークサイン)
$\quad\quad$入力範囲: -1 <= x <= 1 - acos(x)$\quad:$逆余弦(アークコサイン)
$\quad\quad$入力範囲: -1 <= x <= 1 - atan(x)$\quad:$逆正接(アークタンジェント)
- sinh(x)$\quad:$双曲線正弦(ハイパボリックサイン)
- cosh(x)$\quad:$双曲線余弦 (ハイパボリックコサイン)
- tanh(x)$\quad:$双曲線正接(ハイパボリックタンジェント)
- abs(x)$\quad:$絶対値
- ceil(x)$\quad:$小数第一位を切り上げる
- floor(x)$\quad:$小数第一位を切り捨てる
- exp(x)$\quad:$eのx乗(eはネイピア数)
- log(x)$\quad:$底をeとするxの対数
$\quad\quad$入力範囲:x > 0 - log10(x)$\quad:$底を10とするxの対数
$\quad\quad$入力範囲:x > 0 - sqrt(x)$\quad:$平方根
$\quad\quad$入力範囲:x >= 0 - rad(x)$\quad:$度(度数法)をラジアン(弧度法)に変換。π/180を掛ける
- deg(x)$\quad:$ラジアン(弧度法)を度(度数法)に変換。180/πを掛ける
- fact(x)$\quad:$階乗(入力値の小数点以下の値は切り捨て)
$\quad\quad$入力範囲:x >= 0
3.2 単項演算子
- +a$\quad:$正
- -a$\quad:$負
- not$\quad a\quad:$否定(論理演算子)
3.3 二項演算子
- a ** b$\quad:$べき乗
- a * b$\quad:$乗算
- a / b$\quad:$除算
- a % b$\quad:$剰余
- a + b$\quad:$加算
- a - b$\quad:$減算
- a >= b$\quad:$以上(比較演算子)
- a > b$\quad:$大なり(比較演算子)
- a <= b$\quad:$以下(比較演算子)
- a < b$\quad:$小なり(比較演算子)
- a == b$\quad:$等しい(比較演算子)
- a != b$\quad:$等しくない(比較演算子)
- a$\quad$and$\quad$b$\quad:$論理積(論理演算子)
- a$\quad$or$\quad$b$\quad:$論理和(論理演算子)
3.4 記号定数
- PI = 3.1415926535897931
- EE = 2.7182818284590451
3.5 演算子の優先順位
- 括弧()
- べき乗(**)
- 単項演算子(+、-、not)
- 乗算・除算・剰余(*、/、%)
- 加算・減算(+、-)
- 大小比較・等価比較・非等価比較(>=、>、<=、<、==、!=)
- 論理和・論理積(and、or)
4. 表示例
表示例1$\quad x^2+y^2\quad$(グラフ1を表示)

表示例2$\quad x^2-y^2\quad$(グラフ1と2を表示)

表示例3$\quad \sin x * \cos y\quad$(グラフ1と2と3を表示)

表示例4$\quad x^2 + y^2 + 20(1 - cos(x))\quad$(グラフ1と2と3と4を表示)

表示例5$\quad5(x-1)^2+2(y-2)^2\quad$(外部データを読み込んでグラフに重ねて表示)



