Skip to content

Instantly share code, notes, and snippets.

@refeed
Last active November 8, 2020 02:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save refeed/91c4b1ab1a28a3731af876d3366cf06b to your computer and use it in GitHub Desktop.
Save refeed/91c4b1ab1a28a3731af876d3366cf06b to your computer and use it in GitHub Desktop.
Jarak 3D gamaforce
from math import cos, sqrt, radians
INPUT_COORDINATE_MSG = 'Masukkan latitude longitude dan tinggi dipisahkan dengan spasi:\n'
def get_distance_any_dimensions(coordinate_1, coordinate_2):
"""
Menghitung jarak absolut dari dua koordinat dimensi apapun menggunakan
Euclidean distance.
:param coordinate_1: (Iterable) berisi x elemen integer/float
:param coordinate_2: (Iterable) berisi x elemen integer/float
:returns: (float) Jarak absolut dari dua koordinat
:raises ValueError: coordinate_1 atau coordinate_2 tidak memenuhi ketentuan
"""
if len(coordinate_1) != len(coordinate_2):
raise ValueError('Koordinat harus memiliki dimensi yang sama')
sum_value = 0
for point_1, point_2 in zip(coordinate_1, coordinate_2):
sum_value += (point_1 - point_2)**2
return sqrt(sum_value)
def get_distance_latitude_longitude_in_meters(coordinate_1, coordinate_2):
# Credits to https://stackoverflow.com/a/19356480/6156700
# https://en.wikipedia.org/wiki/Geographic_coordinate_system#Length_of_a_degree
lat_mid = (coordinate_1[0] + coordinate_2[0]) / 2
m_per_deg_lat = (111132.92 - 559.82*cos(radians(2*lat_mid)) + 1.175*cos(radians(4*lat_mid)) - 0.0023*cos(radians(6*lat_mid)))
m_per_deg_lon = 111412.84*cos(radians(lat_mid)) - 93.5*cos(radians(3*lat_mid)) + 0.118*cos(radians(5*lat_mid))
delta_lat = abs(coordinate_1[0] - coordinate_2[0])
delta_lon = abs(coordinate_1[1] - coordinate_2[1])
distance_meter = get_distance_any_dimensions((0, delta_lat * m_per_deg_lat),
(delta_lon * m_per_deg_lon, 0))
return distance_meter
if __name__ == "__main__":
# Baris pertama untuk koordinat pertama
# Baris kedua untuk koordinat kedua
# Kode hanya akurat untuk koordinat yang berdekatan
coordinate_1 = list(map(float, input(INPUT_COORDINATE_MSG).split()))
coordinate_2 = list(map(float, input(INPUT_COORDINATE_MSG).split()))
distance_lat_lon_in_meter = get_distance_latitude_longitude_in_meters(
coordinate_1[:2], coordinate_2[:2]
)
vector_1 = (0, coordinate_1[2])
vector_2 = (distance_lat_lon_in_meter, coordinate_2[2])
result = get_distance_any_dimensions(vector_1, vector_2)
print(result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment