path.getPointAtLength()
подходит для грубых целей, когда вам не нужна скорость и качество. Если вы получаете каждый пиксель, вы получаете тысячи точек, но качество по-прежнему низкое, потому что путь SVG может иметь десятичные значения, например. 0,1, 0,2.
Если вы хотите получить более точную информацию, позвоните, например. path.getPointAtLength(0.1)
вы получаете легко десятки тысяч точек в сложных дорожках и в течение последних секунд или десятков секунд. И после этого вам нужно уменьшить счетчик точки (https://stackoverflow.com/a/15976155/1691517), который длится снова секунды. Но все же качество может быть низким, если неправильные точки удалены.
Лучшая техника - сначала преобразовать все сегменты пути в кубические кривые, например. используя Raphael's path2curve(), а затем используйте некоторый адаптивный метод (http://antigrain.com/research/adaptive_bezier/), чтобы преобразовать кубические сегменты в точки и одновременно получить как скорость, так и качество. И после этого нет необходимости сокращать точки, потому что сам адаптивный процесс имеет параметры для настройки качества.
Я сделал функцию, которая делает все это, и я собираюсь опубликовать ее, когда она достаточно оптимизирована для скорости. Качество и надежность, по-видимому, на 100% после тестирования с тысячами случайных путей, и скорость еще значительно быстрее, чем с path.getPointAtLength()
.
Я бы поспорил, что вам нужно определить, когда изменяется одно из значений x или y со времени последней итерации, что означает, что направление изменилось. Только тогда вы должны это понять. – Ian
, который уменьшает количество очков, но все равно около 1000 баллов. Мне нужно 6. – aushilfe444
Могли бы вы предоставить jsFiddle с SVG и этим кодом? – Ian