рендеринг сглаженной спирали
-
25-09-2019 - |
Вопрос
Я посмотрел на Этот пример с использованием PHP и GD кусочно-рендерировать спираль с небольшими дугами. То, что я хотел бы сделать, это сделать приближение к спирали, которая является максимально точной точностью.
Inkscape имеет А. Спиральный инструмент Это выглядит довольно хорошо, но я хотел бы проделать стиральное поколение программно (желательно в Python).
Я не нашел никаких библиотек чертежей (например, CAIRO), в котором сопутствуют спиральные формы. Если кто-то хотел сделать идеальную антициальную спираль, лучше ли просто итеративным пикселем-пикселем через холст, определяющий, находится ли каждый пиксель в пределах математически определенной спиральной области рычага (конечной толщины)? В этом случае также придется реализовать логику против псевдонима с нуля. Вы бы интегрировали часть кривой, которая лежит в каждом коробке пикселей, затем преобразуйте соотношение заполнено в пустую область в альфа-значение?
В этом случае качество рендеринга важнее времени рендеринга. Однако, оценка интеграла на каждом пикселе поражает меня как довольно неэффективно.
Обновлять: Я верю, что вопрос, который я должен спросить, это Вот этот (для которых ответы Yahoo не удалось).
Решение
Разве не было бы легче нарисовать кривую (сплайн?) И просто генерируйте много контрольных точек? Таким образом, вы бы подобрали существующий сглаживающий двигатель.
Править]: первое приближение к этому (сделано с TCL / TK, но код должен быть легко конвертировать) дает мне это:
# Make the list of spiral coordinates
set coords {}
set theta 0; set r 10
set centerX 200; set centerY 150
# Go out 50 pixels per revolution
set pitch [expr {100.0 / 720.0}]
for {set i 0} {$i<720} {incr i} {
lappend coords [expr { $centerX + $r*sin($theta) }] \
[expr { $centerY + $r*cos($theta) }]
set r [expr { $r + $pitch }]
# Increment angle by one degree
set theta [expr { $theta + 3.1415927/180 }]
}
# Display as a spline
pack [canvas .c -width 400 -height 300]
.c create line $coords -tag spiral -smooth 1
Я не предпринял никаких усилий, чтобы быть эффективным в моем использовании контрольных точек.
Другие советы
Я не нашел никаких библиотек рисунков (например, CAIRO), которая в сопутствующей степени поддерживает спиральные формы
Нет, это довольно необычная особенность; Всего очень недавно, что рисунок со спиралями стал популярным.
Код Inkscape использует для этого Спиро. Отказ Это в основном Python, и может использовать Каир, чтобы сделать безер, что спирали аппроксимируются в.
Однако, оценка интеграла на каждом пикселе поражает меня как довольно неэффективно.
Да, в самом деле.