10

我有一条由 4 个点指定的贝塞尔曲线。我需要知道一个点是在贝塞尔曲线的左侧还是右侧。你能给我推荐一个算法吗?

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

后来编辑我意识到我最初的问题可以在不使用相对位置的情况下解决。当我发布这个问题时,我在想有一个相对位置的数学公式,类似于检查一个点是否在圆的内部。似乎这是不可能的。所以我会接受答案,这将提出一个省时的解决方案。

4

5 回答 5

5

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

此时,即使使用循环,您也可以通过确定从最近点到测试点的向量是否位于沿曲线的向量的左侧(速度? - 不确定此处的正确术语...)您确定的最近点的贝塞尔曲线。

您可以通过两个向量的叉积来获得 -that-。消极或积极将决定你的左手习惯和你在哪一边。

当然,在一个循环中,侧向性将被定义为好像你是一辆沿着线路行驶的汽车,当你经过时你是在看右边还是左边的窗户……如果你在右边或右边整个贝塞尔曲线的左侧。所以这取决于你如何定义“侧向”

抱歉,如果我的条款不适用。自从我不得不对 Bezier 做任何事情以来已经有一段时间了

画图会更容易;)

于 2009-05-29T08:14:45.750 回答
1

如果您只是希望您的对象遵循曲线(正如您在评论中所说),为什么不使用参数方程移动您的对象?看这篇文章

于 2009-05-28T13:28:22.480 回答
1

这是三次和二次贝塞尔曲线隐式化的数学

于 2009-12-20T13:16:15.737 回答
0

我不记得这么晚的数学了,但是您可能希望对曲线使用细分算法来逐步细化它,直到线段“直”到可以将它们视为线段以供您确定.

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

于 2009-05-28T13:05:04.353 回答
0

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

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

于 2009-05-29T07:57:14.117 回答