Проблема: есть координатная сетка точек данных, их нужно отфильтровать в конкретную, кривую область.
Решение:
Как определяется площадь?
В сетке вам дается определенная точка (A) на этой сетке и угол от этой точки (определяется по отношению к сетке)
Вам также дается целевая точка (B) в сетке.
Из точки (A) нарисуйте 2 круга разного радиуса.
Отметьте область, ограниченную 45 градусами по обе стороны от заданного угла
Оцените каждую точку на сетке, чтобы увидеть, попадает ли она в область, ограниченную двумя кругами и секцией под углом 90 градусов.
Проблема с моим решением: вместо фильтрации 1 области фильтруются 2 зеркальные области, что допускает неверные данные.
каждая точка на сетке оценивается функцией ниже, если она соответствует отфильтрованной области. Я изучил функцию arctan2, чтобы посмотреть, поможет ли она, но не понимаю ее. Полный обзор проблемы можно найти здесь
вот несколько уточняющих изображений:
Как это должно выглядеть, как этот код выглядит на практике, а также некоторые проверяемые данные
def pertenece(x,y,x_pala,y_pala,alpha):
#parametros R int y R ext
R_int = 17
R_ext = 25
#def thetas
Theta_min = (alpha - 45)*(180/m.pi)**-1
Theta_max = (alpha + 45)*(180/m.pi)**-1
#calc R punto y Theta punto
R_punto = ((x-x_pala)**2 + (y-y_pala)**2)**0.5
Theta_punto = np.arctan((y-y_pala)/(x-x_pala))
if (R_punto >= R_int and R_punto<=R_ext) and (Theta_punto >= Theta_min and Theta_punto<=Theta_max):
return True
else:
return False
как видно в документе должен быть отфильтрован только один квадрант, на практике их 2.
Вы действительно должны использовать np.arctan2
, потому что иначе он не сможет различать ввод с разным знаком. Например, np.arctan(1 / 2)
совпадает с np.arctan(-1 / -2)
, потому что аргумент тот же. По этой причине вы сохраните как квадрант (-,-)
, так и квадрант (+,+)
. Для np.arctan2
вы просто передаете обе координаты как отдельные аргументы, чтобы алгоритм мог вычислить квадрант по знаку двух аргументов. Следовательно, вы должны вычислить следующее:
Theta_punto = np.arctan2((y-y_pala), (x-x_pala))
спасибо, это разъяснение было именно тем, что я искал!, оно отлично решило мою проблему
@noble_gasses Если это решило вашу проблему, рассмотрите возможность принятия этого ответа, чтобы вопрос был помечен соответствующим образом.
Я думаю, было бы очень полезно прикрепить изображение здесь. И некоторые примеры данных для игры.