2012-10-04 2 views
1

Путь, который я использую, не имеет кривых; просто ряд связанных точек.Каков наилучший способ получить длину NSBezierPath?

Метод, который я использую в настоящее время, включает итерацию через компоненты NZBezierPathElement пути и получение каждой точки, но это неуклюжие - особенно потому, что я должен сохранить последнюю точку, чтобы получить каждое новое расстояние. Если кто-то из вас знает лучший метод, это было бы очень оценено.

+0

Сохранение последней точки легко по сравнению с вычислением расстояния до следующей точки - особенно при использовании кривых. – Eiko

+0

Правда, но я не использую кривые. – chm

ответ

1

Ваш алгоритм звучит точно вправо - длина пути представляет собой сумму длин между каждой парой точек. Это трудно понять, почему вы думаете, что это «неуклюжий», так вот алгоритм в псевдокоде только в случае, если:

startPoint <- point[1] 
length <- 0 
repeat with n <- 2 to number of points 
    nextPoint <- point[n] 
    length <- length + distanceBetween(startPoint, nextPoint) 
    startPoint <- nextPoint // hardly clumsy 
end repeat 

Может быть, вы делаете это по-другому?

Понятие текущей точки является основополагающим для NSBezierPath (и SVG, графики черепах и т. Д.), С его относительными командами (например, перемещение относительно, относительное по отношению к линии) - его не избежать!

+0

Очень обнадеживающе, спасибо! Я просто подумал, что, возможно, была какая-то встроенная поддержка для этого, которую я отсутствовал. Ваш псевдокод - именно то, что я делал. – chm

Смежные вопросы