Python svg路径上的采样点
给定一个SVG(包含一个path对象),我想将路径划分为n个等长的段。返回的值应该是光栅化svg中的(n+1)点(x,y)坐标列表,指示每个段的端点 例如: 给定SVG:(此示例只有直线,但解决方案必须适用于所有类型的路径,包括三次和二次贝塞尔)Python svg路径上的采样点,python,svg,vector-graphics,Python,Svg,Vector Graphics,给定一个SVG(包含一个path对象),我想将路径划分为n个等长的段。返回的值应该是光栅化svg中的(n+1)点(x,y)坐标列表,指示每个段的端点 例如: 给定SVG:(此示例只有直线,但解决方案必须适用于所有类型的路径,包括三次和二次贝塞尔) 呈现为 预期输出:以左下角为原点的每个红点的坐标。SVG始终以宽度=100px呈现 我正在使用python和svgpathtools,如何实现这一点 我的做法: 看看SVG光栅化器。看看他们是如何处理路径的。我看了一下,但遗憾的是,我无法理解代
呈现为
预期输出:以左下角为原点的每个红点的坐标。SVG始终以宽度=100px呈现
我正在使用python和svgpathtools
,如何实现这一点
我的做法:
笔划数组
<代码>笔划dasharray将自动将连续笔划“打断”为大小相等的段。然后将修改后的SVG光栅化,然后使用类似OpenCV的方法对渲染笔划进行聚类。然后找到这些簇的中点以得到答案。由于涉及多个缓慢的过程(光栅化+聚类),这种方法非常缓慢。如果路径与自身交叉(无穷符号),它也不是很灵活,因为笔划dasharray
也会相交,给出一个奇怪的交点stroke dasharray=“(0,N)”
stroke lineCap=“round”
getTotalLength()
JS方法获取SVG元素的完整行长度
正如您在控制台中看到的,结果是~=577.2px
假设我们需要将直线的长度分成11个相等的段:
577,2/11=52.47
在这种情况下,stroke dasharray=“0,52.47”
console.log(p1.getTotalLength()/11);
这似乎很有希望,在接受这一最终结果之前,我将尝试更多的SVGanswer@ashutoshbsathe感谢您的积极反馈。在繁忙的一周里,ideaHi@Alexandr_TT一直在运行,所以现在还不能彻底测试它,如果能为ideaHi@Alexandr_TT投票就好了。这似乎对我在这里发布的示例有效。我测试的其他示例(根本不起作用)是我公司的机密财产,我将尝试在其他没有版权的地方找到类似的图片并发布here@ashutoshbsathe我理解你。我将等待你的例子。我现在增加了新的例子。看这里please@ashutoshbsathe我将尝试在其他没有版权的地方找到类似的图像,并将其发布到此处
-您如何找到合适的路径?
<svg height="210" width="400">
<path d="M150 0 L75 200 L225 200 Z" fill="none" stroke="black" stroke-width="4" />
</svg>