【问题标题】:How to programmatically determine which geometric shape a svg path belongs to?如何以编程方式确定 svg 路径属于哪个几何形状?
【发布时间】:2019-12-28 08:05:01
【问题描述】:

我在 SVG 文件中有带有 d 属性的路径,其值类似于

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink"  width="300" height="300" viewBox="0 0 100 100" style="border:1px solid red" >  
<path stroke="black" fill="red" d="M 48.75521890547264 45.77014427860697 Q 48.756218905472636 45.77114427860697 50.24875621890547 45.77114427860697 Q 51.74129353233831 45.77114427860697 55.72139303482587 46.26865671641791 Q 59.701492537313435 46.766169154228855 64.17910447761194 46.766169154228855 Q 68.65671641791045 46.766169154228855 73.6318407960199 47.2636815920398 Q 78.60696517412936 47.76119402985075 82.08955223880596 47.76119402985075 Q 85.57213930348259 47.76119402985075 88.55721393034827z" />
</svg>

等等

我想以编程方式将此路径分类为圆形、矩形、椭圆等几何形状。当我的意思是以编程方式时,我的意思是不应该涉及图像处理技术,即严格要求。有没有办法做到这一点?

【问题讨论】:

    标签: svg vector-graphics flowchart


    【解决方案1】:

    从您使用的示例代码中可以看出Quadratic Bezier Curves。使用贝塞尔曲线的曲线通常不用手动编写。
    在任何矢量编辑器中更容易做到这一点,或者使用在线贝塞尔曲线生成器。

    例如this 生成器:

    更详细的,所有用于创建path 和贝塞尔曲线的命令的含义可以研究here

    更新

    documentation 的引述解释了构造二次贝塞尔曲线的原理

    另一种类型的贝塞尔曲线,用 Q 称为二次曲线,是 实际上是比三次曲线更简单的曲线。它需要一个控件 决定曲线在两个起点的斜率的点 和终点。它有两个参数:控制点和 曲线的终点。请注意,q 的坐标增量是 都相对于前一点(即 dx 和 dy 不是 相对于 dx1 和 dy1)。

    Q x1 y1, x y (or q dx1 dy1, dx dy)

    <svg width="190" height="160" xmlns="http://www.w3.org/2000/svg">
      <path d="M 10 80 Q 95 10 180 80" stroke="black" fill="transparent"/>
    </svg>

    【讨论】:

    • 我不确定这是否真的回答了所提出的问题。
    • @RobertLongson 那么在这种情况下,请给出你对如何将贝塞尔曲线分解为几何图形的问题的答案
    • @RobertLongson 也许你在形式上是对的,但我看到在贝塞尔曲线的研究和构建中需要给用户正确的方向
    猜你喜欢
    • 2016-08-20
    • 2013-02-18
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多