我已经作出了类位置,其允许设置,改变一个位置,(坐标x,y,该限制由XMIN,XMAX,YMIN,YMAX决定),以caluculate之间的距离两点,并从另一个位置获取方向。
方向是从另一个位置递减(在[0,2pi])。
方向从北变为(假定北是在有较高的坐标定向的杆),以顺时针方向。损失精度计算度两点
package TruckingCompany;
public class Location
{
private double x;
private double y;
private static final double xMax=1000.0;
private static final double xMin=-1000.0;
private static final double yMax=1000.0;
private static final double yMin=-1000.0;
public Location()
{
setX(0.0);
setY(0.0);
}
public Location(double x,double y)
{
setX(x);
setY(y);
}
public Location(Location location)
{
setX(location.getX());
setY(location.getY());
}
public void setX(double x)
{
if(x>=xMin && x<=xMax)
this.x=x;
}
public void setY(double y)
{
if(y>=yMin && y<=yMax)
this.y=y;
}
public void set(double x,double y)
{
setX(x);
setY(y);
}
public double getX()
{
return x;
}
public double getY()
{
return y;
}
public double getDistanceFrom(Location from)
{
double dx,dy;
dx=from.getX()-x;
dy=from.getY()-y;
return Math.sqrt(Math.pow(dx, 2.0)+Math.pow(dy, 2.0));
}
public double getDirectionFrom(Location from)
{
double dy=from.getY()-y;
double direction=Math.PI/4 - Math.asin (Math.toRadians(dy/getDistanceFrom(from)));
if(Double.isNaN(direction)==false)
{
if(from.getX()-x<0.0)
direction+=Math.PI/2;
if(dy<0.0)
direction+=Math.PI;
}
return direction;
}
@Override
public String toString()
{
return "(" + x + " , " + y + ")";
}
}
问题是精度,例如我尝试这两个位置计算距离:
Location l1,l2;
l1=new Location(0.0,0.0);
l2=new Location(300.0,300.0);
System.out.print(Math.toDegrees(l1.getDirectionFrom(l2)));
的问题是精度:在这个例子中它打印44.29度,它应该是45.0,为什么这么大的精度损失?
旁注:你就不能使用'Math.atan2()'? – Mysticial 2012-03-01 20:30:10
您是否获得了0,0-> 0,300和0,0-> 300,0的预期结果? – DNA 2012-03-01 20:32:09