Использование кривой Безье для рисования спирали

Это для приложения для iPad, но по сути это математический вопрос.

Мне нужно нарисовать дугу окружности с различной (монотонно увеличивающейся )шириной линии. В начале кривой она будет иметь начальную толщину (, скажем, 2 pts ), а затем толщина будет плавно увеличиваться до конца дуги, где она будет иметь наибольшую толщину (, скажем, 12 pts ).

Я полагаю, что лучший способ сделать это — создать UIBezierPath и заполнить форму. Моя первая попытка состояла в том, чтобы использовать две дуги окружности (со смещенными центрами ), и это работало нормально до 90°, но дуга часто будет между 90° и 180°, так что такой подход не будет резать.

example of 90 degree arc with increasing thickness

Мой текущий подход состоит в том, чтобы сделать небольшую спираль (, одну слегка растущую из дуги окружности, а другую слегка сужающуюся ), используя квадратные или кубические кривые Безье. Вопрос в том, где мне разместить контрольные точки , чтобы отклонение от дуги окружности (, также известное как «толщина» формы ), было значением, которое я хочу.

Ограничения:

  • Форма должна иметь возможность начинаться и заканчиваться под произвольным углом (в пределах 180° друг от друга )
  • . "Толщина" формы (отклонение от круга )должно начинаться и заканчиваться заданными значениями
  • «Толщина» должна монотонно увеличиваться (, она не может увеличиваться, а затем снова уменьшаться )
  • . На вид он должен быть гладким, резких изгибов быть не может

Я открыт и для других решений.

6
задан Jon Hull 7 July 2012 в 20:04
поделиться