使用贝塞尔曲线在2个点之间绘制椭圆弧

时间:2017-08-01 21:41:41

标签: matlab math svg

我需要一条贝塞尔曲线来平滑地连接两条任意线的终点。这些线都是垂直的或平行的。通过"顺利"我的意思是我希望曲线在终点处的切线与线具有相同的斜率。

我将使用MatLab(实际上是Octave)为svg编写xml。所以我需要一个公式来根据端点的位置输出贝塞尔曲线控制点的位置。

任何帮助?

1 个答案:

答案 0 :(得分:0)

如果线条平行但移位,则无法绘制单个弧线以平滑连接它们,因此立方贝塞尔曲线(可以具有S形式)更合适。

假设我们具有单位方向矢量T0的第一端点P0和单位方向矢量T3的第二端点P3。三次贝塞尔曲线的控制点位于线延续线上。为了使曲线平滑,我们应该从端点选择控制点的距离。经验值约为端点之间距离的一半。方法也适用于垂直线。

 Dist = Sqrt((P0.X - P3.X)^2 + (P0.Y - P3.Y)^2)
 Control1.X = P0.X + T0.X *  Dist / 2
 Control1.Y = P0.Y + T0.Y *  Dist / 2
 Control2.X = P3.X - T3.X *  Dist / 2    //account for T3 direction here
 Control2.Y = P3.Y - T3.Y *  Dist / 2

使用所述方法生成的曲线示例:

enter image description here