HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0728
足利超神成す角を求めるスクリプト4解決


足利超神

リンク

2009/7/28(Tue) 19:20:24|NO.26581

画面の真ん中に原点Pがあります。
あと座標が(なんでもいい,0)の点Aがあるとします。

そしてマウスでクリックした地点を点Bとします。

直線PAと直線PBの成す角を求めるスクリプトがわかりませんorz

一応それらしいスクリプトはできたんですが、
数値が予想どうり(60°とか90°)になりません。

下がそのスクリプトです。

#include "hspmath.as" #include "hspdxfix.as" #include "hgimg3.as" hgini es_ini 1,1,360 //点を打つ関数 #module #deffunc point int big//point 直径 circle ginfo_cx-big,ginfo_cy-big,ginfo_cx+big,ginfo_cy+big return #global screen 0,500,500 pos 250,250 point 5 color 50,50,200 while Px=250:Py=250:Bx=mousex:By=mousey wait 1 stick key,256 if key==256{ pos mousex,mousey point 3 //計算式 余弦定理によって成す角を求める b=Bx-Px bb=pow(abs(Bx-Px),2) p=By-Py pp=pow(abs(By-Py),2) fsqr a,bb+pp aa=pow(a,2) ue=aa+bb-pp shita=2*a*b if shita==0:kakudo=0:else:kakudo=ue/shita mes ""+kakudo es_cos fval,abs(kakudo) title""+fval } wend
変数の説明
変数Axは点Aのx座標で変数PyはPのy座標と言った具合です。
aが三角形ABPの辺aの長さで
aaがその二乗です。
ueとかshitaは 
       a^2+b^2-p^2
cos∠p=-----------
          2ab
の上下です。


なんか説明不足のところがあったら指摘してください。



この記事に返信する


足利超神

リンク

2009/7/28(Tue) 19:25:52|NO.26582

補足
点Aのx座標と点Bのx座標は同じでした。



みん

リンク

2009/7/28(Tue) 20:59:19|NO.26584

こんな感じでよいのかな

; 点Pの座標 Xp = ginfo_winx/2 : Yp = ginfo_winy/2 ; 点Aの座標 Xa = 500 : Ya = 240 repeat stick key if key=256{ ; 角を求める ; Xb=mousex : Yb=mousey; Bの座標を取得 th=atan(Yb-Yp,Xb-Xp); PAとX軸のなす角を取得(arctan使用) ph=atan(Ya-Yp,Xa-Xp); PBとX軸のなす角を取得(arctan使用) rad=absf(ph-th); PAとPBの成す角を算出 ; 線分と点の描画 ; color 255,255,255 : boxf color 0,0,255 line Xp,Yp,Xa,Ya color 255,0,0 line Xp,Yp,Xb,Yb color 0,0,0 pos Xa,Ya : mes "A" pos Xb,Yb : mes "B" pos Xp,Yp : mes "P" pos 0,0 mes "線分PAとPBのなす角は "+rad+" , "+rad2deg(rad);注:β4からの関数あり } wait 1 loop

arctan(アークタンジェント)というtanの逆関数がありまして、それを用いて計算しています。
ちなみに弧度法から度数法への変換に HSP3.2β4からの rad2deg関数を使っているので、
β4でなければ、そこを修正してから実行してください。



KA

リンク

2009/7/28(Tue) 21:14:17|NO.26585

>>数値が予想どうり(60°とか90°)になりません。

→どう予想通りにならないのか教えてください。


>>なんか説明不足のところがあったら指摘してください。

→辺と角がどう対応していているのか良く分かりません。
→具体的な数値を入れた、必要最小限のスクリプトにしてください。
 (whileやscreen等等)



足利超神

リンク

2009/7/28(Tue) 23:37:02|NO.26589

>みんさん
わざわざスクリプトを組んでいただいて恐縮ですm(_ _)m
逆三角関数は名前を聞いたことあるだけで、概念がわからないので勉強してみます。
みんさんのスクリプトを応用して自分なりにできることをします。

>KAさん
>>数値が予想どうり(60°とか90°)になりません。
三角比をラジアンと勘違いしてただけでした。
すいません



ONION software Copyright 1997-2021(c) All rights reserved.