Graphics 使用画布或sonic.js格式的bezier曲线跟踪简单对象

Graphics 使用画布或sonic.js格式的bezier曲线跟踪简单对象,graphics,bezier,Graphics,Bezier,我想用圆弧和贝塞尔曲线来描绘一个简单物体的轮廓。使用Photoshop/pen工具很容易,但我需要以下格式的曲线实际坐标: ['bezier', startX, startY, endX, endY, cp1x, cp1y, cp2x, cp2y] ['arc', cx, cy, radius, startDegree, endDegree] 有没有一个应用程序可以让这变得简单?因为仅仅通过反复试验来处理这些输入是非常不直观的。以下是我希望能够追踪的样本: 对于任何需要能够做到这一点的人,我可

我想用圆弧和贝塞尔曲线来描绘一个简单物体的轮廓。使用Photoshop/pen工具很容易,但我需要以下格式的曲线实际坐标:

['bezier', startX, startY, endX, endY, cp1x, cp1y, cp2x, cp2y]
['arc', cx, cy, radius, startDegree, endDegree]
有没有一个应用程序可以让这变得简单?因为仅仅通过反复试验来处理这些输入是非常不直观的。以下是我希望能够追踪的样本:


对于任何需要能够做到这一点的人,我可以通过首先使用曲线在inkscape中绘制曲线来获得sonic.js格式的曲线。然后,我可以在Inkscape中使用XML编辑器EDIT>XML编辑器来复制描述曲线的路径的svg“d=”属性。接下来,我使用html5画布代码ctx.bezierCurveTo格式。我将相关行保存到一个文本文件中,并编写了这个bash脚本来将canvas代码转换为sonic.js路径。用法convert.sh data.txt。音速输出效果很好。以下是最终结果:


你的输入是什么?一个jpg格式的超声波探头的形状。你能举个例子吗?添加了一个样本图像。这个。。。这看起来不像是一个编程问题,询问在获得程序可用数据之前的过程。您是在询问如何在代码中执行此操作,还是手动执行此操作?因为您自己的答案表明您是手动操作的,这使得Stackoverflow和图形或插图板的主题完全不同。一旦你有了数据,转换就变得很简单,所以这似乎根本不是你问题的一部分,相反,你似乎在问如何进行跟踪,而这不是为什么。
#!/bin/bash
round() {
        float=$1
        echo "($float+0.5)/1" | bc
}
INDEX=1
while IFS='' read -r rawline || [[ -n "$rawline" ]]; do
line=$(echo $rawline | cut -d "(" -f2 | cut -d ")" -f1)
if [ $INDEX -eq 1 ];
then
        STARTX=$( round $(echo $line | cut -d',' -f1) )
        STARTY=$( round $(echo $line | cut -d',' -f2) )
        INDEX=2
else
        CP1X=$( round $(echo $line | cut -d',' -f1) )
        CP1Y=$( round $(echo $line | cut -d',' -f2))
        CP2X=$( round $(echo $line | cut -d',' -f3))
        CP2Y=$( round $(echo $line | cut -d',' -f4))
        ENDX=$( round $(echo $line | cut -d',' -f5))
        ENDY=$( round $(echo $line | cut -d',' -f6))
        echo "['bezier', $STARTX, $STARTY, $ENDX, $ENDY, $CP1X, $CP1Y, $CP2X, $CP2Y],"
        STARTX=$ENDX
        STARTY=$ENDY
fi
done < "$1"