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

Language agnostic 点相对于贝塞尔曲线的位置,language-agnostic,geometry,bezier,Language Agnostic,Geometry,Bezier,我有一条由4个点指定的贝塞尔曲线。我需要知道一个点是在贝塞尔曲线的左侧还是右侧。你能给我推荐一个算法吗 编辑:我确信生成贝塞尔曲线的方式不会形成循环 后来我意识到我最初的问题可以不用相对位置来解决。当我发布这个问题时,我想有一个相对位置的数学公式,类似于检查一个点是否在圆的内部。这似乎是不可能的。因此,我将接受这个答案,它将建议一个省时的解决方案。我记不起这么晚的时候的数学问题,但您可能希望对曲线使用细分算法来逐步细化曲线,直到线段足够“直”,您可以将其视为直线段进行确定 通过使用曲线细化的边界

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

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


后来我意识到我最初的问题可以不用相对位置来解决。当我发布这个问题时,我想有一个相对位置的数学公式,类似于检查一个点是否在圆的内部。这似乎是不可能的。因此,我将接受这个答案,它将建议一个省时的解决方案。

我记不起这么晚的时候的数学问题,但您可能希望对曲线使用细分算法来逐步细化曲线,直到线段足够“直”,您可以将其视为直线段进行确定


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

如果您只想让对象跟随曲线(如您在评论中所说),为什么不用参数方程移动你的物体呢

>P>假定约束于曲线的点,必须将锚中的一个定义为起点,另一端为终点,然后计算属于曲线的点,在中间(长度的一半)…这样你就可以知道点是在起点和中点之间还是在中点和终点之间


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

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

在这一点上,即使使用循环,也可以通过确定从最近点到测试点的向量是否位于沿贝塞尔曲线(速度?-此处不确定正确的术语…)的向量的右侧左侧来确定边度

你们可以通过两个向量的叉积得到。消极或积极将决定你的用手习惯以及你站在哪一边

当然,在一个循环中,侧向度将被定义为,如果你是一辆沿着直线行驶的汽车,当你经过时,你会从右边或左边的窗户向外看吗。。。如果你是在整个贝塞尔曲线的右边或左边,那就不是了。所以这取决于你如何定义“侧边”

对不起,如果我的条件取消了。我已经有一段时间没有和贝塞尔做任何事情了


画一幅画会更容易;)

用于三次和二次贝塞尔曲线隐式化。

您可能需要更具体地说明您试图实现的目标。。。例如,如果贝塞尔曲线形成一个循环,你希望得到什么样的答案?我想沿着贝塞尔曲线轨迹移动一个对象。如果他的当前位置在曲线的左侧,我会将他的方向改为右侧,反之亦然。。。如果相对于端点跨越控制点,例如,使四个顶点按顺序排列:(0,0)、(100,100)、(100,0)、(0,100)我知道贝塞尔曲线可以形成循环,但在我的程序中,控制点的选择方式是不会出现循环。从这张图片开始,我想知道一个点是在曲线的左侧还是右侧。当然,有好几种情况,其中一些情况下没有右侧或左侧。但是,为了示例,我只考虑图像中的曲线的情况。jerryjvl的答案似乎足够好,但我想知道该算法的性能。或者如果有更好的算法。对不起,我的语无伦次:(英语也不是我的第一语言!soy venezolano!我在Graphic Gems中找到了解决方案:解决曲线上的最近点问题,作者:Philip J.Schneider。谢谢你告诉我Graphic Gems;;)