2011-09-10 3 views
0
public Point getPointOnSegment(double length, int x1, int y1, int x2, int y2) { 
    if(length==0) return new Point(x2, y2); 
    double angle = Math.atan((double)(y2-y1)/(double)(x2-x1)); 

    return new Point((int)((length*Math.cos(angle))+x1), (int)((length*Math.sin(angle))+y1)); 
} 

この関数は、この直線に沿ってx距離の直線上の点を返すことになっています。しかし何らかの理由で、時にはそれが想定されている反対方向の点を返すことがあります。線の角度が180度よりも大きい場合に起こりそうです。Java関数の復帰ポイントxの直線距離をデバッグする

私はこれを5時間以上見てきましたが、私は自分自身がこの問題を盲目に思っていたことを恐れています。誰が問題が何であるかを知ることができますか、それを代替するより良い機能を提案できますか?

+3

まず、各式を別々のローカル変数に分割しようとします。それはデバッグする*ロット*になります... –

答えて

3

問題はあなたの部門とのゆるい兆候です。例えば、両方の距離が負の場合、結果は両方とも陽性であるように陽性になります。

メソッドatan2を使用して角度を計算してみます

angle = Math.atan2((double)(y2-y1), (double)(x2-x1)); 

この機能は、すべてのケースでは、あなたの相違の兆候を尊重し、完全なクロックの角度を返します。 x2-x1の特殊ケースも処理します。

+0

ありがとうございます。私はあなたの答えを大きく受け入れることができます、そして、私はそれを見逃して自分自身を撃つ... –

関連する問題