gpt4 book ai didi

java - 从两点计算度数的精度损失

转载 作者:行者123 更新时间:2023-11-30 06:31:47 24 4
gpt4 key购买 nike

我制作了一个 Location 类,它允许设置、更改位置(坐标 x、y,限制由 xMin、xMax、yMin、yMax 决定),以计算两点之间的距离,并获得方向来自另一个地方。
方向是从另一个位置递减([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,为什么精度损失这么大?

最佳答案

您接近 45 度,这意味着您将在接近最大值和最小值的情况下运行某些三角函数。我会检查这些步骤,看看您是否得到了非常接近 0 的中间结果。

  • 尝试用 dx*dxdy*dy 替换对 pow 的调用。

  • 用中间结果将其分解。

关于java - 从两点计算度数的精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9523432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com