【问题标题】:Bezier Curve and French Curves贝塞尔曲线和法式曲线
【发布时间】:2009-11-23 19:39:41
【问题描述】:

我正在使用贝塞尔曲线在我正在制作的程序中绘制曲线。我有五分。 这是我正在尝试创建的曲线的粗略草图。我正在尝试制作一条穿过 A、B、C、D 的曲线。但是,C 不是一个确定的点,它是曲线应该经过的位置以使其看起来像法国曲线的建议。 C在45度时从E出来。

This is an illustration of what I am trying to do.

有人对如何近似通过这些点的法国曲线有任何建议吗?

【问题讨论】:

  • 我不太明白你想要做什么。你能在你的插图中填写更多想要的曲线吗?
  • 要么通过C,要么不通过,所以请澄清问题。它通过E吗?你说“C 在 45 度从 E 出来”。我可以从图中看到,但为什么呢?那里有什么关系?您还有从 E 到 B 和从 E 到 D 的线路 - 他们应该告诉我们什么?

标签: bezier curve-fitting


【解决方案1】:

您需要使用三次贝塞尔曲线。三次贝塞尔曲线由四个点定义,但不通过中间的两个点,它们只是为贝塞尔曲线指定一个向量。不幸的是,有无限条三次贝塞尔曲线可以“通过”你的四个点。

Don Lancaster 写过 a document (pdf) 关于此的文章。这涉及到一些关于他使用的算法的非常有趣的细节。它在附言中,我怀疑你正在使用它,但至少校长在那里。

Here is an article 在 CodeProject 上发布,他们在那里构建了一个库,用于执行您尝试使用 C# 执行的操作。

【讨论】:

    【解决方案2】:

    贝塞尔曲线通过指定的第一个和最后一个控制点,内部控制点确定形状。如果你用 ABCDE 画一条曲线,它不会通过点 C。但你可以把它分成两条不同的曲线,在 C 之前和之后引入一个控制点,这样你就有 A B B' C 和 C C' D E。制作 B',C , 和 C' 共线,因此曲线将具有一阶连续性。

    【讨论】:

      【解决方案3】:

      给定任意三个不共线的点(A、B、D),你可以画一条连接它们的弧。

      给定任意三个或四个点,您可以构建一条连接它们的贝塞尔曲线,看起来相当不错。 (您可能不需要为了让曲线看起来漂亮而添加额外的点 C,但如果您愿意,当然可以。)

      具体如何执行此操作取决于您使用的图形库。那你用的是什么库?

      【讨论】:

      • 我实际上没有使用任何库。这是我在学校的高级项目。我必须手工绘制所有图形。
      • “手工”是指用铅笔在纸上绘画?也许你需要的是一套法国曲线和一个受电弓……
      • “手动”表示逐个像素。 :)
      【解决方案4】:

      上面所说的都是事实,但是我最近发现了一个小技巧。贝塞尔曲线不通过控制点,执行 p0 和 pn(第一个和最后一个)。但是有一个公式可以让你通过给定的点构造贝塞尔曲线。你可以通过计算新的“假想”控制点来做到这一点。遗憾的是,我只有二次曲线的公式,但我确信它可以被概括。这里是: 新点(X)=P1(x)*2-(P0(x)+P2(x))/2 Y也一样

      这个公式给出“新”P1 点(因为 p0 和 p2 是起点和终点),曲线通过“原始”P1。希望有帮助吗?也可以使用 Bernstain 多项式进行计算,这是我的建议

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 2013-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多