[問題] 求三角形的內角角度已回收
本來以為利用內積的方式來解決
AdotB = |A|*|B|*Cosθ
再用
acosd( AdotB / |A|*|B| ) = θ
得到角度
但執行起來,總會一個角度
會算成其中一個角的補角
EX:若 A = 40,B = 70,C = 70
則算出來可能會得到
A' = 40 , B' = 110 ,C' = 70
也就是當 B' = A' + C' 時 , B 的正確答案應該是 180-B'
以此條件做為判斷時,MatLab計算時 會產生誤差
=====================附上CODE=====================
BC= B-C;
AB = A-B;
AC = A-C;
AB_BC = dot(AB,BC);
AB_AC = dot(AB,AC);
AC_BC = dot(AC,BC);
len_AB = ((AB(1).^2) + (AB(2).^2)).^(1/2);
len_AC = ((AC(1).^2) + (AC(2).^2)).^(1/2);
len_BC = ((BC(1).^2) + (BC(2).^2)).^(1/2);
ANG_A = acosd (AB_AC/(len_AB*len_AC));
ANG_B = acosd (AB_BC/(len_AB*len_BC));
ANG_C = acosd (AC_BC/(len_AC*len_BC));
if (ANG_A == ANG_B+ANG_C)
ANG_A = 180 - ANG_A;
elseif (ANG_B == ANG_A + ANG_C)
ANG_B = 180 - ANG_B;
elseif (ANG_C == ANG_A + ANG_B)
ANG_C = 180 - ANG_C;
else
fprintf('ERROR\n')
end
ANG_A
ANG_B
ANG_C
=================================================
有時候會跑出ERROR
ERROR
ANG_A =18.4349
ANG_B =45.0000
ANG_C =26.5651
但 18.4349 + 26.5651 = 45
也有時會因為進位的誤差 造成 B 不等於 A + C
請問各位前輩
還有其他方法可以求出三角形的三內角嗎?
或是有可以解決此誤差的方法
寫的有點亂 感謝前輩們耐心看完^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.238.7
推
05/25 02:32, , 1F
05/25 02:32, 1F
推
05/25 12:07, , 2F
05/25 12:07, 2F
→
05/25 12:08, , 3F
05/25 12:08, 3F
→
05/25 12:10, , 4F
05/25 12:10, 4F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章