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

Проблема: есть координатная сетка точек данных, их нужно отфильтровать в конкретную, кривую область.

Решение:

  • Как определяется площадь?

    • В сетке вам дается определенная точка (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.

Я думаю, было бы очень полезно прикрепить изображение здесь. И некоторые примеры данных для игры.

Mad Physicist 08.04.2019 21:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
145
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы действительно должны использовать np.arctan2, потому что иначе он не сможет различать ввод с разным знаком. Например, np.arctan(1 / 2) совпадает с np.arctan(-1 / -2), потому что аргумент тот же. По этой причине вы сохраните как квадрант (-,-), так и квадрант (+,+). Для np.arctan2 вы просто передаете обе координаты как отдельные аргументы, чтобы алгоритм мог вычислить квадрант по знаку двух аргументов. Следовательно, вы должны вычислить следующее:

Theta_punto = np.arctan2((y-y_pala), (x-x_pala))

спасибо, это разъяснение было именно тем, что я искал!, оно отлично решило мою проблему

noble_gasses 09.04.2019 14:41

@noble_gasses Если это решило вашу проблему, рассмотрите возможность принятия этого ответа, чтобы вопрос был помечен соответствующим образом.

a_guest 09.04.2019 17:52

Другие вопросы по теме