我試圖計算一個直角三角形的角度值。兩側是相反的,斜邊恰好與角度相鄰。用Java編寫的一個代碼使用atan2來獲得角度。當我在C中使用atan2時,我得到了不同的值。我獲得正確值的唯一方法是使用asin。爲什麼atan2給我asin不同的價值?
下面是在C代碼片段:
for(i = 0; i < n; i++)
{
m = sqrt((x - l[i].x) * (x - l[i].x) + (y * y));
dist = abs(x - l[i].x);
ang = asin(dist/m) * 180.0/3.14159265;
if(ang <= (l[i].a + .01))
total += (double) l[i].I/(m*m);
}
這裏是用Java代碼片段:
for (j = 0; j < n; j++)
{
d = Math.sqrt((xs - lights[j]) * (xs - lights[j]) + (ys * ys));
w = Math.abs(xs - lights[j]);
ang = Math.atan2(w, ys) * 180.0/3.14159265;
if (ang <= angles[j] + 0.01)
{
total += (double) intensities[j]/(d * d);
}
}
任何人都可以擺脫對這個問題的一些輕?
因爲atan2!= asin !! –
但是在Java中使用atan2給了我與在C中使用asin相同的角度。爲什麼?在C中使用atan2給了我一個與在Java中使用atan2不同的角度。爲什麼?! – user2723636