Matlab 使用bezier曲线在两点之间绘制椭圆弧

Matlab 使用bezier曲线在两点之间绘制椭圆弧,matlab,math,svg,Matlab,Math,Svg,我需要一条贝塞尔曲线来平滑地连接两条任意直线的端点。这些线要么垂直,要么平行。“平滑”的意思是,我希望曲线在端点处的切线与直线具有相同的坡度 我将使用MatLab(实际上是Octave)为svg编写xml。所以我需要一个公式来输出基于端点位置的贝塞尔曲线控制点的位置 有什么帮助吗?如果直线是平行的,但移动了,那么您就无法绘制单个圆弧来平滑地连接它们,所以三次贝塞尔曲线(可以是S形)更合适 第一个端点P0的单位方向向量为T0,第二个端点P3的单位方向向量为T3。三次贝塞尔曲线的控制点位于连续线上。

我需要一条贝塞尔曲线来平滑地连接两条任意直线的端点。这些线要么垂直,要么平行。“平滑”的意思是,我希望曲线在端点处的切线与直线具有相同的坡度

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


有什么帮助吗?

如果直线是平行的,但移动了,那么您就无法绘制单个圆弧来平滑地连接它们,所以三次贝塞尔曲线(可以是S形)更合适

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

 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
使用所述方法生成的曲线示例:


如果直线是平行的,但移动了,则无法绘制单个圆弧来平滑地连接它们,因此三次贝塞尔曲线(可能具有S形)更合适

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

 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
使用所述方法生成的曲线示例:


我希望您有一个惊人的理由决定使用贝塞尔曲线。我还需要能够绘制S曲线,但我想有一个公式来计算弧和S的控制点位置-curves@m7913d到目前为止,我还没有尝试过任何东西。我希望你有一个惊人的理由决定使用贝塞尔曲线。我还需要能够绘制S曲线,但我想有一个公式来计算弧和S的控制点位置-curves@m7913d到目前为止,我还没有尝试过任何东西,我担心只使用两端之间一半的距离,否则,首先,我会这么做,在我的大多数测试用例中,这只是我的经验值提供了相当平滑的连接。它是否不适合您的用例?我不确定,但在使用其样条线工具之前,我使用Solidworks手动绘制了此曲线,我应该复制此曲线,但您没有解释您需要什么样的曲线。想要“平滑”-我给了平滑。适用于S曲线和圆弧。Solidworks曲线看起来如何?我不确定我需要什么样的曲线,但我确实希望它与椭圆弧紧密匹配,我正计划使用相同的参数来形成S曲线我担心只使用两端之间一半的距离,否则,首先,我会这么做,在我的大多数测试用例中,这只是我的经验值提供了相当平滑的连接。它是否不适合您的用例?我不确定,但在使用其样条线工具之前,我使用Solidworks手动绘制了此曲线,我应该复制此曲线,但您没有解释您需要什么样的曲线。想要“平滑”-我给了平滑。适用于S曲线和圆弧。Solidworks曲线看起来如何?我不确定我需要什么样的曲线,但我确实希望它与椭圆弧紧密匹配,我正计划使用相同的参数来形成S曲线