web-dev-qa-db-ja.com

Javaの2点間の距離を計算したい

それでは、2つの円が重なっているかどうかを判断できるプログラムのほとんどを作成しました。

1つの問題を除いて、プログラムにはまったく問題はありません。プログラムは、2つの中心点間の距離について記述したコードを受け入れません。 if/elseロジックを理解して、後で距離の値に応じて何が起こるかをユーザーに伝えることができますが、今は何が悪いのかを知りたいです。私がコーディングしているプログラムであるEclipseは、距離は配列に解決されるべきだと言っていますが、それはintであるとすでに言っています。

ここに私のコードがあります:

package circles;
import Java.util.Scanner;

public class MathCircles {    
    // variable for the distance between the circles' centers
    public static int distance;

    // variable for the lengths of the radii combined
    public static int radii;

    public static void main(String[] args) {
        // Get the x-value of the center of circle one
        System.out.println("What is the x-coordinate for the center of circle one?");
        Scanner keyboard = new Scanner(System.in);
        int x1 = keyboard.nextInt();

        //Get the y-value of the center of circle one
        System.out.println("What is the y-coordinate for the center of circle one?");
        Scanner keyboard1 = new Scanner(System.in);
        int y1 = keyboard1.nextInt();

        //Get the radius length of circle one.
        System.out.println("How long is circle one's radius?");
        Scanner keyboard2 = new Scanner(System.in);
        int r1 = keyboard2.nextInt();

        // Get the x-value of the center of circle two.
        System.out.println("What is the x-coordinate for the center of circle two?");
        Scanner keyboard3 = new Scanner(System.in);
        int x2 = keyboard3.nextInt();

        //Get the y-value of the center of circle two.
        System.out.println("What is the y-coordinate for the center of circle two?");
        Scanner keyboard4 = new Scanner(System.in);
        int y2 = keyboard4.nextInt();

        //Get the radius length of circle two.
        System.out.println("How long is circle two's radius?");
        Scanner keyboard5 = new Scanner(System.in);
        int r2 = keyboard5.nextInt();

        /*
         * OK, so now I have the location of the two circles' centers,
         * as well as the lengths of their radii.
         * The circles are intersecting IF THE DISTANCE BETWEEN THE TWO CENTERS
         * IS EQUAL TO OR LESS THAN THE COMBINED LENGTHS OF THE RADII.
         * Now I need to get some math done.
         */

        //calculate the combined lengths of the radii

        radii = r1 + r2;

        //calculate the distance
        distance = Math.sqrt((x1-x2)(x1-x2) + (y1-y2)(y1-y2));

    }    
}
25
Marwa Roshan

@trashgodのコメントに基づいて、これは距離を計算する最も簡単な方法です。

_double distance = Math.hypot(x1-x2, y1-y2);
_

ドキュメント of _Math.hypot_から:

戻り値:中間オーバーフローまたはアンダーフローのないsqrt(x²+ y²).

56
Bob

maths-on-paper表記とは異なり、ほとんどのプログラミング言語(Javaを含む)は乗算を行うために*記号が必要です。したがって、距離の計算は次のようになります。

distance = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));

または、代わりに:

distance = Math.sqrt(Math.pow((x1-x2), 2) + Math.pow((y1-y2), 2));
34
us2012

これは古いかもしれませんが、これが最良の答えです:

    float dist = (float) Math.sqrt(
            Math.pow(x1 - x2, 2) +
            Math.pow(y1 - y2, 2) );
9
Rob.Scribe

@trashgodのコメントに基づいて、これは距離を計算する最も簡単な方法です。

double distance = Math.hypot(x1-x2, y1-y2); Math.hypotのドキュメントから:

戻り値:中間オーバーフローまたはアンダーフローのないsqrt(x²+ y²).

ボブ

ボブの承認されたコメントの下で、彼は何を説明できないと言った

Math.hypot(x1-x2, y1-y2);

した。三角形を説明するには、3つの側面があります。 2つのポイントを使用すると、それぞれのx,yに基づいてそれらのポイントの長さを見つけることができます。 Xa=0, Ya=0デカルト座標で考えると(0,0)そしてXb=5, Yb=9再び、デカルト座標は(5,9)です。したがって、それらをグリッドにプロットする場合、それらが同じy軸上にあると仮定した場合のxから別のxまでの距離は+5です。そして、同じx軸上にあると仮定した場合のY軸に沿った距離は+9です。 (数字の線を考えてください)したがって、三角形の長さの1つの辺は5、もう1つの辺は9です。

 (x^2) + (y^2) = Hypotenuse^2

これは、三角形の残りの辺の長さです。したがって、標準距離式とまったく同じです。

 Sqrt of (x1-x2)^2 + (y1-y2)^2 = distance 

操作の左側のsqrtを廃止し、代わりにdistance ^ 2を作成する場合、距離からsqrtを取得する必要があるためです。したがって、距離の式はピタゴラスの定理ですが、教師が人々を混乱させるために別の何かと呼ぶことができるように。

4
Jesse Bevil

Java乗算することを明示的に伝える必要があります。

(x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)

書かれた方程式とは異なり、コンパイラはこれがあなたが何をしたいかを知らない。

4
Jon Taylor

Math.sqrtはdoubleを返すため、intにもキャストする必要があります

distance = (int)Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));

3
Ani

Point2D Java APIクラス:

public static double distance(double x1, double y1, double x2, double y2)

例:

double distance = Point2D.distance(3.0, 4.0, 5.0, 6.0);
System.out.println("The distance between the points is " + distance);
2
Paulo Brasko