Как получить путь кривых Безье с координатами десятичного значения
Мне нужно получить путь некоторой векторной фигуры, которая преобразуется в кривые Безье. У меня есть 512x512 px холст с 350x350 px буквой "R" в середине. Мне нужно как-то экспортировать координаты точек кривых Безье.
Итак, у меня есть тот холст с координатами от 0,0 до 511 511 и некоторой формой в нем. Но, когда я сохраняю его как *.svg в пути, например (M 256.124 373.811 l-85.544 -46.3289 c -21.8516,33.0922 -34.017,54.9238).
Я понимаю, что система координат SVG отличается от картезианской системы. Что действительные числа близки к разыскиваемым десятичным числам, но почему существуют отрицательные числа?
Но мне нужны координаты пикселей в десятичном формате и в диапазоне от 0,0 до 511511. Например (M 256 377 C 23 532 123 43 123 352)
Есть ли способ получить такой путь?
1 ответ
Я уже расшифровал путь в.svg из CorelDraw.
Во-первых, Corel и большинство графических редакторов имеют картезианскую систему координат (точка [0,0] находится в левом нижнем углу). С другой стороны, SVG имеет другую систему с начальной точкой в верхнем левом углу. Исходя из этого, когда у меня есть холст размером 512x512 px и наведен на него курсор мыши, я вижу координаты точки, например, [128,312] в пути SVG, это будет точка [128,200]. Смотрите фотографии ниже.
Далее путь продолжается L-89,8385 -46,3289 C-22,9477,33,0922 -35,7249,54,9238 -38,4096,65,4971. Это означает "Линия-точка", которая на 89,84 пикселей меньше по оси X и 46,33 пикселей меньше по оси Y. Таким образом, вы в основном вычитаете эти числа из координат текущей последней точки.
Наконец, C означает кривую в точности кубическую кривую Безье. Это довольно странно. -22,9477,33,0922 означает -22,95 пикселей по оси X и +33,09 пикселей по оси Y для контрольной точки 1. Как уже упоминалось, она вычисляется из последней точки на последней кривой. Следующая -35,7249,54,9238 - для контрольной точки 2, также рассчитанной из последней точки последней кривой, а не из контрольной точки 1!! И, наконец, -38,4096,65,4971 принадлежит конечной точке кривой тока. Может быть, вы заметили, что начальная точка кривой не упоминается. Начальная точка - это, конечно, конечная точка последней кривой / линии /...
До самого конца вы можете увидеть что-то подобное в SVG-пути -1,95237,7,5638 -6,18545,13,9241 -12,7772,19,0808 -6,59057,5,07167 -11,3103,7,65002. Это следующие кривые. Там нет буквы, как L,C,M или любой другой, но это кривые, потому что там был C и нет другой буквы в этой точке. Затем вам нужно получить 3 числа, например -1,95237,7,5638, чтобы получить следующую контрольную точку 1, контрольную точку 2 и конечную точку.
Надеюсь, это кому-нибудь поможет.