# 📐 构造二次贝塞尔曲线:轻松实现节点间的优雅连线

在开发思维导图或树状结构应用时,如何优雅地连接节点并绘制平滑的线条


# ✨ 贝塞尔曲线简介

贝塞尔曲线是一种用于生成平滑曲线的数学工具 。它广泛应用于图形设计、动画、UI 开发等领域。贝塞尔曲线的特点是可以通过控制点来调整曲线的形状,从而生成各种平滑的路径。
多个贝塞尔曲线的组合可以生成各种复杂的曲线,如圆弧、曲线、贝塞尔曲线等。
一次贝塞尔曲线的公式是: B(t) = (1 - t) * P₀ + t * P₁

# 二次贝塞尔曲线

二次贝塞尔曲线是最简单的贝塞尔曲线类型之一,它由以下三个点定义:

  • 起点 (P₀):曲线的起始点。
  • 控制点 (P₁):决定曲线的弯曲方向和程度。
  • 终点 (P₂):曲线的结束点。
    通过这三个点,我们可以构造出一条平滑的曲线。其公式如下:
    B(t) = (1 - t) ^ 2 * P₀ + 2 * t * (1 - t) * P₁ + t ^ 2 * P₂ t ∈ [0, 1]

# 🛠 使用二次贝塞尔曲线连接节点

这里采用 react-konva 中的 Shape 组件来绘制二次贝塞尔曲线。 Shape 提供了一个 sceneFunc 属性,允许我们直接操作 Canvas 上下文

<Shape
    sceneFunc={(ctx, shape) => {
        ctx.beginPath();
        ctx.moveTo(startX, startY); // 移动到起点
        ctx.quadraticCurveTo(
            startX,   // 控制点 X 坐标
            endY,     // 控制点 Y 坐标
            endX,     // 终点 X 坐标
            endY      // 终点 Y 坐标
        );
        ctx.fillStrokeShape(shape); // 应用填充和描边
    }}
    stroke="blue"       // 线条颜色
    strokeWidth={2}     // 线条宽度
/>

# 📚 参考资料 (多次也可以参考如下)

  • konva 官方文档