Расчет контрольных точек для сокращенного / гладкого пути SVG Кривая Безье - PullRequest
12 голосов
/ 13 марта 2011

Ссылка: Официальная ссылка на SVG

Здравствуйте, мужчины и женщины, у меня возникли проблемы с сокращенными (определяемыми S или s в pathdata) кривыми Безье, определенными как пути SVG.В частности, как рассчитать первую контрольную точку.

Скажем, у нас есть одна команда кривой к с контрольными точками (X1, Y1) и (X2, Y2), конечной точкой (X3, Y3) и начальной точкой (X0, Y0).

Затем следует команда сокращенной / плавной кривой с первой контрольной точкой (X4, Y4) и второй контрольной точкой (X5, Y5).Для простоты предположим, что все в абсолютных координатах.

Как можно вычислить неизвестную первую контрольную точку (X4, Y4) из других известных точек?

Ответы [ 2 ]

16 голосов
/ 13 марта 2011

Ваша первая точка - последняя точка предыдущей кривой.В этом случае это будет (х3, у3).Тогда ваша вторая точка в короткой руке - это конечная точка для длины кривой, которую представляет сокращение.

Если мы хотим перевести ваши пути в обе версии полной длины, у нас будет:

M X0, Y0 C X1, Y1 X2, Y2 X3, Y3 
M X3, Y3 C XR, YR X4, Y4 X5, Y5 

Где XR, YR - это отражение последней контрольной точки предыдущей кривой относительно первой точки текущей кривой.

XR, YR - это просто отражение P2 относительно P3, поэтому:

XR = 2*X3 - X2 and 
YR = 2*Y3 - Y2
0 голосов
/ 26 февраля 2012

вы можете рассматривать последнюю контрольную точку из последней кривой и конечную точку последней кривой (которая является первой точкой в ​​новой кривой) как линию, и зеркальная контрольная точка должна лежать на этой линии на расстоянииравно расстоянию от последней контрольной точки до последней конечной точки

...