点相对于贝塞尔曲线的位置

时间:2009-05-28 12:55:36

标签: language-agnostic geometry bezier

我有4点指定的贝塞尔曲线。我需要知道一个点是否位于贝塞尔曲线的左侧或右侧。你能给我一个算法吗?

编辑:我确信我生成贝塞尔曲线的方式不会形成循环。

稍后编辑我意识到我的初始问题可以在不使用相对位置的情况下解决。当我发布这个问题时,我认为存在相对位置的数学公式,类似于检查点是否在圆的内部。看来这是不可能的。所以我会接受能够提出时间效率解决方案的答案。

5 个答案:

答案 0 :(得分:5)

您可以使用非常简单的算法确定贝塞尔曲线上的最近点(与k细分相关.DeCastleju算法。)如果需要细节,请查看图形宝石。

此时,即使使用循环,您也可以通过确定从最近点到测试点的向量是否位于沿着曲线的向量右侧的左侧(速度? - 不是)来确定侧向性。确定这里的正确术语...)在你确定的最近点的bezier。

你可以通过两个向量的交叉积来得到 - 那个。否定或正面将决定手性以及您所在线的哪一侧。

当然,在一个循环中,侧面将被定义为好像你是一辆沿着这条线开车的车,当你走过时,你是否会看到右边或左边的窗户......如果你要整个贝塞尔曲线的右边或左边。所以这取决于你如何定义“侧面”

很抱歉,如果我的条款有效。已经有一段时间了,因为我必须对Bezier的

做任何事情

绘制图片会更容易;)

答案 1 :(得分:1)

如果您只想让对象跟随曲线(正如您在评论中所说的那样),为什么不用参数方程移动对象? See this article

答案 2 :(得分:1)

Here is math用于立方和二次贝塞尔曲线隐式化。

答案 3 :(得分:0)

我不记得这个晚些时候的数学,但你可能想要使用一个细分算法来逐渐优化它,直到这些段足够“直”,你可以将它们视为用于目的的线段你的决心。

您可以通过使用曲线细化的边界多面体来确定您的“点”在所有多面体之外,然后立即展平为线段,从而获得更快的答案。

答案 4 :(得分:0)

假设点被约束到曲线,您必须将其中一个锚定义为开始,将另一个定义为结束,然后计算属于曲线的点并且位于中间(长度的一半)...你可以说这个点是在开始和中间之间还是在中间和结尾之间。

这是你想要的还是我完全迷失了?