나는 (x, y, xMin, xMax, yMin, yMax에 의해 좌표가 결정되는) 위치를 변경하고 위치를 변경할 수있는 위치를 만들었습니다. 2 점, 그리고 다른 위치에서 방향을 얻으 려합니다.
다른 방향에서 방향이 deg (0.2pi)입니다.
방향은 북쪽 (시계 방향으로 북쪽이 더 높은 좌표가있는 곳의 북쪽이라고 가정)에서 시작합니다. 이 경우,이 44.29도를 인쇄이 예에서 :두 점에서도를 계산하는 정확도 상실
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)));
문제는 정밀도 :
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 + ")";
}
}
문제는 예를 들어 나는이 두 위치에서 거리를 계산하려고하면 정밀도 45.0, 왜 엄청난 정밀도의 손실입니까?
사이드 노트 :'Math.atan2()'를 사용할 수 없습니까? – Mysticial
0,0-> 0,300 및 0,0-> 300,0에 대한 예상 결과를 얻습니까? – DNA