【问题标题】:smooth out corners of a 3-point line strip [closed]平滑三点线带的角落[关闭]
【发布时间】:2021-12-02 06:24:48
【问题描述】:

我有一个由 3 个点定义的线带,每个点都有一个 x 和 y 坐标。

我正在尝试平滑中间(点 2)角,如下图所示:

灰色的线是原始的线带,黑色的线是平滑的。 平滑区域在多个值之间应该是恒定的(因为它不依赖于 p1 和 p2 或 p2 和 p3 之间的线的长度)。

我最初使用的是贝塞尔曲线和简单的样条曲线,但这并没有奏效,因为平滑曲线在多个值之间显然不一样。

我该怎么做?

【问题讨论】:

  • 我正要建议贝塞尔曲线。但是当您说“平滑曲线在多个值之间显然不一样”时,您失去了我。也许这部分对我来说不是那么明显。你能更详细地解释一下为什么贝塞尔没有做到这一点吗?
  • 这里相同:您能否进一步解释一下“平滑区域应该在多个值之间保持不变(因为它不依赖于 p1 和 p2 或 p2 和 p3 之间的线的长度)。”
  • 如果您对在线条长度增长到无穷大时保持“角”的形状保持不变感到满意,您可以简单地选择原始端点或相应线条上的点在一定距离处x 从十字路口,以更靠近十字路口的为准,如有必要,其余部分使用直线。如果您想对任意短的线执行此操作,则可能仅限于原始直线,因为随着长度收敛到零,您需要越来越接近交叉点。
  • 让我们看看你是不是这个意思:在每条线上选择 2 个与拐角距离相同的点。在这些点上绘制两条与您已有的线成直角的线(法线向量指向左下角)。它们将在一个圆心的点交叉,这个圆的一部分将成为平滑的角。
  • 您可以取每个线段的中心点并在它们之间制作贝塞尔曲线。这样连续的线不会在它们之间相互作用。

标签: c++ math opengl curve spline


【解决方案1】:

在每条线上选择 2 个与角点距离相同的点。在这些点上绘制两条与您已有的线成直角的线(法线向量指向左下角)。它们将在一个圆心的点交叉,这个圆的一部分将成为平滑的角。

【讨论】:

  • 这仅在线条足够长以达到垂直于半径点时才有效。
  • 是的,这是一种基于我们输入的猜测;)但是如果行变得太短,你可以开始减少 d。
  • 这似乎有效,感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2020-06-16
相关资源
最近更新 更多