функция numpy arctan зеркальный угол

#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 Если это решило вашу проблему, пожалуйста, подумайте о принятии этого ответа, чтобы вопрос был отмечен соответствующим образом.