直角三角形の角度の値を計算しようとしていました。側面は反対で、斜辺もたまたま角度に隣接しています。Java で記述された 1 つのコードは、atan2 を使用して角度を取得しました。C で 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);
}
}
誰でもこの問題に光を当てることができますか?