У полярного графопостроителя есть две осевые координаты: θ — поворот стола/руки, ρ — выдвижение инструмента от центра. Пишущий инструмент находится в точке
(ρ, θ). Стоит вспомнить связь декартовых и полярных координат (кстати, вы в школе такое проходили или только в ВУЗе?):Прямое преобразование:
x = ρ · cos(θ) и y = ρ · sin(θ)Обратное преобразование:
ρ = √(x² + y²) и θ = atan2(y, x)Центр вращения также может быть смещен от начала координат, но это легко задается сдвиговыми смещениями:
x' = x - x0 ; y' = y - y0 ; ρ = √(x'² + y'²) ; θ = atan2(y', x')Для реального плоттера важно:
ρ обычно ограничено: ρ_min ≤ ρ ≤ ρ_max , а вот угол θ может быть любым, если нет гибких проводов, которые начинают заматываться.Чтобы построить растровые изображения и портреты, нужна векторизация в декартовой плоскости, потом перевод в полярные.
Загрузить изображение → Перевести в grayscale → Выделить края: Canny, Sobel, Laplacian → Пороговая обработка → Скелетизация линий → Трассировка контуров → Упрощение ломаных: алгоритм Дугласа–Пекара → Расчет для каждой точки контура ( x, y):
ρ = √((x-x0)² + (y-y0)²) ; θ = atan2(y-y0, x-x0) → Отсортировать контуры, чтобы меньше двигаться без рисования → Сгенерировать G-код: поднять перо, перейти, опустить, вести линию.Для закрученного вокруг центра портрета:
for i = 0..N_θ:
θ = 2π · i / N_θ
for j = 0..N_ρ:
ρ = ρ_min + (ρ_max - ρ_min) · j / N_ρ
x = ρ · cos(θ)
y = ρ · sin(θ)
polar_image[i, j] = sample_image(x, y)
Получается изображение в координатах
(θ, ρ). Его можно векторизовать так же, как обычное, но затем каждая линия уже будет линией в полярных координатах. Главная математическая тонкость: прямая в декартовой системе не является прямой в полярных координатах. Поэтому для точных рисунков и портретов траекторию всегда сначала строят в декартовых координатах, разбивают на мелкие отрезки и только затем переводят каждую точку в
(ρ, θ). #математика #mathematics #animation #math #геометрия #geometry #gif График трохоиды
➰ Красота параметрических кривых
⭕️ Точки пересечения кругов на воде движутся по гиперболе
🕑 Экстремальная задача на смекалку
💡 Physics.Math.Code // @physics_lib