当我们想要弯曲一条直线时,二次贝塞尔曲线是个不错的选择,但它往往不够灵活。使用三次贝塞尔曲线时,我们不仅有一个控制点,还有两个控制点。第一个控制点设定曲线的初始方向,第二个控制点定义曲线从哪个方向到达终点。
我们再来看一个例子,圆圈代表控制点。
<svg
width="200"
height="200"
viewBox="-100 -100 200 200"
>
<path
d="
M -50,50
C -60,-50 60,-50 50,50"
fill="none"
stroke="red"
/>
<circle
cx="-60"
cy="-50"
r="2"
/>
<circle
cx="60"
cy="-50"
r="2"
/>
</svg>
点击此处观看三次贝塞尔互动演示(在页面顶部选择三次贝塞尔)。
当我们想要延续一条直线的流向时,三次贝塞尔曲线是个不错的选择。如果控制点的方向与曲线前后直线的方向一致,那么我们就能在路径段之间实现平滑过渡。
在这个例子中,礼品盒的缎带使用了立方贝塞尔曲线,它平滑地延续了前一条直线,然后转回即将到来的直线方向。
<svg
width="200"
height="200"
viewBox="-100 -100 200 200"
>
<path
d="
M 0 0
L 30 0
C 50 0 50 -25 30 -15
L 0 0"
fill="none"
stroke="red"
/>
<circle cx="50" cy="0" r="2" />
<circle cx="50" cy="-20" r="2" />
</svg>
除了贝塞尔曲线之外,这幅图的其余部分主要是几个长方形和一个圆形。
<svg width="200" height="200" viewBox="-100 -100 200 200">
<circle cx="0" cy="-50" r="10" fill="#a9172a" />
<rect class="box" x="-60" y="-40" width="120" height="100" />
<rect class="box" x="-70" y="-47" width="140" height="20" />
<rect class="stripe" x="-20" y="-40" width="40" height="100" />
<rect class="stripe" x="-25" y="-47" width="50" height="20" />
<path
class="ribbon"
d="
M 0 -50
L 30 -50
C 50 -50 50 -70 30 -65
L 0 -50"
/>
<path
class="ribbon"
d="
M 0 -50
L -30 -50
C -50 -50 -50 -70 -30 -65
L 0 -50"
/>
</svg>
.gift .box {
fill: #d1495b;
stroke: black;
stroke-width: 2px;
}
.gift .stripe {
fill: white;
stroke: black;
stroke-width: 2px;
}
.gift .ribbon {
stroke: #b73a3b;
stroke-width: 4px;
fill: none;
}
分享: |