VERSION 5.00 Begin VB.Form Form1 Caption = "Form1" ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 4680 LinkTopic = "Form1" MaxButton = 0 'False ScaleHeight = 3195 ScaleWidth = 4680 StartUpPosition = 3 'Windows の既定値 Begin VB.VScrollBar ZoomVSB Height = 1200 Left = 0 TabIndex = 40 Top = 0 Width = 240 End Begin VB.VScrollBar VScroll3 Height = 1200 Left = 0 TabIndex = 41 Top = 0 Width = 240 End Begin VB.VScrollBar vsb Height = 1200 Index = 0 Left = 0 TabIndex = 42 Top = 0 Width = 240 End Begin VB.VScrollBar vsb Height = 1200 Index = 1 Left = 0 TabIndex = 43 Top = 0 Width = 240 End Begin VB.PictureBox Picture1 Height = 735 Left = 120 ScaleHeight = 675 ScaleWidth = 1515 TabIndex = 2 Top = 1680 Width = 1575 End Begin VB.CommandButton BTN Height = 480 Index = 0 Left = 0 TabIndex = 0 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 1 Left = 0 TabIndex = 1 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 2 Left = 0 TabIndex = 3 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 3 Left = 0 TabIndex = 4 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 4 Left = 0 TabIndex = 5 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 5 Left = 0 TabIndex = 6 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 6 Left = 0 TabIndex = 7 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 7 Left = 0 TabIndex = 8 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 8 Left = 0 TabIndex = 34 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 9 Left = 0 TabIndex = 31 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 10 Left = 0 TabIndex = 32 Top = 0 Width = 1200 End Begin VB.CommandButton BTN Height = 480 Index = 11 Left = 0 TabIndex = 44 Top = 0 Width = 1200 End Begin VB.TextBox TXT Height = 480 Index = 0 Left = 0 TabIndex = 14 Top = 0 Width = 1200 End Begin VB.TextBox TXT Height = 480 Index = 1 Left = 0 TabIndex = 15 Top = 0 Width = 1200 End Begin VB.TextBox TXT Height = 480 Index = 2 Left = 0 TabIndex = 16 Top = 0 Width = 1200 End Begin VB.TextBox TXT Height = 480 Index = 3 Left = 0 TabIndex = 17 Top = 0 Width = 1200 End Begin VB.TextBox TXT Height = 480 Index = 4 Left = 0 TabIndex = 18 Top = 0 Width = 1200 End Begin VB.TextBox TXT Height = 480 Index = 5 Left = 0 TabIndex = 19 Top = 0 Width = 1200 End Begin VB.TextBox TXT Height = 480 Index = 6 Left = 0 TabIndex = 20 Top = 0 Width = 1200 End Begin VB.OptionButton OPT Height = 480 Index = 0 Left = 0 TabIndex = 22 Top = 0 Width = 1200 End Begin VB.OptionButton OPT Height = 480 Index = 1 Left = 0 TabIndex = 23 Top = 0 Width = 1200 End Begin VB.OptionButton OPT Height = 480 Index = 2 Left = 0 TabIndex = 24 Top = 0 Width = 1200 End Begin VB.OptionButton OPT Height = 480 Index = 3 Left = 0 TabIndex = 25 Top = 0 Width = 1200 End Begin VB.OptionButton OPT Height = 480 Index = 4 Left = 0 TabIndex = 26 Top = 0 Width = 1200 End Begin VB.OptionButton OPT Height = 480 Index = 5 Left = 0 TabIndex = 27 Top = 0 Width = 1200 End Begin VB.OptionButton OPT Height = 480 Index = 6 Left = 0 TabIndex = 30 Top = 0 Width = 1200 End Begin VB.CheckBox LinePermitCHK Height = 480 Left = 0 TabIndex = 33 Top = 0 Width = 1200 End Begin VB.CheckBox ImaginaryPermitCHK Height = 480 Left = 0 TabIndex = 58 Top = 0 Width = 1200 End Begin VB.CheckBox chk Height = 480 Index = 0 Left = 0 TabIndex = 45 Top = 0 Width = 1200 End Begin VB.CheckBox chk Height = 480 Index = 1 Left = 0 TabIndex = 46 Top = 0 Width = 1200 End Begin VB.CheckBox chk Height = 480 Index = 2 Left = 0 TabIndex = 47 Top = 0 Width = 1200 End Begin VB.CheckBox chk Height = 480 Index = 3 Left = 0 TabIndex = 48 Top = 0 Width = 1200 End Begin VB.CheckBox chk Height = 480 Index = 4 Left = 0 TabIndex = 49 Top = 0 Width = 1200 End Begin VB.Line LIN Index = 0 X1 = 0 X2 = 0 Y1 = 0 Y2 = 0 End Begin VB.Line LIN Index = 1 X1 = 0 X2 = 0 Y1 = 0 Y2 = 0 End Begin VB.Line LIN Index = 2 X1 = 0 X2 = 0 Y1 = 0 Y2 = 0 End Begin VB.Line LIN Index = 3 X1 = 0 X2 = 0 Y1 = 0 Y2 = 0 End Begin VB.Line LIN Index = 4 X1 = 0 X2 = 0 Y1 = 0 Y2 = 0 End Begin VB.Line LIN Index = 5 X1 = 0 X2 = 0 Y1 = 0 Y2 = 0 End Begin VB.Label LBL Height = 480 Index = 0 Left = 0 TabIndex = 9 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 1 Left = 0 TabIndex = 10 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 2 Left = 0 TabIndex = 11 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 3 Left = 0 TabIndex = 12 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 4 Left = 0 TabIndex = 13 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 5 Left = 0 TabIndex = 21 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 6 Left = 0 TabIndex = 28 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 7 Left = 0 TabIndex = 29 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 8 Left = 0 TabIndex = 35 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 9 Left = 0 TabIndex = 36 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 10 Left = 0 TabIndex = 37 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 11 Left = 0 TabIndex = 38 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 12 Left = 0 TabIndex = 39 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 13 Left = 0 TabIndex = 51 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 14 Left = 0 TabIndex = 52 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 15 Left = 0 TabIndex = 50 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 16 Left = 0 TabIndex = 53 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 17 Left = 0 TabIndex = 54 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 18 Left = 0 TabIndex = 55 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 19 Left = 0 TabIndex = 56 Top = 0 Width = 1200 End Begin VB.Label LBL Height = 480 Index = 20 Left = 0 TabIndex = 57 Top = 0 Width = 1200 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Rem ========================================= Rem Rem カッシーニ001 ソースコード Rem Rem Cassini001:Oval & Twin Cureves and Etc. Rem 2010 Oct -2011 Oct CopyRight Miyama. 2011 Rem http://www.geocities.jp/kaz_kimijima Rem kaz_kimijima@yahoo.co.jp Rem Rem ===================================== Rem カッシーニ卵形線のための関数メモ Rem tmp=r^2 + (f^4-a^2)/r^2 Rem cos 2theta=tmp/f^2 Rem Rem tan^2 theta =1-cos 2theta / 1+cos 2theta Rem 宣言なし変数の使用禁止宣言 Option Explicit Rem =================================================== Rem Rem 環境変数としてのグローバル変数宣言 Rem Rem =================================================== Rem コンポーネントとしてのグラフ画面の幅: 正方形なので高さとおなじ Dim PictureWidthEqualHeight As Integer Rem コンポーネントの大きさと位置の単位 グラフ画面の大きさが基準 Dim CompWid As Integer Dim CompHei As Integer Rem 選択ボタンの操作による選択値フラグ Rem Rem 論理的にはブーリアンだが、コードの便宜のためにインテジャ Rem 数値は+1と−1で選択 Dim AParametorPlusMinusMarkGlobal As Integer Dim CosSinPlusMinusMarkGlobal As Integer Dim COSorSININTGlobal As Integer Dim COS2orSIN2INTGlobal As Integer Dim OnePerXINTGlobal As Integer Rem 単純ループのためにくりかえし使用 いちいち各プロシージャで宣言するのが面倒なため Dim i As Integer Rem 定数パイ 円周率 Dim Pai As Double Rem 定数f:focus 入力焦点距離 対象図形の中心からの値 Dim F As Double Rem 定数a 条件演算定数 Rem 楕円なら和定数 Rem 双曲線なら差定数 Rem カッシーニ卵形線なら積定数 Dim A As Double Rem 数学グラフの拡大率 スライダーバーで調整 Dim Zoom As Double Rem 現在の演算モードの設定値 各演算ボタンにより変化 Rem 実行演算論理がこの数値で演算ルーチンを振り分ける Dim GlobalFunctionIndex As Integer Rem テキスト入力af値がスライダーバーを動かすときに使用するロック用許認可ブーリアン Rem VSBチェンジイベントを一時に無効化 Dim PrimeBoolTXTthanVSB As Boolean Rem ズームとafスライダーの最大の設定値 Dim MaxAandFvalue As Integer Dim ZoneWidthRateForGraphics As Double Rem =================================================== Rem Rem 初期化とコンポーネント配置 Rem Rem =================================================== Rem プログラム読み込み時の初期化 Sub Form_load() Rem 変数初期化 Call EnvInit Rem コンポーネント配置初期化 Call TuneLoc Call TXTValueInit OPT(6).Value = 1 Rem グラフ線色反映 Call DisplayLineColorSample End Sub Rem 変数初期化============================================== Sub EnvInit() Pai = 3.1415 Zoom = 1 Rem グラフを点ではなく線で描画する機能オン LinePermitCHK.Value = 1 Rem 楕円双曲線関数機能の分母a成分の符号 AParametorPlusMinusMarkGlobal = 1 Rem 楕円双曲線機能の分母三角関数成分の符号 CosSinPlusMinusMarkGlobal = 1 Rem 楕円双曲線関数機能の分母三角関数成分種類:1はcos -1はsin COSorSININTGlobal = 1 Rem 双曲線とレミニスケートの三角関数成分種 おなじく1はcos -1 はsin COS2orSIN2INTGlobal = 1 Rem 双曲線とレミニスケートの区分 ブーリアンとして値1のとき逆数定義によりレミニスケート Rem -1のとき直角双曲線 OnePerXINTGlobal = 1 Rem グラフ描画用ピクチャボックス初期化 背景黒 線色白 With Picture1 .BackColor = RGB(0, 0, 0) .ForeColor = RGB(255, 255, 255) End With Rem 演算関数の選択、初期値0で楕円双曲線選択状態 GlobalFunctionIndex = 0 Rem ロード時、a値f値はテキスト窓の初期値から読み出され PrimeBoolTXTthanVSB = False Rem スライダー最大初期値設定正負両方向の絶対値 MaxAandFvalue = 100 ZoneWidthRateForGraphics = 4 End Sub Sub TXTValueInit() Dim tv As Double For i = 0 To 5 Select Case i Case 0 tv = 1.1 Case 1 tv = 1 Case 4 tv = 0 Case 5 tv = 0 End Select TXT(i).Text = STR(tv) Next End Sub Rem 有効数字小数点以下三桁で四捨五入関数宣言 Function Round3(A As Double) As Double Round3 = Int(A * 1000 + 0.5) / 1000 End Function Rem コンポーネント配置論理マネージャ Rem ここがタブインデックス順番も管理 Sub TuneLoc() With Form1 Rem フォームは黄金分割よりやや横長ーー Rem 幅高さとも固定変形機能はなし だいたい800*600ノートドット画面想定 .Width = 8000 * 1.6 .Height = 8000 Rem .MaxButton = False この項目はコード内で設定不可 Rem グラフ用ピクチャボックスの設定 グラフ画面は正方形 Rem -500の補正はフォームのタスクバーの幅のため PictureWidthEqualHeight = Form1.Height - 500 Rem コンポーネント配置は Rem Rem 横幅はフォームの大きさ単位 Rem 縦幅はピクチャ画面の高さ単位 CompWid = .Width / 60 CompHei = PictureWidthEqualHeight / 30 End With With Picture1 Rem グラフ画面は正方形 .Width = PictureWidthEqualHeight .Height = PictureWidthEqualHeight .Left = 0 .Top = 0 Rem ここでは色設定はおこなわない Rem .BackColor = RGB(0, 0, 0) Rem .ForeColor = RGB(255, 0, 0) End With Rem タブインデックスの強制定義 Rem これはテンプレート行>Rem btntxt--opt().tabindex= TXT(0).TabIndex = 0 TXT(1).TabIndex = 1 BTN(0).TabIndex = 2 BTN(1).TabIndex = 3 BTN(3).TabIndex = 4 BTN(2).TabIndex = 5 BTN(4).TabIndex = 6 BTN(5).TabIndex = 7 BTN(6).TabIndex = 8 OPT(0).TabIndex = 9 OPT(1).TabIndex = 10 OPT(2).TabIndex = 11 OPT(3).TabIndex = 12 OPT(4).TabIndex = 13 OPT(5).TabIndex = 14 With OPT(6) .TabIndex = 15 Rem .Value = 1 End With Rem 使用せず Rem BTN(7).TabIndex = 16 Rem BTN(8).TabIndex = 17 Rem コンポーネントの配置調整呼出し tuneBTN tuneTXT tuneLBL tuneOPT tuneCHK tuneVSB Rem サンプル線色表示 DisplayLineColorSample End Sub Rem ボタン群の配置と表示文字列設定 Sub tuneBTN() Rem プラスマイナス記号文字 Dim PlusChr As String Dim MinusChr As String Rem COS SIN記号文字 Dim CosStr As String Dim SinStr As String Rem 1/ 文字 Dim OnePerXSTR As String Rem 非1/ 用空白文字 Dim OnePerXSTRvacant As String Rem cos/sin 2theta用文字列 Dim COS2STR As String Dim SIN2STR As String Rem 作業用一時文字列 Dim tmpStr As String PlusChr = "+" MinusChr = "-" CosStr = "COS theta" SinStr = "SIN theta" OnePerXSTR = "1/" OnePerXSTRvacant = "" COS2STR = "COS 2theta" SIN2STR = "SIN 2theta" For i = 0 To 11 With BTN(i) Rem 共通初期設定 .Top = CompHei * 0 .Height = CompHei .Width = CompWid * 2 .Left = PictureWidthEqualHeight Select Case i Rem コンポーネントインデックスは順不同 Rem 楕円双曲線部=========================================== Case 0 Rem 分母a成分符号ボタン .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 14 If AParametorPlusMinusMarkGlobal = 1 Then tmpStr = PlusChr Else tmpStr = MinusChr End If .Caption = tmpStr Case 2 Rem 演算実行ボタン .Caption = "go oval/twin &o" .Top = CompHei * 16 .Width = CompWid * 18 .Left = PictureWidthEqualHeight + CompWid * 2 Case 1 Rem 分母三角関数部分符号ボタン .Left = PictureWidthEqualHeight + CompWid * 8 .Top = CompHei * 14 .Width = CompWid * 2 If CosSinPlusMinusMarkGlobal = 1 Then tmpStr = PlusChr Else tmpStr = MinusChr End If .Caption = tmpStr Case 3 Rem 分母三角関数部分種類ボタン .Left = PictureWidthEqualHeight + CompWid * 14 .Top = CompHei * 14 .Width = CompWid * 6 If COSorSININTGlobal = 1 Then tmpStr = CosStr Else tmpStr = SinStr End If .Caption = tmpStr Rem 直角双曲線とレミニスケート部=================================== Case 4 Rem 逆数定義ボタン .Left = PictureWidthEqualHeight + CompWid * 6 .Top = CompHei * 27 .Width = CompWid * 6 If OnePerXINTGlobal = 1 Then tmpStr = OnePerXSTR Else tmpStr = OnePerXSTRvacant End If .Caption = tmpStr Case 5 Rem 三角関数種類選択ボタン .Left = PictureWidthEqualHeight + CompWid * 12 .Top = CompHei * 27 .Width = CompWid * 8 If COS2orSIN2INTGlobal = 1 Then tmpStr = COS2STR Else tmpStr = SIN2STR End If .Caption = tmpStr Case 6 Rem 演算実行ボタン .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 29 .Width = CompWid * 18 .Caption = "go reminis &R" Case 7 Rem プログラム終了ボタン======================================= .Left = PictureWidthEqualHeight + CompWid * 10 .Top = 0 .Width = CompWid * 10 .Height = CompHei * 3 .Caption = "Exit &X" Case 8 .Visible = False Case 9 .Visible = False Case 10 Rem 画面消去ボタン 変数と各種の設定は保持============================== .Left = PictureWidthEqualHeight + CompWid * 10 .Top = CompHei * 3 .Width = CompWid * 10 .Height = CompHei * 3 .Caption = "Clear &L" .Visible = True Case 11 Rem カッシーニの卵形線描画の実行ボタン================================ .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 23 .Width = CompWid * 18 .Height = CompHei * 1 .Caption = "go cassini &C" .Visible = True End Select End With Next Rem 入力値a,fを必要とする演算関数は、入力テキストボックスか Rem 値変化のスライダーで参照された値にもとづいて計算する仕様 End Sub Rem テキストボックスの配置======================================== Sub tuneTXT() For i = 0 To 6 With TXT(i) Rem 共通初期値設定 .Top = CompHei * 0 .Left = PictureWidthEqualHeight + CompWid * 0 .Width = CompWid * 6 .Height = CompHei Rem 文字は中央そろえ .Alignment = 2 Rem 使わないインデックスナンバーコンポーネントもあるので,初期値は不可視 .Visible = False Select Case i Case 0 Rem a値用入力窓 .Top = CompHei * 7 .Left = PictureWidthEqualHeight + CompWid * 12 .Width = CompWid * 8 .Visible = True Case 1 Rem f値用入力窓 .Top = CompHei * 8 .Left = PictureWidthEqualHeight + CompWid * 12 .Width = CompWid * 8 .Visible = True Rem 使用せず Case 2 Case 3 Case 4 Rem グラフ黒板 x値用表示窓 .Top = CompHei * 7 .Left = PictureWidthEqualHeight + CompWid * 2 .Width = CompWid * 6 .Alignment = 2 .Visible = True Case 5 Rem グラフ黒板 y値用表示窓 .Top = CompHei * 8 .Left = PictureWidthEqualHeight + CompWid * 2 .Width = CompWid * 6 .Alignment = 2 .Visible = True Rem 使用せず Case 6 End Select End With Next End Sub Rem 文字列固定/文字列表示用ラベル配置================================== Sub tuneLBL() For i = 0 To 20 With LBL(i) Rem 共通初期設定 .Top = CompHei * 0 .Left = PictureWidthEqualHeight + CompWid * 0 .Width = CompWid * 2 .Height = CompHei Rem 色はすべてサーモンピンク .BackColor = RGB(255, 128, 128) Rem 中央そろえ、フォントサイズ12ピッチ .Alignment = 2 .Font.Size = 12 Rem .Caption = "lbl" Select Case i Case 0 Rem 楕円双曲線項目の看板 .Left = PictureWidthEqualHeight + CompWid * 4 .Top = CompHei * 10 .Height = CompHei .Width = CompWid * 14 .Caption = "oval and twin curves" Case 1 Rem 楕円双曲線項目 r= 文字列 .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 12 .Width = CompWid * 2 Rem .Height = CompHei * 2 .Caption = "r =" Rem Case 2 Rem 楕円双曲線項目、分子部分演算値表示用 Rem .Left = PictureWidthEqualHeight + 2 * CompWid Rem .Top = CompHei * 15 Rem.Width = CompWid * 6 Rem.caption= Case 2 Rem 楕円双曲線項目、分子部分演算値表示用 .Left = PictureWidthEqualHeight + CompWid * 4 .Top = CompHei * 12 .Width = CompWid * 16 .Caption = "a^2-f^2" Case 3 Rem 楕円双曲線項目分数中央線 .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 13 .Width = CompWid * 18 .Caption = "--------------------------" Case 4 Rem 楕円双曲線項目、分母部分a値表示用 .Left = PictureWidthEqualHeight + CompWid * 4 .Top = CompHei * 14 .Width = CompWid * 4 .Caption = "a" Case 5 Rem 楕円双曲線項目、分母部分f値表示用 .Left = PictureWidthEqualHeight + CompWid * 10 .Top = CompHei * 14 .Width = CompWid * 4 .Caption = "f" Case 6 Rem 直角双曲線とレミニスケート部分の看板 .Left = PictureWidthEqualHeight + CompWid * 4 .Top = CompHei * 25 .Width = CompWid * 14 .Caption = "twin and remnis" Case 7 Rem 直角双曲線とレミニスケート部分 r^2= 文字列 .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 27 .Width = CompWid * 4 .Caption = "r^2 =" Rem 使用せず Case 8 .Visible = False Case 9 .Visible = False Case 10 Rem 現在の選択済みグラフ色表示ラベル .Left = PictureWidthEqualHeight + CompWid * 10 .Top = CompHei * 6 .Width = CompWid * 10 .Caption = "Now_Color" Case 11 Rem グラフ画面の現在のマウスがいる座標看板X .Left = PictureWidthEqualHeight + CompWid * 8 .Top = CompHei * 7 .Width = CompWid * 2 .Caption = "X" Case 12 Rem グラフ画面の現在のマウスがいる座標看板Y .Left = PictureWidthEqualHeight + CompWid * 8 .Top = CompHei * 8 .Width = CompWid * 2 .Caption = "Y" Case 13 Rem カッシーニ項目看板 .Left = PictureWidthEqualHeight + CompWid * 4 .Top = CompHei * 18 .Width = CompWid * 14 .Caption = "cassini " Case 14 Rem カッシーニ定義掲示 直交座標 非値表示用 .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 20 .Width = CompWid * 18 .Caption = "(x^2+y^2)^2-2f^2(x^2-y^2)+f^4-a^2=0" Case 15 Rem カッシーニ定義表示 極座標 非値表示用 .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 21 .Width = CompWid * 18 .Caption = "f^2*cos 2theta=r^2 + (f^4-a^2)/r^2" Case 16 Rem 使用せず .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 23 .Width = CompWid * 18 .Caption = "f^4-a^2" Case 17 .Visible = False Case 18 .Visible = False Case 19 Rem 入力a値看板 .Left = PictureWidthEqualHeight + CompWid * 10 .Top = CompHei * 7 .Width = CompWid * 2 .Caption = "a" Case 20 Rem 入力f値看板 .Left = PictureWidthEqualHeight + CompWid * 10 .Top = CompHei * 8 .Width = CompWid * 2 .Caption = "f" End Select End With Next End Sub Rem 色彩選択オプションボタン配置===================================== Sub tuneOPT() For i = 0 To 6 With OPT(i) .Top = i * CompHei .Left = PictureWidthEqualHeight + CompWid * 4 .Width = CompWid * 6 .Height = CompHei Select Case i Case 0 .Caption = "red" Case 1 .Caption = "yellow" Case 2 .Caption = "blue" Case 3 .Caption = "green" Case 4 .Caption = "purple" Case 5 .Caption = "orange" Case 6 .Caption = "white" End Select End With Next End Sub Rem 演算関数選択状態表示用チェックボックス配配置=============================== Sub tuneCHK() With LinePermitCHK .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 9 .Width = CompWid * 12 .Height = CompHei .Caption = "GraphLinePermission" End With With ImaginaryPermitCHK .Left = PictureWidthEqualHeight + CompWid * 2 .Top = CompHei * 19 .Width = CompWid * 12 .Height = CompHei .Caption = "Imaginary Permission" End With Rem 101825 For i = 0 To 4 With chk(i) Rem 共通初期値 .Top = CompHei * 0 .Height = CompHei .Width = CompWid .Left = PictureWidthEqualHeight + CompWid * 2 Select Case i Case 0 Rem 楕円双曲線演算 .Top = CompHei * 10 Case 4 Rem カッシーニ演算 .Top = CompHei * 18 Rem 使用せず Case 2 .Visible = False Case 3 .Visible = False Case 1 Rem 直角双曲線レミニスケート演算 .Top = CompHei * 25 End Select End With Next End Sub Rem 値調整用スライダー配置======================================== Sub tuneVSB() Rem 使用せず VScroll3.Visible = False Rem グラフ拡大用ズーム With ZoomVSB .Left = PictureWidthEqualHeight .Top = 0 .Width = CompWid * 2 .Height = CompHei * 30 .Min = -MaxAandFvalue .Max = MaxAandFvalue .LargeChange = 1 End With Rem a値f値調整用ズーム For i = 0 To 1 With vsb(i) .Top = 0 .Height = CompHei * 30 .Width = CompWid * 2 .Min = -MaxAandFvalue .Max = MaxAandFvalue .LargeChange = 1 Rem MsgBox i .Left = PictureWidthEqualHeight + CompWid * 20 + CompWid * 2 * i End With Next End Sub Rem =================================================== Rem Rem 計算演算操作用コンポーネントの挙動コード Rem Rem =================================================== Rem グラフズームスライダースクロールの挙動 Rem 0-1領域を拡大するためグラフ描画領域は対数拡大にする Sub zoomvsb_change() Zoom = 10 ^ (ZoomVSB.Value / 10) Picture1.Cls Call GenGoVSB End Sub Rem a値f値スライダースクロールの挙動 Rem 設定では対数挙動 Sub vsb_change(index As Integer) Dim tmpValue As Double With vsb(index) tmpValue = 10 ^ (.Value / MaxAandFvalue) Select Case index Case 0 A = tmpValue Case 1 F = tmpValue End Select If PrimeBoolTXTthanVSB = False Then TXT(index).Text = Round3(tmpValue) End With Picture1.Cls CheckSelect Call GenGoVSB End Sub Rem チェックボックスの値表示 Sub CHKValueTune(index As Integer) Dim i As Integer Dim Bool01 As Integer Bool01 = 0 For i = 0 To 4 If i = index Then Bool01 = 1 Else Bool01 = 0 End If chk(i).Value = Bool01 If index = 0 Or index = 1 Or index = 4 Then GlobalFunctionIndex = index End If Next End Sub Rem すべてのボタン操作論理 Sub BTN_Click(index As Integer) Rem   MsgBox index Select Case index Rem 楕円双曲線部=========================================== Case 0 Rem 分母a値符号変更 AParametorPlusMinusMarkGlobal = -AParametorPlusMinusMarkGlobal TuneLoc Case 1 Rem 分母三角関数符号変更 CosSinPlusMinusMarkGlobal = -CosSinPlusMinusMarkGlobal TuneLoc Case 2 Rem 実行ボタン GlobalFunctionIndex = 0 CheckSelect Rem Exec0 GenGoBTN Case 3 Rem 分母三角関数種類変更 COSorSININTGlobal = -COSorSININTGlobal TuneLoc Rem 直角双曲線およびレミニスケート部================================= Case 4 Rem 逆数設定変更 OnePerXINTGlobal = -OnePerXINTGlobal TuneLoc Case 5 Rem 三角関数種類変更 COS2orSIN2INTGlobal = -COS2orSIN2INTGlobal TuneLoc Case 6 Rem 実行ボタン GlobalFunctionIndex = 1 CheckSelect Rem   Exec1 GenGoBTN Case 7 Rem 終了ボタン============================================ Unload Me Case 10 Rem 画面クリア============================================ Picture1.Cls DisplayLineColorSample Case 11 Rem カッシーニ卵形線実行ボタン==================================== GlobalFunctionIndex = 4 CheckSelect Rem   Exec4 GenGoBTN End Select End Sub Rem 演算種類表示チェックボックスの表示を呼び出す Sub CheckSelect() CHKValueTune (GlobalFunctionIndex) End Sub Rem =================================================== Rem Rem 演算部本体//グラフオブジェクトに描画する部分は別途後方に存在 Rem Rem =================================================== Rem 実行ルーチンの便宜上のユニバーサルエントリ Sub GenGoBTN() PrimeBoolTXTthanVSB = True GenGo PrimeBoolTXTthanVSB = False End Sub Sub GenGoVSB() PrimeBoolTXTthanVSB = False GenGo End Sub Sub GenGo() Select Case GlobalFunctionIndex Case 0 DrawCenterCross Exec0 Case 1 DrawCenterCross Exec1 Case 4 DrawCenterCross Exec4 End Select End Sub Sub DrawCenterCross() Rem picture width/height half Dim pWh As Double Dim pHh As Double Rem LineColor Dim C Rem CrossWidth Dim Cw As Integer C = RGB(255, 255, 0) Cw = 50 With Picture1 pWh = .Width / 2 pHh = .Height / 2 End With Picture1.Line (pWh - Cw, pHh)-(pWh + Cw, pHh), C Picture1.Line (pWh, pHh - Cw)-(pWh, pHh + Cw), C End Sub Rem a値f値評価ファンクション Rem テキスト入力窓のa値f値を評価してグローバルAFに代入 不適切である場合はfalseをかえす Rem Rem 楕円双曲線論理とカッシーニが使用 Function CHKAandFValue() As Boolean Dim tmpBoolishINT As Integer Dim ValTXT As Double Dim tmpValue As Integer Dim i tmpBoolishINT = 0 For i = 0 To 1 ValTXT = ValTrim(TXT(i).Text) If ValTXT <= 0 Or 10 < ValTXT Then tmpBoolishINT = tmpBoolishINT - 1 ValTXT = 1 TXT(i).Text = ValTXT Else Select Case i Case 0 A = ValTXT Case 1 F = ValTXT End Select End If Rem PrimeBoolTXTthanVSB = True vsb(i).Value = MaxAandFvalue * Log(ValTXT) / Log(10) Rem PrimeBoolTXTthanVSB = False Next If tmpBoolishINT = 0 Then CHKAandFValue = True Else MsgBox "par are only 0