使用参数作为标识符?

时间:2016-01-15 16:29:15

标签: java math coordinates equation points

这似乎是一个愚蠢的问题,但我是Java的新手。我想找到两点的距离。 方法摘要:计算此Point与另一个Point之间的距离当我尝试编译时,我收到错误:无法找到符号(在我的双dx和双dy中)。如果有人可以提供帮助,我们将不胜感激。以下是我的代码。

public class CartPoint implements Point{

  private Double x;
  private Double y;

  public CartPoint (double x, double y){
    this.x = x;
    this.y = y;

  }
  public double x(){
    return x;
  }

  public double y(){
    return y;
  }

  public double distanceFrom(Point other){
    double dx = (other.x - this.x);
    double dy = (other.y - this.y);
    return Math.sqrt(dx*dx + dy*dy);
  }

// INTERFACE

public interface Point{
    double x();
    double y();
}

2 个答案:

答案 0 :(得分:1)

xyCartPoint类的成员,而不是Point类,因此您应该将其用作参数类:

public double distanceFrom(CartPoint other) {

或者,您可以在getX()界面添加getY()Point方法并使用它们:

public double distanceFrom(Point other){
    double dx = (other.getX() - getX());
    double dy = (other.getY() - getY());
    return Math.sqrt(dx*dx + dy*dy);
}

编辑:
既然您已经对问题进行了编辑,并且在界面中显示了x()y()方法,那就是您应该使用的方法:

public double distanceFrom(Point other){
    double dx = (other.x() - x());
    double dy = (other.y() - y());
    return Math.sqrt(dx*dx + dy*dy);
}

答案 1 :(得分:0)

我认为这会有效并且不太容易出现舍入错误:

public double distanceFrom(Point other){
    double distance = 0.0;
    double dx = Math.abs(other.x() - this.x());
    double dy = Math.abs(other.y() - this.y());
    if (dx > dy) {
        double ratio = dy/dx;
        distance = dx*Math.sqrt(1.0+ratio*ratio);
    } else {
        double ratio = dx/dy;
        distance = dy*Math.sqrt(1.+ratio*ratio);
    }
    return distance;
}

请注意,此距离公式仅适用于2D笛卡尔坐标系。球面坐标系上的距离非常不同。