その長さ(その座標によって知られている)の行を制限する機能が必要ですが、は一定の長さに限定されるもので。Iは を(その座標によって知られている)ラインを取り、<strong>同じ</strong>角度でラインを返す関数が必要
私のコードは、正しい値を与えるのみラインが「正しい」(唯一の経験的に実証され、申し訳ありません)
になっているとき。
何か不足していますか?
public static double getAngleOfLine(int x1, int y1, int x2, int y2) {
double opposite = y2 - y1;
double adjacent = x2 - x1;
if (adjacent == Double.NaN) {
return 0;
}
return Math.atan(opposite/adjacent);
}
// returns newly calculated destX and destY values as int array
public static int[] getLengthLimitedLine(int startX, int startY,
int destX, int destY, int lengthLimit) {
double angle = getAngleOfLine(startX, startY, destX, destY);
return new int[]{
(int) (Math.cos(angle) * lengthLimit) + startX,
(int) (Math.sin(angle) * lengthLimit) + startY
};
}
はところで:私は、Javaでの配列を返すことは愚かであることを知っている が、それは単なる例のためです。
何が今までNaNに等しいではないとしてNaNのためのあなたのチェックは常にfalseを返します。また、0は有効な角度であるため、エラーの場合は0を返します。 –
ああ、そうだよ!それは古いコードからのものです。 –