Java:两点之间的距离总是返回零

时间:2017-01-21 00:47:29

标签: java oop object polar-coordinates cartesian

我在类“CartesianPoint”中编写一个方法,找到两个笛卡尔点之间的距离。每当我打电话给这个时,无论我使用哪个点,打印出来的距离总是为零。我相信我创建的用于查找距离的新点在某种程度上会覆盖我的实例变量,但我不知道如何正确编码。

这是CartesianPoint类:

public class CartesianPoint implements Point {
    private static double x;
    private static double y;

    public CartesianPoint(double xCoord, double yCoord){
      x = xCoord;
      y = yCoord;
    }

    public double xCoordinate(){
      return x;
    }

    public double yCoordinate(){
      return y;
    }

    public double radius(){
      double radius = Math.sqrt(Math.pow(xCoordinate(), 2)+Math.pow(yCoordinate(), 2));
      return radius;
    }

    public double angle(){
      double angle = Math.acos(xCoordinate() / radius());
      return angle;
    }

    public double distanceFrom(Point other){
      //System.out.println("x coordinate of this: " + xCoordinate());
      //System.out.println("x coordinate of other: " + other.xCoordinate());
      double xDistance = x - other.xCoordinate();
      double yDistance = y - other.yCoordinate();
      double distance = Math.sqrt(Math.pow(xDistance, 2) -     Math.pow(yDistance, 2));
      return distance;
    }

//not currently being used
    public Point rotate90(){
      Point rotatedPoint = new CartesianPoint(0, 0);
      return rotatedPoint;
    }
}

以下是我的测试人员类中的方法调用:

public class tester{
  public static void main(String[] args){
  Point p = new CartesianPoint(3, 4);
  Point a = new CartesianPoint(6, 7);
  System.out.println("Cartesian: (" + p.xCoordinate() + ", " + p.yCoordinate() + ")");
  System.out.println("Polar: (" + p.radius() + ", " + p.angle() + ")");
  System.out.println("Distance: " + p.distanceFrom(a));
  }
}

这是我得到的输出:

Cartesian: (6.0, 7.0)
Polar: (9.219544457292887, 0.8621700546672264)
Distance: 0.0

为了澄清,笛卡儿和极地应该打印出'p'的坐标,而不是像他们现在正在做的'a'。似乎每个创建的新点都会覆盖最后一点的坐标。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

在声明CartesianPoint的属性之前删除static关键字:

private double x;
private double y;

然后,您确定要访问每个类实例的正确属性(封装属性)。

另外,你用来获得两点之间距离的公式是不正确的,应该是

double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));

由于公式为 sqrt((x b - x a 2 +(y b - y a 2 ,正确的方法是:

public double distanceFrom(Point other){
  //System.out.println("x coordinate of this: " + xCoordinate());
  //System.out.println("x coordinate of other: " + other.xCoordinate());
  double xDistance = x - other.xCoordinate();
  double yDistance = y - other.yCoordinate();
  double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
  return distance;
}

答案 1 :(得分:0)

提示:检查计算距离的公式(例如,参见here)并将其与您在此处所写的内容进行比较:

 Math.sqrt(Math.pow(xDistance, 2) - Math.pow(yDistance, 2));

你看到了区别吗?

提示#2:减去???

当您编写一些无法正常工作的代码时,付费为:

  • 仔细阅读您所写的内容
  • 检查要求。
  • 检查您的域名知识:在本案例中为“数学”