【发布时间】:2016-03-19 21:44:49
【问题描述】:
我尝试画粗Bezier lines(用于自定义Sankey diagram)。
我使用SVG Paths,贝塞尔曲线的形式为C x1 y1, x2 y2, x y。我使用stroke 而不是fill,因此它们具有恒定的宽度(并且可以表示流)。
如果线条很细或垂直差异相对较小,它会很好地工作。但是,如果它们很厚,我会得到一些令人讨厌的伪影(看起来像牛角) - 请参见下图中右下角的曲线:
来源:http://jsfiddle.net/stared/83jr5fub/
有没有办法避免工件,即:
- 确保
x1左侧或x右侧没有任何内容, - 左右实际宽度匹配
stroke-width?
【问题讨论】:
-
我个人没有得到任何文物。您是否尝试过其他浏览器或机器?
-
@MonicaOlejniczak 你的意思是在 JSFiddle 上?上面是一个屏幕截图(我所说的人工制品是指“角”。)在浏览方面——我在 Chrome、Firefox 和 Safari 上看起来是一样的。
-
也许这个小提琴会让发生的事情更清楚:jsfiddle.net/83jr5fub/2
-
@Kaiido 我知道发生了什么(但非常感谢这个例子 - 条纹使它清晰可见!)。我的问题是如何避免这种行为;我确实尝试使用
fill形状,但它们的宽度明显不均匀(尽管可能进行一些调整会有所帮助)。使用stroke- 我想也许一些面具会有所帮助。 -
转储可能但未经测试的解决方案:
stroke-linecap: rect但这会在路径的起点和终点添加笔画宽度。做一个封闭的路径并填充它。确保你的笔画宽度永远不会超过角度......我不知道如何清楚地说,但只要确保这个小提琴中的破折号永远不会崩溃:@ 987654327@ 这几乎就是我能想到的全部。我认为面具不会有帮助,因为我认为你也需要封闭路径。