程序涉及使用距离函数

时间:2012-08-02 22:05:32

标签: java object distance

所以我有Location类和一个无线电类(无线电类包含坐标)。基本上对于我正在编写的程序,我需要从无线电类中获取坐标的位置,并使用2组坐标的距离公式。 位置:

public class Location {


private double lat, lon;


public Location (double lat, double lon){
this.lat=lat;
this.lon=lon;
}

public Location (){
this.lat=0.0;
this.lon=0.0;
}

public void setLat(double lat){
this.lat=lat;
}

public void setLon(double lon){
this.lon=lon;
}

public double Distance (double lat1, double lon1, double lat2, double lon2) {

lat1 = Math.toRadians(lat1);
lon1 = Math.toRadians(lon1);
lat2 = Math.toRadians(lat2);
lon2 = Math.toRadians(lon2);

double cosLat2 = Math.cos(lat2);
double sinLonChange = Math.sin(lon2-lon1);
double cosLat1 = Math.cos(lat1);
double sinLat2 = Math.sin(lat2);
double sinLat1 = Math.sin(lat1);
double cosLonChange = Math.cos(lon2-lon1);

double a = Math.pow((cosLat2*sinLonChange), 2);
double b = Math.pow(((cosLat1*sinLat2)-(sinLat1*cosLat2*cosLonChange)), 2);
double c = (sinLat1*sinLat2)+(cosLat1*cosLat2*cosLonChange);

double spherDistance = Math.atan(Math.sqrt(a+b)/c);

double Distance = 3959 * spherDistance;

return Distance;

}


public double getLat(){
return lat;
}

public double getLon(){
return lon;
}
public double getDistance(){
return Distance;
}

public String toString(){
String dist="lat"+lat+"lon"+lon;
return dist;
}

}

和电台:

public class Radio {
public static void main(String[] args) {
Location loc1=new Location(10,20);
Location loc2=new Location(30,40);

System.out.println(loc1.toString());    
System.out.println(loc2.toString());    

}


}

我还应该提到主要方法在广播中的唯一原因是因为我只是在测试是否一切正常。非常感谢任何帮助或建议。 非常感谢你们!

2 个答案:

答案 0 :(得分:1)

根据上述对于Wardd的建议的推断,我建议做这样的事情:

位置等级:

public class Location {
  // private data

  // constructor

  public double distance(Location otherLoc) {
    // Use distance formula here
  }
}

电台班级:

public class Radio {
  private Location loc;

  public double distance(Radio otherRadio) {
    return loc.distance(otherRadio.loc);
  }
}

如果这不能解答您的所有问题,请在上面修改您的帖子,或者发布一个包含其他详细信息的新帖子,以便我们提供帮助。

答案 1 :(得分:0)

如果我能正确理解您的想法,Radio应该有Location,并且您想要找到两个无线电之间的距离。在这种情况下,每个无线电应该包含自己的Location实例,如下所示:

public class Radio {
    public Location loc;
}

然后,如果要查找两个无线电之间的距离,可以创建使用Distance函数,但传递(Radio r1, Radio r2)作为参数而不是四个双精度。将public double Distance更改为static public double Distance,以便您可以自行调用它,而无需创建位置实例。然后在距离函数内部,您可以检索每个无线电的位置值,进行计算并返回结果。