Нахождение минуты / макс. из квадратичного bezier с CoreGraphics

Я боролся несколько часов, но ничего не получалось. Наконец мне удалось запустить AppleScript через оболочку:

let proc = Process()
proc.launchPath = "/usr/bin/env"
proc.arguments = ["/usr/bin/osascript", "scriptPath"]
proc.launch()

Не знаю, это лучший способ сделать это, но, по крайней мере, это работает.

7
задан Peter Hosey 1 October 2009 в 05:14
поделиться

2 ответа

Для квадратичного Безье это на самом деле довольно просто.

Определите ваши три контрольные точки как P0 = (x0, y0) , P1 = ( x1, y1) и P2 = (x2, y2) . Чтобы найти экстремумы в x , решите это уравнение:

t = (x0 - x1) / (x0 - 2*x1 + x2)

Если 0 <= t <= 1 , тогда оцените свою кривую при t и сохраните местоположение как Px . Сделайте то же самое для y :

t = (y0 - y1) / (y0 - 2*y1 + y2)

Опять же, если 0 <= t <= 1 , оцените свою кривую на t и сохраните местоположение как Py . Наконец, найдите выровненный по оси ограничивающий прямоугольник, содержащий P0 , P2 , Px (если найден) и Py (если найден). Эта ограничивающая рамка также будет жестко ограничивать вашу двумерную квадратичную кривую Безье.

5
ответ дан 7 December 2019 в 05:27
поделиться

Исчисление дает стандартный набор приемов для нахождения минимума / максимума непрерывных дифференцируемых кривых.

Вот пример обсуждения:

http://newsgroups.derkeiler.com/Archive/Comp/comp.graphics.algorithms/2005-07/msg00334.html

2
ответ дан 7 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: