Canvas 如何用十进制坐标求Bezier曲线的路径

Canvas 如何用十进制坐标求Bezier曲线的路径,canvas,graphics,coordinates,bezier,coreldraw,Canvas,Graphics,Coordinates,Bezier,Coreldraw,我需要得到一些向量形状的路径,它被转换成贝塞尔曲线。我有一个512x512px帆布,中间有350x350 px字母“r”。我需要导出贝塞尔曲线点的坐标 我有一张画布,坐标从0,0到511511,还有一些形状。但是,当我在路径中将其保存为*.svg时,例如(M 256.124 373.811 l-85.544-46.3289 c-21.8516,33.0922-34.017,54.9238) 我知道svg坐标系不同于carthesian坐标系。实数接近想要的十进制数,但为什么会有负数 但我需要十进

我需要得到一些向量形状的路径,它被转换成贝塞尔曲线。我有一个512x512px帆布,中间有350x350 px字母“r”。我需要导出贝塞尔曲线点的坐标

我有一张画布,坐标从0,0到511511,还有一些形状。但是,当我在路径中将其保存为*.svg时,例如(M 256.124 373.811 l-85.544-46.3289 c-21.8516,33.0922-34.017,54.9238)

我知道svg坐标系不同于carthesian坐标系。实数接近想要的十进制数,但为什么会有负数

但我需要十进制格式的像素坐标,从0,0到511511。 例如(M 256 377 C 23 532 123 43 123 352)


有没有办法获得这样的路径?

我已经从CorelDraw中解码了.svg中的路径

首先,Corel和大多数图形编辑器都有carthesian坐标系(点[0,0]位于左下角)。另一方面,SVG有不同的系统,起点在左上角。由此可知,当我使用大小为512x512 px的画布并将鼠标放在画布上时,我会看到一个点坐标,例如SVG路径中的[128312],它将是点[128200]。请看下面的图片

接下来,路径继续是L-898385-463289 C-22947330922-357249,549238-384096,654971。 该平均线到点,在x轴上小89.84 px,在y轴上小46.33 px。所以你基本上是从当前最后一点的坐标中扣除这些数字

最后,C均值曲线到,正是三次贝塞尔曲线。这很奇怪-229477,330922表示控制点1 x轴上的-22.95 px和y轴上的+33.09 px。如前所述,它是从最后一条曲线上的最后一点开始计算的。下一步-357249,549238用于控制点2,也从最后一条曲线的最后一点计算而不是从控制点1最后-384096,654971属于当前曲线的端点。 也许你们注意到曲线的起点并没有被提及。起点当然是最后一条曲线/直线/的终点

最后,您可以在SVG路径-195237,75638-618545,139241-127772,190808-659057,507167-113103,765002中看到类似的内容。这些是下一条曲线。没有字母L,C,M或其他任何字母,但这些都是曲线,因为这里有C,没有其他字母。然后你需要得到3个数字,比如-195237,75638,才能得到下一个控制点1,控制点2和终点


希望这会对某些人有所帮助。

贝塞尔曲线上的第一个点和最后一个点将始终位于曲线上,但中间控制点可能远离曲线。中间控制点“影响”曲线,而不是位于曲线上。因此,您可以很容易地看到512x512坐标以外的控制点。没问题。