
こんにちは。
以前、三角形についての質問をさせて頂き、三角形の3点を移動させられるようになりました。
そこで、辺の長さの求め方も教えて頂きました。
今回の質問は「三辺の長さから角度を求める方法を教えて欲しい」というものです。
「辺の長さから角度」と思いつき、余弦定理を思い出したのですが、元々うろ覚えだった為に実装する事が出来ないで居ます・・・。
分かる方、教えていただけませんか?
三角形ABCの3辺をそれぞれabcとして余弦定理に当てはめると
cosA = (b*b)+(c*c)-(a*a) / (2*b*c)
というようにして求められると思ったのですが・・・。
No.2ベストアンサー
- 回答日時:
2辺から角度を求めるには内積を使います
三角を以下のように3点として、p0の角度(θ)を求めたいとします
p0
/\
/ \
/ \
p1 ̄ ̄ ̄ ̄ ̄ ̄p2
cos(θ)=(p1-p0)・(p2-p0)/(p1-p0の長さ)/(p2-p0の長さ)
※p1-p0の計算結果はベクトルです
※p2-p0の計算結果はベクトルです
※・は内積を求める意味です
※p1-p0、p2-p0のベクトルを正規化(長さ1にする事)すれば前述の式は
cos(θ)=(p1-p0)・(p2-p0)
と非常に簡単になります
これを使えば
θ=acos(p1-p0)・(p2-p0)
p1-p0=>q、p2-p0=>rとして
θ=acos(q.x*r.x + q.y*r.y)
※acosはアークコサインの意味
※acosで求めた結果はラジアンなので 180/3.141592をかければデグリーになります
回答ありがとうございます。
ベクトルはかなり苦手だった覚えがあるのですが、試行錯誤の末、角度の表示に成功しました。
ついでに面積も表示させるようにして、三角形シリーズは無事完成しました。
本当にありがとうございました。
No.1
- 回答日時:
プログラミングはあまり詳しくないですが失礼します。
余弦定理をつかえば三辺の長さからcosの値を求めることが可能です。
というか、そこまでわかってるならやってみればいいんじゃないかと思うんですが。
ちなみに、cosAの値がわかってもそのままだと角度はわかりませんので、
アークコサインを使って角度を求めます。
この回答への補足
記述した内容から角度を求める為の式を抜き出したものです。
//三点を作成、設定をする
for(n=1;n<=3;n++){
make = _root.attachMovie("point","point"+n,n);
make.onPress = function(){
startDrag(this,true);
}
make.onRelease = function(){
stopDrag();
}
}
onEnterFrame = function(){
_root.clear();
//座標を変数に
Ax = _root.point1._x;
Ay = _root.point1._y;
Bx = _root.point2._x;
By = _root.point2._y;
Cx = _root.point3._x;
Cy = _root.point3._y;
//線の描画
_root.lineStyle (0, 0x000000, 100);
_root.moveTo(Ax,Ay);
_root.lineTo(Bx,By);
_root.lineTo(Cx,Cy);
_root.lineTo(Ax,Ay);
//それぞれの線分の長さを表示する
a = Math.sqrt((Bx-Ax)*(Bx-Ax)+(By-Ay)*(By-Ay));
b = Math.sqrt((Cx-Bx)*(Cx-Bx)+(Cy-By)*(Cy-By));
c = Math.sqrt((Ax-Cx)*(Ax-Cx)+(Ay-Cy)*(Ay-Cy));
//小数点第2位以下を切り捨てる
trace("aの長さは"+Math.floor(a*10)/10);
trace("bの長さは"+Math.floor(b*10)/10);
trace("cの長さは"+Math.floor(c*10)/10);
//cosAを算出する
trace("角Aの数値は"+((b*b)+(c*c)-(a*a)) / (2*b*c));
}
//最初に実行
if(isNaN(Ax)){
//初期座標
_root.point1._x = 70;
_root.point1._y = 180;
_root.point2._x = 270;
_root.point2._y = 180;
_root.point3._x = 270;
_root.point3._y = 30;
}
回答ありがとうございます。
質問に書いた式の通りに実行してみたのですが、計算で出てきたのは全く関係ない数値でした。
90度にしても高さによって数値はバラバラ、コサインを表示しているとはとても思えない状態です。
他の角のコサインを表示しているのかと思って試しましたが、同様に、高さによってバラバラです・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 数1余弦定理 三角形ABCにおいてa=2√3、b=3-√3、C=120°のとき 残りの辺の長さと角の 5 2022/11/24 21:27
- 数学 AB=2,BC=3,∠ABC=60°の三角形がある。 点Aから辺BCに垂線を下ろし辺BCとの交点をD 4 2023/02/02 15:55
- 数学 三角形ABCの辺BCを4 : 3に内分する点をTとし、点Tを接点として辺BCに接する円が点Aで直線A 3 2023/02/12 21:03
- 高校 三角形の辺の長さを求める問題で余弦定理で二次方程式を解いた時に答えが2つでてしまってどちらも正なので 3 2022/09/08 17:42
- 数学 点Oを中心とし、半径が5である円Oがある。この円周上に2点A、B をAB=6となるようにとる。また、 5 2023/08/16 23:32
- 数学 三角形ABCにおいてa=2√3、b=3-√3、C=120°のとき 残りの辺の長さと角の大きさを求めよ 4 2022/11/24 21:56
- 数学 『弧は弦より長し』 8 2022/04/18 10:23
- 数学 数1 三角形ABCにおいて、a=2√3、b=2√2、A=60°の時 c、B、Cを求めよ。という問題で 4 2022/11/23 21:48
- 数学 数学の質問です。 △ABCにおいて, ∠Aの二等分線が BC と交わる点をRとする。 辺BC, CA 2 2023/07/13 23:58
- 数学 2つの角と1つの辺から辺の長さを求める。 色々やったんですけど 結局解けなかったので質問します。 x 10 2023/05/12 08:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FLASHでランダムでURLを表示さ...
-
【ランダム関数】0と1を返すだ...
-
python: 直角三角形の種類を求...
-
c++ cmathとmath.h
-
ミリ秒までカウントできるタイマー
-
関数の中でaddEventListenerを...
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
IDの自動採番について
-
EnabledプロパティをFalseの時
-
配列の要素番号を取得するには?
-
AS3.0で取得した外部XMLの文字...
-
ActionScriptで配列をクリアす...
-
SetTimer関数について
-
【ActionScript】配列の昇順降...
-
重複しない乱数整数を発生させる。
-
DXRubyについてです
-
アクティブなウィンドウのみ、...
-
エラー438でオブジェクトの...
-
functionのパラメータの渡し方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c++ cmathとmath.h
-
【ランダム関数】0と1を返すだ...
-
時計のカウントダウンする方法
-
三辺の長さから角度を求めたい...
-
python: 直角三角形の種類を求...
-
ActionScript3.0でのカウントダ...
-
プログラム開始から 2秒毎に ...
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
TextChangeイベントが発生しない
-
LRESULTとHRESULT
-
VB.NET の配列の要素数
-
ifdefとenum
-
変な質問ですみません、n番目の...
-
VBでボタンを押すと画像をラン...
-
配列の要素番号を取得するには?
-
#define 文
-
IDの自動採番について
-
PHP + MySQL で登録時に重複チ...
-
DataGridでCTRLキーを押さずに...
おすすめ情報