#python #numpy
#python #numpy
Вопрос:
Проблема: существует координатная сетка точек данных, их необходимо отфильтровать по определенной изогнутой области.
Решение:
-
Как определяется область?
-
В сетке вам задается определенная точка (A) на этой сетке и угол от этой точки (определяется по отношению к сетке)
-
Вам также будет задана целевая точка (B) в сетке
-
Нарисуйте 2 окружности с разными определенными радиусами из точки (A)
-
Отметьте область, ограниченную 45 градусами с любой стороны от заданного угла
-
Оцените каждую точку на сетке, чтобы увидеть, попадает ли она в область, ограниченную 2 кругами и 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.
Комментарии:
1. Я думаю, было бы очень полезно прикрепить здесь изображение. И некоторые примеры данных для воспроизведения.
Ответ №1:
Вы действительно должны использовать np.arctan2
, потому что в противном случае он не сможет различать входные данные с разными знаками. Например np.arctan(1 / 2)
, это то же np.arctan(-1 / -2)
самое, что и потому, что аргумент один и тот же. По этим причинам вы сохраните как (-,-)
квадрант, так и ( , )
квадрант. Для np.arctan2
вас просто передайте обе координаты как отдельные аргументы, чтобы алгоритм мог вычислить квадрант по знаку двух аргументов. Следовательно, вы должны вычислить следующее:
Theta_punto = np.arctan2((y-y_pala), (x-x_pala))
Комментарии:
1. спасибо, это разъяснение было именно тем, что я искал!, оно отлично решило мою проблему
2. @noble_gasses Если это решило вашу проблему, пожалуйста, подумайте о принятии этого ответа, чтобы вопрос был отмечен соответствующим образом.