#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)))