Граница маски массива задается полярным уравнением

#python #mask

#python #маска

Вопрос:

У меня есть следующее полярное уравнение: r(theta) = R a*Sin(n*theta) которое создает такой график (для которого я использовал R=1 , a=0.1 , и n=5 ):

введите описание изображения здесь

Я хочу получить 2D-декартов массив, который находится 0 внутри этой границы и 1 за ее пределами (красные метки).

Кто-нибудь знает «элегантный» и простой способ сделать это?

Мои попытки до сих пор (и продолжаются) просто пытаются преобразовать полярную сетку в декартову сетку…

Комментарии:

1. Вам действительно нужен массив? Вы всегда можете просто вычислить, находится ли какая-либо данная точка внутри или за пределами периметра на лету. Должна работать простая функция сравнения.

2. Да, мне нужен массив для вычисления. Но, может быть, я могу сначала выполнить функцию сравнения, как вы предлагаете, а затем построить из нее массив?

Ответ №1:

Какую бы форму ни принимал ваш массив, значение каждого местоположения — это просто проверка на функциональное значение:

 import math

def array_val(x, y):
    # Compute the function value for the proper angle;
    # Compare to the actual radius; return 0 or 1

    theta = math.atan(y/x)    # Adjust for proper quadrant
    r = math.sqrt(x*x   y*y)
    return int(r <= (R   a * math.sin(5 * theta)))