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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0611
あsdf角度を求める13解決


あsdf

リンク

2007/6/11(Mon) 20:34:36|NO.8898

点A(x1,y1)、点B(x2,y2)、点(x3,y3)があって、
直線ABに対して直線ACの角度を求める方法はあるでしょうか?
数値はラジアンではなく360度の方で求めたいです。
どうかよろしくお願いします。



この記事に返信する


GENKI

リンク

2007/6/11(Mon) 22:14:07|NO.8899

ラジアンででてくれば度に直せます。相互変換は簡単です。
rad = 3.14 / 180.0 * deg	;度からラジアンを求める
deg = 180.0 / 3.14 * rad ;ラジアンから度を求める
今ひとつわかりにくいかもしれないけどとりあえず資料:
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B8%E3%82%A2%E3%83%B3

 さて、角度ですが…あsdfさんがどの程度数学の知識があるかわかりません。
ベクトルは分かりますでしょうか?分からなかったら言ってください。わかりやすい説明考えてみます。(無理かもわかりませんが…。)
それと、アークタンジェントは分かりますでしょうか?資料なら「アークタンジェント」でググればすぐ出てきます。

 とりあえず「ベクトル」が分かると言う前提での説明を置いておきます。
ベクトルを知らないのなら読まないほうがいいかも。(^ ^;
 まず、ベクトルCAとCBの2つを考えます。Cを原点と考えるわけです。
次にそれぞれのベクトルとX軸とがなす角度(Y軸でもいいです)を求めます。アークタンジェント(atan)使えばでてきます。
これで角度が2つ出ますね。でてきたら片方の角度から片方の角度を引けばokです。
紙に書きながら考えると分かりやすいです。



GENKI

リンク

2007/6/12(Tue) 21:47:15|NO.8906

> それと、アークタンジェントは分かりますでしょうか?資料なら「アークタンジェント」でググればすぐ出てきます。

と、書きましたが、HSP開発Wikiに三角関数のページあったんですね。気付きませんでした。
http://hspwiki.tm.land.to/?DevMagazin%2F%BB%B0%B3%D1%B4%D8%BF%F4



あsdf

リンク

2007/6/14(Thu) 02:55:58|NO.8912

返信ありがとうございます。
ラジアンは何とか理解できました。
しかしベクトルは何度もノートに書き、自分なりに理解しようと努力しましたが
どうもいまいち把握できませんでした。



f

リンク

2007/6/14(Thu) 08:37:33|NO.8913

HSPのエディタ上で「atan」と書いて、その上にカーソル合わせてf1キーを押したら、
取り合えず1辺の角度の出し方は分かるんでね?

したら、あとはその差じゃろ。



GENKI

リンク

2007/6/14(Thu) 20:48:47|NO.8926

 HSP開発Wikiの↓ここに「atanサンプルコード」というのがあります。
http://hspwiki.tm.land.to/?DevMagazin%2F%BB%B0%B3%D1%B4%D8%BF%F4#i5241892
点A(x1,y1)は、このサンプルで言えばウィンドウの中心o点がそれに相当します。
マウスの位置が、点B(x2,y2)あるいは点C(x3,y3)です。
これでX軸と、線分AB(または線分AC)とがなす角度の求め方は分かると思います。

問題は∠Aの角度ですが、要するに…

> したら、あとはその差じゃろ。

です。
線分ABとX軸のなす角度と、線分ACとX軸のなす角度の差を求めれば(引けば)
線分ABと線分ACがなす角度がでてきます。


> しかしベクトルは何度もノートに書き、自分なりに理解しようと努力しましたが
> どうもいまいち把握できませんでした。

 ベクトルは習ってなければ分からなくても当然でしょう。
でも知ってると便利なのでとりあえずベクトルの資料だけでもどうぞ。
http://shigihara.hp.infoseek.co.jp/vx_index.htm


 図を書いて説明できれば、凄く説明しやすいんですが…。
ここの掲示板にお絵かき機能があれば…贅沢か。



f

リンク

2007/6/15(Fri) 08:36:17|NO.8941

>でも知ってると便利なのでとりあえずベクトルの資料だけでもどうぞ。

これ分かりやすいな(笑



hsp2年生

リンク

2007/6/15(Fri) 12:27:42|NO.8943

>図を書いて説明できれば、凄く説明しやすいんですが…。
こんな感じでどうでしょう?

           ・B(x2,y2)




                  ・C(x3,y3)



    ・A(x1,y1) ・D(x2,y1) ・E(x3,y1)

点DEを追加します。
∠BAD=atan((y1-y2)/(x2-x1)) ∠CAE=atan((y1-y3)/(x3-x1))
∠BAC=∠BAD-∠CAE
答えはラジアンだから180/πを掛ける。
やはり図に描くのはむずかしい!



あsdf

リンク

2007/6/19(Tue) 18:53:40|NO.9026

ようやくわかってきました。
取り合えず自分でスクリプトを作って見ました。
左上の数字が角度です。
しかしこれを回転させてみるとどうも一瞬数値が変になってしまいます。
これを解決する方法はありますでしょうか?

#module
#deffunc kyori double A,double B,double C,double D,var R
R=sqrt((A-C)*(A-C)+(B-D)*(B-D))
return
#global
#define ONERD 3.141592/180


x1=320.0 : y1=240.0
x2=200.0 : y2=100.0
x3=400.0 : y3=100.0

repeat : redraw 0 : color ,, : boxf

rd=atan(x2-x1,y2-y1)+ONERD
kyori x1,y1,x2,y2,R
x2=x1+sin(rd)*R : y2=y1+cos(rd)*R

rd=atan(x3-x1,y3-y1)+ONERD
kyori x1,y1,x3,y3,R
x3=x1+sin(rd)*R : y3=y1+cos(rd)*R

color 255,255,255
circle x1-2,y1-2,x1+2,y1+2
circle x2-2,y2-2,x2+2,y2+2
circle x3-2,y3-2,x3+2,y3+2

line x1,y1,x2,y2
line x1,y1,x3,y3
pos 0,0

mes atan( x2-x1 , y2-y1 )
mes atan( x3-x1 , y3-y1 )


mes "角度"+atan( x2-x1 , y2-y1 ) - atan( x3-x1 , y3-y1 )


wait 1 : redraw 1 : loop



あsdf

リンク

2007/6/19(Tue) 19:11:56|NO.9027

すみません、こっちをお願いします。

#module
#deffunc kyori double A,double B,double C,double D,var R
R=sqrt((A-C)*(A-C)+(B-D)*(B-D))
return
#global
#define ONERD 3.141592/180


x1=320.0 : y1=240.0
x2=200.0 : y2=100.0
x3=400.0 : y3=100.0

repeat : redraw 0 : color ,, : boxf

rd=atan(x2-x1,y2-y1)+ONERD
kyori x1,y1,x2,y2,R
x2=x1+sin(rd)*R : y2=y1+cos(rd)*R

rd=atan(x3-x1,y3-y1)+ONERD
kyori x1,y1,x3,y3,R
x3=x1+sin(rd)*R : y3=y1+cos(rd)*R

color 255,255,255
circle x1-2,y1-2,x1+2,y1+2
circle x2-2,y2-2,x2+2,y2+2
circle x3-2,y3-2,x3+2,y3+2

line x1,y1,x2,y2
line x1,y1,x3,y3
pos 0,0

mes atan( x2-x1 , y2-y1 )
mes atan( x3-x1 , y3-y1 )


mes "角度"+( atan( x2-x1 , y2-y1 ) - atan( x3-x1 , y3-y1 ) )


wait 1 : redraw 1 : loop



f

リンク

2007/6/19(Tue) 20:40:46|NO.9031

こうして、

mes atan( x2-x1 , y2-y1 ) / ( 3.141592 / 180.0) mes atan( x3-x1 , y3-y1 ) / ( 3.141592 / 180.0) mes "角度"+(( atan( x2-x1 , y2-y1 ) - atan( x3-x1 , y3-y1 ) ) / ( 3.141592 / 180.0))
度で表示したら理由が分かるんじゃね?



あsdf

リンク

2007/6/20(Wed) 17:01:03|NO.9036

すみません、原因はわかるのですが解決方法がわからなくて・・・



f

リンク

2007/6/20(Wed) 19:43:17|NO.9040

本当に理由が分かっていれば対処できそうな気もするけど・・・
ラジアンじゃ分かりにくいのかも知れない。

ので、度で説明すると

例えば、普通に答えが出る場合と言うのは、
直線1の角度が10度、直線2の角度が20度等の状態。
20度-10度で、差は10度と分かる。

ところが、直線1の角度が355度で、直線2の角度が5度だったらどうなるか?
5度-355度では計算が狂ってしまう。

じゃーどうするか?
通常の時は直線1の角度が直線2の角度より小さいのが前提なんだから、
それにあわせればいいじゃん。

直線2の角度5度に、360度足してやっても、角度としては同じ意味だべ。

365度-355度なら、計算結果は問題ないでそ。


つまり、直線1の角度が直線2より大きくなったら、直線2の角度に360度足して、
それから計算すればいいと言うわけ。



あsdf

リンク

2007/6/20(Wed) 22:41:10|NO.9043

あ、なるほど。
言われるまで全然思いつきませんでした。
どうもありがとうございます。
これで全て解決しました。



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