Задача
Даны координаты вершин прямоугольника x1, y1
и x2, y2
. Точки, лежащие в этом прямоугольнике назовем обработанными. Точки, расстояние от которых до точки с координатами x3, y3
не превышает r
, назовем облученными. Требуется найти количество обработанных и облученных точек.
Иллюстрация для данных x1=y1=0, x2=5, y2=4, x3=4, y3=0, r=3
:
Искомое количество точек в данном примере 14.
Проблема
Вот мое решение:
x1, y1, x2, y2 = map(int, input().split())
x3, y3, r = map(int, input().split())
if not (x3 in range(min(x1, x2), max(x1, x2) + 1) and y3 in range(min(y1, y2), max(y1, y2) + 1)):
print('')
exit()
w = min(abs(y2 - y3), r - 1) + min(abs(y1 - y3), r - 1) + 1
h = min(abs(x2 - x3), r - 1) + min(abs(x1 - x3), r - 1) + 1
corr = sum((abs(y2 - y3) >= r, abs(x3 - x1) >= r, abs(y1 - y3) >= r, abs(x2 - x3) >= r))
print((w * h) + corr)
На примере оно отрабатывает правильно, но дальше сыпется. Из моих ручных тестов следует, что оно выдает правильный ответ кроме тех случаев, когда точка x3, y3
не лежит в прямоугольнике x1,y1 x2,y2
, поэтому в коде и добавлена заглушка.
Подскажите, как можно это исправить? Я думаю, что нужно как-то «достроить» прямоугольник до точки x3, y3
, а потом вычесть из общего числа точек количество точек на достроенной площади, но я не знаю, как это правильно реализовать в коде.
2 / 2 / 0 Регистрация: 04.12.2022 Сообщений: 11 |
|
1 |
|
Посчитать площадь прямоугольника!06.12.2022, 21:09. Показов 1387. Ответов 1
В списке coords лежат четыре кортежа, каждый из которых соответствует координатам вершины прямоугольника на координатной плоскости. Напишите функцию, которая находит площадь прямоугольника по его координатам. Обратите внимание: координаты могут находиться в любом порядке. Проверьте работоспособность программы на разных входных значениях списка. Пример: Input: coords = [(10, 20), (10, 30), (40, 20), (40, 30)] Output: 300 Input: coords = [(10, 20), (40, 20), (40, 30), (10, 30)] Output: 300
0 |
Vigilant Mole 489 / 252 / 97 Регистрация: 04.11.2022 Сообщений: 378 |
||||
06.12.2022, 22:34 |
2 |
|||
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
06.12.2022, 22:34 |
Помогаю со студенческими работами здесь Даны координаты левой верхней и правой нижней вершин прямоугольника. Найти его площадь Периметр и площадь квадрата и прямоугольника Написать функцию вычисляющую площадь прямоугольника Вычислить периметр P и площадь S прямоугольника со сторонами, параллельными осям координат Посчитать периметр и площадь прямоугольника Известны координаты вершин прямоугольника ABCD , A(x1,y1), B(x2,y2), C(x3,y3). Найти площадь и периметр прямоугольника. Ввести площадь и периметр прямоугольника. Вывести длины сторон этого прямоугольника Пользователь водит прямоугольника площадь и периметр. Надо… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 2 |
If I have two points (51.9925734, 5.65038093), (51.99226769, 5.64991222)
I want to get the rectangle earth area.
I tried this method from other resources:
from area import area
obj_field = {'type':'Polygon','coordinates':[[[51.9925734,5.65038093],
[51.9925734,5.64991222],
[51.99226769,5.64991222],
[51.99226769,5.65038093]]]}
field_area_2 = area(obj_field)
print(f'The total field area is: {field_area_2} square meters')
The total field area is: 1767.018812772391 square meters
But I’m not sure if it is correct.
Для небольших областей, таких как ваш пример, самый простой подход — преобразовать координаты широты и долготы в UTM. Затем вы можете использовать простую математику, например, вычислить площадь прямоугольника, как в этом фрагменте:
import utm
a_geo = 51.9925734, 5.65038093
b_geo = 51.99226769, 5.64991222
# Convert lat, lon to utm
a_easting, a_northing, zone, _ = utm.from_latlon(*a_geo)
b_easting, b_northing, _, _ = utm.from_latlon(*b_geo, force_zone_number=zone)
area = abs((a_easting - b_easting) * (a_northing - b_northing))
Найти площадь прямоугольника, треугольника или круга
В зависимости от того, что выберет пользователь, вычислить площадь либо прямоугольника, либо треугольника, либо круга. Если выбраны прямоугольник или треугольник, то надо запросить длины сторон, если круг, то его радиус.
Решение задачи на языке программирования Python
Площадь треугольника вычисляется по формуле Герона:
, где p — это полупериметр, a, b, c — длины сторон. Полупериметр равен половине периметра, то есть половине суммы сторон.
Площадь прямоугольника равна произведению его двух сторон (длины и ширины). Площадь круга вычисляется по формуле S = πr2.
from math import sqrt, pi print("1-прямоугольник, 2-треугольник, 3-круг") figure = input("Выберите фигуру: ") if figure == '1': print("Длины сторон прямоугольника:") a = float(input("a = ")) b = float(input("b = ")) print("Площадь: %.2f" % (a * b)) elif figure == '2': print("Длины сторон треугольника:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) p = (a + b + c) / 2 s = sqrt(p * (p - a) * (p - b) * (p - c)) print("Площадь: %.2f" % s) elif figure == '3': r = float(input("Радиус круга R = ")) print("Площадь: %.2f" % (pi * r ** 2)) else: print("Ошибка ввода")
Пример выполнение программы:
1-прямоугольник, 2-треугольник, 3-круг Выберите фигуру: 2 Длины сторон треугольника: a = 4 b = 5 c = 6 Площадь: 9.92
Начиная с версии 3.10, в Python имеется оператор match
. Вариант решения задачи с его помощью будет выглядеть так:
from math import sqrt, pi print("1-прямоугольник, 2-треугольник, 3-круг") figure = input("Выберите фигуру: ") match figure: case '1': print("Длины сторон прямоугольника:") a = float(input("a = ")) b = float(input("b = ")) print("Площадь: %.2f" % (a * b)) case '2': print("Длины сторон треугольника:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) p = (a + b + c) / 2 s = sqrt(p * (p - a) * (p - b) * (p - c)) print("Площадь: %.2f" % s) case '3': r = float(input("Радиус круга R = ")) print("Площадь: %.2f" % (pi * r ** 2)) case _: print("Ошибка ввода")
Больше задач в PDF