Я боролся несколько часов, но ничего не получалось. Наконец мне удалось запустить AppleScript через оболочку:
let proc = Process()
proc.launchPath = "/usr/bin/env"
proc.arguments = ["/usr/bin/osascript", "scriptPath"]
proc.launch()
Не знаю, это лучший способ сделать это, но, по крайней мере, это работает.
Для квадратичного Безье это на самом деле довольно просто.
Определите ваши три контрольные точки как 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
(если найден). Эта ограничивающая рамка также будет жестко ограничивать вашу двумерную квадратичную кривую Безье.
Исчисление дает стандартный набор приемов для нахождения минимума / максимума непрерывных дифференцируемых кривых.
Вот пример обсуждения:
http://newsgroups.derkeiler.com/Archive/Comp/comp.graphics.algorithms/2005-07/msg00334.html