Доброго времени суток
написал программку решение обратной геодезической задачи
Вопрос:
к примеру при вводе данных х1 = 50, у1 = 50, х2 = 50, у2 =100
происходит ошибка ZeroDivisionError: float division by zero
где в коде не правильно?
проверял на сайте https://geostart.ru/post/299 получаю значение Дирекционного угла.
и посоветуйте как сделать исключение если ввести в координаты все 0
вот мой код:
import math
print('Координаты пунктов')
while True:
x1 = float(input('введи х1: ‘))
y1 = float(input(’введи у1: ‘))
x2 = float(input(’введи х2: ‘))
y2 = float(input(’введи у2: ‘))
dx = x2 - x1
dy = y2 - y1
dist1 = math.hypot(dx, dy) # или так math. sqrt(dx ** 2 + dy ** 2)
print(’Расстояние: ‘, round(dist1, 3))
r = math.degrees(math.atan(abs(dy / dx))) # Находим Румб
dd = r
d = math.trunc(dd)
m = math.trunc((dd - d) * 60)
s = ((dd - d) * 60 - m) * 60
# print(’Румб: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='')
a = 0 # Дирекционный угол
if dx > 0 and dy > 0:
a = r
ne = r
print('СВ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='' )
elif dx < 0 and dy > 0:
a = 180 - r
se = r
print('ЮВ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='' )
elif dx < 0 and dy < 0:
a = 180 + r
sw = r
print('ЮЗ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='' )
elif dx > 0 and dy < 0:
a = 360 - r
nw = r
print('СЗ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='' )
elif dx == 0:
if dy > 0:
a = 90
elif dy < 0:
a = 270
elif dy == 0:
if dx > 0:
a = 0
elif dx < 0:
a = 180
da = (a)
dd = da
d = math.trunc(dd)
m = math.trunc((dd - d) * 60)
s = ((dd - d) * 60 - m) * 60
print('Дирекционный угол: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='')
b = input('Хотите начать заново (y/n): ‘)
if b == ’y':
print('good')
else:
break
написал программку решение обратной геодезической задачи
Вопрос:
к примеру при вводе данных х1 = 50, у1 = 50, х2 = 50, у2 =100
происходит ошибка ZeroDivisionError: float division by zero
где в коде не правильно?
проверял на сайте https://geostart.ru/post/299 получаю значение Дирекционного угла.
и посоветуйте как сделать исключение если ввести в координаты все 0
вот мой код:
import math
print('Координаты пунктов')
while True:
x1 = float(input('введи х1: ‘))
y1 = float(input(’введи у1: ‘))
x2 = float(input(’введи х2: ‘))
y2 = float(input(’введи у2: ‘))
dx = x2 - x1
dy = y2 - y1
dist1 = math.hypot(dx, dy) # или так math. sqrt(dx ** 2 + dy ** 2)
print(’Расстояние: ‘, round(dist1, 3))
r = math.degrees(math.atan(abs(dy / dx))) # Находим Румб
dd = r
d = math.trunc(dd)
m = math.trunc((dd - d) * 60)
s = ((dd - d) * 60 - m) * 60
# print(’Румб: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='')
a = 0 # Дирекционный угол
if dx > 0 and dy > 0:
a = r
ne = r
print('СВ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='' )
elif dx < 0 and dy > 0:
a = 180 - r
se = r
print('ЮВ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='' )
elif dx < 0 and dy < 0:
a = 180 + r
sw = r
print('ЮЗ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='' )
elif dx > 0 and dy < 0:
a = 360 - r
nw = r
print('СЗ: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\“’, sep='' )
elif dx == 0:
if dy > 0:
a = 90
elif dy < 0:
a = 270
elif dy == 0:
if dx > 0:
a = 0
elif dx < 0:
a = 180
da = (a)
dd = da
d = math.trunc(dd)
m = math.trunc((dd - d) * 60)
s = ((dd - d) * 60 - m) * 60
print('Дирекционный угол: ‘, d, ’°', m, ‘\’', round(s, 2), ‘\”’, sep='')
b = input('Хотите начать заново (y/n): ‘)
if b == ’y':
print('good')
else:
break