Ответ 1
На основе комментария @trashgod это самый простой способ вычисления расстояния:
double distance = Math.hypot(x1-x2, y1-y2);
Из документация Math.hypot
:
Возвращает:
sqrt(x²+ y²)
без промежуточного переполнения или переполнения.
Итак, я написал большую часть программы, которая позволит мне определить, перекрываются ли два круга.
У меня нет никаких проблем с моей программой, за исключением одной проблемы: программа не примет код, который я написал для расстояния между двумя центральными точками. Я могу понять логику 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 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 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));
}
}
На основе комментария @trashgod это самый простой способ вычисления расстояния:
double distance = Math.hypot(x1-x2, y1-y2);
Из документация Math.hypot
:
Возвращает:
sqrt(x²+ y²)
без промежуточного переполнения или переполнения.
В отличие от обозначения 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));
Это может быть OLD, но вот лучший ответ:
float dist = (float) Math.sqrt(
Math.pow(x1 - x2, 2) +
Math.pow(y1 - y2, 2) );
Вам нужно явно указать Java, которую вы хотите размножить.
(x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)
В отличие от письменных уравнений компилятор не знает, что вы хотите сделать.
На основе комментария @trashgod это самый простой способ вычисления > distance:
double distance = Math.hypot(x1-x2, y1-y2);
Из документации Math.hypot:Возвращает:
sqrt(x²+ y²)
без промежуточного переполнения или переполнения.Боб
Ниже Боба одобрил комментарий, он сказал, что не может объяснить, что
Math.hypot(x1-x2, y1-y2);
сделал. Объяснить треугольник имеет три стороны. С двумя точками вы можете найти длину этих точек на основе x,y
каждого из них. Xa=0, Ya=0
Если мышление в декартовых координатах (0,0)
, а затем Xb=5, Yb=9
Опять же, декартовы координаты (5,9)
. Поэтому, если вы планируете строить их на сетке, расстояние от x до другого x, если они находятся на одной оси y, составляет +5
. и расстояние вдоль оси Y от одного до другого, предполагая, что они находятся на одной оси x, составляет +9
. (думаю, числовая линия) Таким образом, одна сторона длины треугольника равна 5, другая сторона равна 9. Гипотенуза
(x^2) + (y^2) = Hypotenuse^2
который является длиной оставшейся части треугольника. Таким образом, это то же самое, что и стандартная формула расстояния, где
Sqrt of (x1-x2)^2 + (y1-y2)^2 = distance
потому что если вы покончите с sqrt на левой стороне операции и вместо этого сделаете расстояние ^ 2, вам все равно придется получить sqrt с расстояния. Таким образом, формула расстояния - это теорема Пифагора, но так, что учителя могут называть ее чем-то другим, чтобы путать людей.
Math.sqrt возвращает double, поэтому вам также нужно будет отнести его к int
distance = (int)Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
Вы также можете использовать класс Java2 в Java Point2D:
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);