java 두점 사이의 거리 계산

class Main {
public static void main(String[] args) {
Location loc1 = new Location(37.567, 126.978);
Location loc2 = new Location(35.179,129.076);
System.out.println(loc1.distance(loc2));
}
}

/////////////////////
public class Location {

private double latitude; // 위도
private double longitude; // 경도
public Location (double lat, double lon) {
this.latitude = lat;
this.longitude = lon;
}
public double getLatitude() {
return this.latitude;
}
public double getLongitude() {
return this.longitude;
}
public double distance (Location other) {
double RADIUS_EARTH = 6371.0; // 지구의 반지름

// fill here!

}
}
제가 loc1 loc2의 두점 사이의 거리를 나타내고 싶은데 하위 클래스의 distance 함수를
R × arccos(cos(rad(90−lat1)) × cos(rad(90−lat2)) + sin(rad(90−lat1)) × sin(rad(90−lat2)) × cos(rad(lon1−lon2))) class Main {
public static void main(String[] args) {
Location loc1 = new Location(37.567, 126.978);
Location loc2 = new Location(35.179,129.076);
System.out.println(loc1.distance(loc2));
}
}

/////////////////////
public class Location {

private double latitude; // 위도
private double longitude; // 경도
public Location (double lat, double lon) {
this.latitude = lat;
this.longitude = lon;
}
public double getLatitude() {
return this.latitude;
}
public double getLongitude() {
return this.longitude;
}
public double distance (Location other) {
double RADIUS_EARTH = 6371.0;

// fill here!

}
}
제가 loc1 loc2의 두점 사이의 거리를 나타내고 싶은데 하위 클래스의 distance 함수를
R × arccos(cos(rad(90−lat1)) × cos(rad(90−lat2)) + sin(rad(90−lat1)) × sin(rad(90−lat2)) × cos(rad(lon1−lon2))) 이 식으로 정의 하고싶은데 잘 모르겠어요 도와주세요 ㅜ

  1. java.lang.Math 내부엔 여러 수식들이 정의되어있습니다. arccos(), toRadians(), toDegrees() 등의 다양한 함수를 이용하면 쉽게 풀 수 있으실겁니다.

  2. ` 3개로 코드를 감싸면 더욱 보기 쉽게 바뀝니다.

class Foo {
  public static void main(String[] args) {
    System.out.println("Hello world!);
  }
}

rad 는 decimal degree 로 받은 위도와 경도를 radian 으로 바꿔주는 함수라고 하는데 이건 어떻게 정의해야하나요

java.lang.Math 내부에 toRadians() 라는 함수가 정의되어 있습니다. 레퍼런스 참고하시면 사용 예 알 수 있을겁니다.

그리고 일반적인 구 표면을 대상으로 하는 연산이 아닌 지구만을 대상으로 하는 경우, 즉 반지름 값이 클래스 차원에서 고정되어 있는 경우라면 final 키워드를 붙여 literal화 시키는 것이 좋을 것 같습니다. static까지 붙여서 클래스변수화 시켜도 좋고요.

하위 클래스에서 distance식을 정의 할때 시작은 뭐로해야하고 math.acos 변수 무엇을 넣어야 할지 모르겠어요

상수를 따로 뺀다는 가정 하에

import java.lang.Math.*;
...(중략)...
return RADIUS_EARTH * acos(cos(toRadians(90-this.latitude)) * cos(toRadians(90-other.latitude)) + ... 

같이 그대로 쓰시면 돼요. 식을 만들고 변수 이름을 정했으면 그대로 갖다 쓰면 됩니다.

return RADIUS_EARTH * Math.acos(Math.cos(Math.toRadians(90-this.latitude))) (Math.cos(Math.toRadians(90-other.getLatitude()))) + (Math.sin(Math.toRadians(90-other.getLatitude()))) (Math.sin(Math.toRadians(90-other.getLatitude()))) * (Math.cos(Math.toRadians(this.longitude-other.getLongitude()))); 이렇게 식을 써봤는데 잘 안되네요
rad 는 decimal degree 로 받은 위도와 경도를 radian 으로 바꿔주는 함수라고 하는데 이 rad를 정의를 어떻게 해야할까요

제가 원하는 값은 325.23184366269084 인데 3359.6851049413026가 나오네요
rad가 문제인거 같은데 알려주실수있나요? ㅜ