1
$degree = 179;
$aX = $valueB + ($valueA - $aY)/tan(deg2rad($degree));

742.710038369 を $aX として返します

ただし、$degree が 180 の場合。

$degree = 180;
$aX = $valueB + ($valueA - $aY)/tan(deg2rad($degree));

-8.1656196766E+15 を $aX として返します

同様の値が 361 まで続き、1 回転して 857.289961631 が $aX として再び返されます。

これを修正するにはどうすればよいですか? 別の値を変換するか、何か他のものを変更する必要がありますか?

ご回答ありがとうございます。

編集;

$degree = 180;
$valueA = 800;
$valueB = 800;

$aY = ($valueB/64) * (64) -1;
$aX = $valueB + ($valueA - $aY)/tan(deg2rad($degree));

$aY = round($aY/64,0);
$aX = round($aX/64,0);
4

1 に答える 1

0

他のコメントが指摘しているように、結果が通常の数値である必要がある場合、0 で除算するとエラーが発生するか、エラーが発生するはずです。現在のコード スニペットは、実際にその動機が考えられる場合、射影幾何学の方向を表す同次座標のアプリケーションのように見えます。線形式で方向を線の傾きとして表すことは、傾きが垂直でない場合にのみ機能します。同次座標では、そのような方向を簡単に表すことができ、そのような方向の近くで数値的な安定性を得ることができます。

とはいえ、現在のコード スニペットがどのアプリケーションの一部であるか、したがってこの回答が関連しているかどうかを理解することはできません。

于 2012-11-04T17:22:30.267 に答える