如何获得坐标为十进制值的Bezier曲线的路径

时间:2014-10-31 13:33:20

标签: canvas graphics coordinates bezier coreldraw

我需要获得一些矢量形状的路径,并将其转换为贝塞尔曲线。我有一个512x512像素的画布,中间有350x350像素的字母“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坐标系与carthesian系统不同。实数接近想要的十进制数,但为什么有负数

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

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

1 个答案:

答案 0 :(得分:0)

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

首先,Corel和大多数Graphic编辑器都有carthesian坐标系(点[0,0]在左下角)。另一方面,SVG有不同的系统,左上角有起点。从这里,当我有尺寸为512x512像素的画布并在其上放置鼠标时,我看到一个点坐标例如在SVG路径中为[128,312]它将是点[128,200]。见下面的图片。

Carthesian coordinate system SVG

接下来,路径继续L-89,8385-46,3289 C-22,9477,33,0922 -35,7249,54,9238 -38,4096,65,4971。 这意味着线到点,在x轴上小89.84像素,在y轴上小46.33像素。所以你基本上从当前最后一点的坐标中扣除了这些数字。

最后,C均值曲线到,恰好是立方Beziér曲线。这很奇怪。 -22,9477,33,0922表示x轴为-22.95 px,y轴为-33.09 px为控制点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和终点。

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