;--asファイル読み込み---------------------- #include "e3dhsp3.as" #include "hspmath.as" ;--初期設定------------------------------- title "回転の研究" screen 0, 600, 600 ;--ウィンドウ設定 dim keybuf, 256 ;--キーチェック変数 RGB_Text=255,218,000 ;--文字色 RGB_Back=080,080,080 ;--背景色 centerX=double(ginfo(12)/2) ;--中心位置X centerZ=double(ginfo(13)/2) ;--中心位置Z r=0.0 ;--ボールAの設定 A_RGB=255,127,127 ;--色 A_SIZE=20.0 ;--半径 AX=centerX-165 ;--初期位置X AZ=centerZ-165 ;--初期位置Z ;--ボールBの設定 B_RGB=127,127,255 ;--色 B_SIZE=20.0 ;--半径 BX=centerX-165 ;--初期位置X BZ=centerX+165 ;--初期位置Z ;--ボールCの設定 C_RGB=127,255,127 ;--色 C_SIZE=20.0 ;--ボールの半径 CX=centerX+200 ;--初期位置X CZ=centerZ ;--初期位置Z ;--独自命令------------------------------- #module va ;--ベクトル解析 /* 引数 ax,az (Aの座標) avx,avz (Aから伸びるベクトル) 返り値 dir@va (ベクトルの方位) len@va (ベクトルの距離) */ #deffunc Vana double ax, double az, double avx, double avz ;--事前計算 tempX = avx-ax tempZ = avz-az ;--解析 dir = atan(tempZ, tempX) ;--方位 E3DVec3Length tempX, 0, tempZ, len ;--距離 return #global ;--メイン----------------------------------- *main redraw 0 ;--キーチェック E3DGetKeyboardcnt keybuf ;--終了[ESC] if keybuf.VK_ESCAPE : end ;--ボールのドラッグ移動 gosub *ball ;--キー入力 //r=0.00 //if keybuf.'A' : r=-0.03 //if keybuf.'D' : r= 0.03 r=0.03 ;--ライン描画 ;--フォント太字化 font msgothic, 18, font_bold ;--背景塗りつぶし color RGB_Back(0), RGB_Back(1), RGB_Back(2) : boxf ;--ボールA ;--ベクトル解析 Vana AX, AZ, centerX, centerZ ;--ベクトル回転 if r!0 { vroll = dir@va+r AX=centerX-cos(vroll)*len@va AZ=centerZ-sin(vroll)*len@va } ;--描画 color A_RGB(0),A_RGB(1),A_RGB(2) circle AX-A_SIZE, AZ-A_SIZE, AX+A_SIZE, AZ+A_SIZE, 0 line AX, AZ, centerX, centerZ color 255, 255, 255 : pos AX-20, AZ-20 : mes "A" ;--ボールB表示 ;--ベクトル解析 Vana BX, BZ, centerX, centerZ ;--ベクトル回転 if r!0 { vroll = dir@va+r BX=centerX-cos(vroll)*len@va BZ=centerZ-sin(vroll)*len@va } ;--描画 color B_RGB(0),B_RGB(1),B_RGB(2) circle BX-B_SIZE, BZ-B_SIZE, BX+B_SIZE, BZ+B_SIZE, 0 line BX,BZ,centerX,centerZ color 255, 255, 255 : pos BX-20, BZ-20 : mes "B" ;--ボールC表示 ;--ベクトル解析 Vana CX, CZ, centerX, centerZ ;--ベクトル回転 if r!0 { vroll = dir@va+r CX=centerX-cos(vroll)*len@va CZ=centerZ-sin(vroll)*len@va } ;--描画 color C_RGB(0),C_RGB(1),C_RGB(2) circle CX-C_SIZE, CZ-C_SIZE, CX+C_SIZE, CZ+C_SIZE, 0 line CX,CZ,centerX,centerZ color 255, 255, 255 : pos CX-20, CZ-20 : mes "C" ;--フォント初期化 sysfont ;--文字表示 //color 255, 255, 255 : pos 5, 5 redraw 1 wait 1 goto *main ;--サブ------------------------------------------------------------- ;--ボールのドラッグ移動 *ball ;--ボールA if key_lock_B+key_lock_C+key_lock_D=0 { if keybuf.VK_LBUTTON : E3DVec3Length double(mouseX)-AX, 0.0, double(mouseY)-AZ, distance if distance