html - 如何使用 SVG 以编程方式绘制一个带圆角的三角形?
问题描述
我正在尝试使用 SVG 绘制三角形并使三角形的顶部或底部变圆。我可以绘制三角形,但不能在一点上应用圆角效果。
我有三角形向上的情况,所以我需要将顶点倒圆,而三角形倒置的情况,所以我需要将底部的点倒圆。我正在尝试使用q
,但我得到了奇怪的结果。
<p>Triangle</p>
<svg height="200" width="200" style="margin: 20px">
<path d="M69 10
q5,-2.5 -15,10
L10 100
L128 100
Z"
fill="LightBlue"
stroke="Blue"
stroke-width="15" />
</svg>
<svg height="200" width="200" style="margin: 20px">
<path d="M36 10
L10 50
L64 50
Z"
fill="LightBlue"
stroke="Blue"
stroke-width="10" />
</svg>
<p>Triangle upside down</p>
<svg height="220" width="200" style="margin: 20px">
<path
d="M 10 10
L 128 10
L 69 100
z"
fill="LightBlue"
stroke="Blue"
stroke-width="10" />
</svg>
<svg height="220" width="200" style="margin: 20px">
<path
d="M 10 10
L 64 10
L 36 50
q5,-2.5 -5,0
z"
fill="LightBlue"
stroke="Blue"
stroke-width="10" />
</svg>
如何使用 SVG 只舍入一点?
解决方案
有几种方法可以做到这一点,具体取决于您想要哪种曲线。最简单的方法可能是像您尝试的那样使用Q
/ 。q
通过计算沿该线段的位置来计算出曲线的端点。例如,在第二个 SVG 中,我选择了沿第一行 80% 的点(20,120 -> 70,20)。
x = x0 + 80% * (x1 - x0)
= 20 + 80% * (70 - 20)
= 60
y = y0 + 80% * (y1 - y0)
= 120 + 80% * (20 - 120)
= 120 + -80
= 40
离开弯角的线也是如此。除了,当然这一次它离角落只有 20% 的距离。
有了这两个点后,只需使用原始角点作为 Q 命令中的控制点(第一个坐标对)。
所以原来的角落
M 20,120
L 70,20
L 120,120
变成
M 20 120
L 60 40
Q 70 20 80 40
L 120 120
如下图第三个SVG所示。
<p>Triangle</p>
<svg height="200" width="200" style="margin: 20px">
<path d="M 20 120
L 70 20
L 120 120
Z"
fill="LightBlue"
stroke="Blue"
stroke-width="10" />
</svg>
<svg height="200" width="200" style="margin: 20px">
<path d="M 20 120
L 60 40
L 80 40
L 120 120
Z"
fill="LightBlue"
stroke="Blue"
stroke-width="10" />
</svg>
<svg height="200" width="200" style="margin: 20px">
<path d="M 20 120
L 60 40
Q 70 20 80 40
L 120 120
Z"
fill="LightBlue"
stroke="Blue"
stroke-width="10" />
</svg>
您可以通过将该线调整系数调整为大于或小于 80% 来更改拐角曲线的形状。
如果您在拐角处需要更精确的圆弧,那么您将需要改用A
ora
命令。
推荐阅读
- python - 如何在索引上应用剪切函数
- grails - 将只读数据库副本用于只读 GORM 方法和标准
- python - Python 和 Django ,
误差函数,问题出在哪里 - python - 在网络自动化(selenium + python)中,当运行没有无头工作正常但使用无头{chrome}的代码时,它会导航到意外页面
- c++ - 错误:没有 > 匹配调用 '(boost::_mfi::mf1
我对 c++ 有相当的基础知识,下面描述的一个问题可能相当简单,并且基于语法错误,但我还没有找到解决方法。基本上我得到的错误说:
remote_hw_interface_node.cpp:23:68: required from here /usr/include/boost/function/function_template.hpp:2
- python - 使用 BeautifulSoup 从 HTML 表中提取数据
- node.js - Docker 上的 Node.js + Puppeteer,没有可用的沙箱
- wordpress - 无法从联系表发送电子邮件
- javascript - XMLHttpRequest 格式问题
- reactjs - 在特定条件下通过单击表格展开一行 Ant Design table react js