2017-02-12 5 views
0

私は、コサインの法則を使って、与えられた角度とは反対の三角形の辺の長さを返す関数をCで作成しようとしています。余弦計算の法則を書く

今私はExcelで作業する数式を得て、正しい結果を得ました。しかし、私はCで試してみると、間違った結果を得ています。なぜそれを解決することはできません。

私はサイドAを21.1、サイドBを19、そしてそれらの間の角度を40度としています。今私が優秀になるように答えは14.9になるはずです。しかし、私は23.735を得ています。私が間違ったところでうまくいくように助けてください。

// Find the length of a side of a triangle that is oppisit a given angle using the Law Of Cosine 
// for example using an triangle that is 21.1cm on one side, 19 cm on the other and an angle of 40 degreese inbetween then.... 
// in excel it worked and the formuler was =SQRT(POWER(23.1;2)+POWER(19;2)-2*(23.1)*(19)*COS(40*(3.14159/180))) = 14.9 cm 
float my_Trig_LawOfCos_OppSideLength(float centerAngle, float sideA, float sideB) 
    { 
     float sideLengthPow2= (pow(sideA,2) + pow(sideB,2))) - ((2*sideA*sideB)*cos(centerAngle*(3.14159/180)); 
     float sideLength = sqrt(sideLengthPow2); 
     return sideLength; 
    } 
+2

あなたのかっこはバランスが取れていません(あなたのサンプルを貼り付けたときに私のコンパイラはちょうど訴えました)。だから私はこれがあなたの実際のコードだとは思わない。 – StoryTeller

+0

[私が*問題を解決したときに、あなたは期待した結果を得ました](http://ideone.com/Gd4oqO)。 – StoryTeller

+0

注意:コードが 'float'を使用している場合、' sqrtf() '、' cosf() 'などの' float'関数も使用できます。 – chux

答えて

2

これは、引数が間違った順序で渡された場合に発生します。あなたは、角度の位置に側の長さ23.1を入れます。

def oppside(ang, lA, lB): return (lA**2+lB**2-2*(lA)*(lB)*cos(ang*(pi/180)))**0.5 

oppside(40,19,23.1) 
>>> 14.905575729577208 

oppside(19,23.1,40) 
>>> 19.65430416708927 

oppside(23.1,19,40) 
>>> 23.72490935854042 

、あなたはまた、誤った関数呼び出しを文書化します(そしておそらく自分自身でそれを参照してください)ので、かなり頻繁にあなたは、間違った結果を示し、最小限の実行例を製造することにより、このようなエラーを見つけることができます。

関連する問題