【问题标题】:Draw elliptical arc between 2 points using bezier curve使用贝塞尔曲线在两点之间绘制椭圆弧
【发布时间】:2017-08-02 11:58:59
【问题描述】:

我需要一条贝塞尔曲线来平滑地连接 2 条任意线的端点。这些线都是垂直或平行的。 “平滑”是指我希望曲线在端点处的切线与直线具有相同的斜率。

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

有什么帮助吗?

【问题讨论】:

  • SVG supports elliptical arcs. 我希望你有一个惊人的理由决定使用贝塞尔曲线。
  • 我还需要能够绘制 S 曲线,但我想要一个公式来计算弧线和 S 曲线的控制点位置
  • @m7913d 到目前为止我还没有尝试过任何东西

标签: matlab math svg


【解决方案1】:

如果线是平行的但有偏移,那么你不能画一条圆弧来平滑地连接它们,所以三次贝塞尔曲线(可以是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

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

【讨论】:

  • 我担心只使用两端之间距离的一半,否则我会一开始就这样做
  • 这只是我的经验值,在我的大多数测试用例中提供了相当平滑的连接。它不适合您的用例吗?
  • 我不确定,但我使用 Solidworks 在使用它的样条工具之前手动制作了这条曲线,我应该复制它
  • 但是你还没有解释你需要什么曲线。想要“顺利” - 我给了顺利。适用于 S 曲线和圆弧。 Solidworks 曲线看起来如何?
  • 我不确定我需要什么曲线,但我确实希望它与椭圆弧紧密匹配,并且我计划使用相同的参数来形成 S 曲线
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2011-08-07
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 2017-05-18
相关资源
最近更新 更多