javascript - SVG 线端不相交

标签 javascript svg antialiasing polyline

我的问题很简单。 我有两点,我想在它们之间画一条线。该线必须分成相同尺寸的两个部分。 遗憾的是,两端没有在两点之间的中间相互连接。留下一像素间隙。

这个间隙是由抗锯齿造成的。两个元素的半不透明边框“加起来”形成白色间隙。

通过 svg 属性“shape-rendering="crispEdges"”,我可以关闭抗锯齿功能,从而消除元素之间的间隙,但线条只是“丑陋”,如下所示: http://jsfiddle.net/GsczH/

       <polyline id="line2-part2" stroke="#225788" stroke-width="16" fill="none" points="678.5,124.5 498.5,137.5"/>
       <polyline id="line2-part1" stroke="#0064FF" stroke-width="16" fill="none" points="318.5,150.5 498.5,137.5"/>

这些是当前实现的线路对象。除了它们之间的间隙之外,它们工作得很好。

到目前为止我尝试过的解决方案:

-舍入中点以使线条重叠,但首先线条不再完全笔直,即使我可以解决这个问题,抗锯齿现在也会增加颜色,从而导致重叠像素上出现“凹凸” 。 (如果你想明白我的意思,请尝试使用水平线)

-用多边形替换线条,这可以工作,但我无法使 Angular 点计算足够精确

我目前能想到的最简单/最好的解决方案是让线条对象停止“添加”为白色。简而言之,目前是灰色+灰色=白色,但我想要灰色+灰色=黑色。但我不知道是否可以让他们这样做或不这样做。

希望你能帮我想出一些办法。 提前致谢!

最佳答案

尝试在线条中添加方形线帽。这会将线条在末端稍微拉伸(stretch)到通常对线条“应该”结束的位置更直观的位置。

   <polyline id="line2-part2" stroke-linecap="square" stroke="#225788" stroke-width="16" fill="none"  points="678.5,124.5 498.5,137.5"/>
   <polyline id="line2-part1" stroke-linecap="square" stroke="#0064FF" stroke-width="16" fill="none"  points="318.5,150.5 498.5,137.5"/>

关于javascript - SVG 线端不相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673611/

相关文章:

javascript - CSS 两个最小高度值,以较大者为准

d3.js - D3,tooltip位置,应用viewBox时

css - SVG图标继承文本颜色和大小

java - LibGDX 抗锯齿

linux - 指数频率轴的 FFTW

c++ - 如何在 Qt/hook QPainter 中渲染没有抗锯齿的 SVG 以避免抗锯齿?

javascript - 如何在点击时显示警报/弹出窗口?

javascript - 无法使用 Papa Parse 硬编码文件目录以进行 CSV 解析

javascript - 无法从动态加载的脚本中读取 DOM 属性

javascript - 将 SVG 汉堡包图标旋转成 X?