好的,所以我编写了大部分程序,可以让我确定两个圆是否重叠。
除了一个问题,我的程序没有任何问题:程序不会接受我为两个中心点之间的距离编写的代码。我可以弄清楚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));
}
}
答案 0 :(得分:56)
根据@ trashgod的评论,这是计算距离的最简单方法:
double distance = Math.hypot(x1-x2, y1-y2);
来自Math.hypot
的{{3}}:
返回:
sqrt(x²+ y²)
,没有中间溢出或下溢。
答案 1 :(得分:34)
与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));
答案 2 :(得分:9)
这可能是旧的, 但这是最好的答案:
float dist = (float) Math.sqrt(
Math.pow(x1 - x2, 2) +
Math.pow(y1 - y2, 2) );
答案 3 :(得分:4)
您需要明确告诉Java您希望成倍增加。
(x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)
与书面公式不同,编译器不知道这是你想要做的。
答案 4 :(得分:4)
基于@ trashgod的评论,这是计算>距离的最简单方法:
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)
。因此,如果您要在网格上绘制那些,则假设它们位于同一y轴上,从x到另一个x的距离为+5
。并且假设它们在相同的x轴上,沿着Y轴从一个到另一个的距离是+9
。 (想想数字线)因此三角形长度的一边是5,另一边是9.斜边是
(x^2) + (y^2) = Hypotenuse^2
是三角形剩余边的长度。因此与标准距离公式完全相同
Sqrt of (x1-x2)^2 + (y1-y2)^2 = distance
因为如果你取消操作左侧的sqrt而是使距离^ 2,那么你仍然必须从远处获得sqrt。因此,距离公式是毕达哥拉斯定理,但在某种程度上,教师可以称之为不同的东西来混淆人们。
答案 5 :(得分:3)
Math.sqrt返回一个双精度因此你必须将它强制转换为int
distance = (int)Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
答案 6 :(得分:2)
您也可以使用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);