contains - 如何判断一个点是否在给定公差范围内的二次贝塞尔曲线上?

标签 contains point bezier

我正在编写一个贝塞尔曲线库。我已经可以将曲线计算为给定分辨率的连接点的集合,但我现在需要执行相反的操作;检测给定点是否在给定公差范围内的曲线上(例如0.0001)。 有一个简单的数学函数可以做到这一点吗?

请以函数的形式表述您的答案,该函数接受三个参数:xy 坐标以及公差(与曲线的距离仍被视为“on”) it),并输出一个 bool 值。这将使其对其他人更加有用。例如,Swift 中的此类函数的签名为 func isOnCurve(x: Float, y: Float, Tolerance: Float) -> Bool

最佳答案

您可以利用https://pomax.github.io/bezierinfo/#projections中描述的“曲线距离”方法。 ,但这会找到一个 t任意坐标的值。对于“这个点在曲线上吗?”检查一下,没问题(多个 t 值不会改变答案;0 为曲线外,1 为曲线上,2 个或更多仍为曲线上)。

t 的几个(相对接近的)值处对曲线进行采样(我假设为了提高效率,您已经这样做了,以便只计算绘制坐标一次,而不是每次需要绘制曲线时都计算),然后使用最接近的 t产生,开始沿着曲线行走,减少距离,直到找到最小距离(如何行走取决于你:你可以进行从粗到细的行走,或者从精细开始,或者确定跳跃多远基于曲线切线等)。

那么你的结果实际上就是 return minDistance <= tolerance .

关于contains - 如何判断一个点是否在给定公差范围内的二次贝塞尔曲线上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029616/

相关文章:

java - @SuppressWarnings ArrayList<X> 可能不包含类型 Y 的对象

ios - 如何使用 Core Graphics 绘制点?

math - 间隔之间的插值,按照贝塞尔曲线插值

jquery - 使用 contains() 选择器和 Replace() 替换元素文本

javascript - 删除 WordPress 中特定标签的样式 (Javascript)

python - 在 python 中,如何打印不包含特定字符串的行,而不是打印包含特定字符串 : 的行

javascript - 计算给定四次(四阶,非二次)贝塞尔曲线上的一个点

javascript - FabricJS 画线但是...?

algorithm - 给定一组点,找出是否存在从这些点出发的凸四边形,除此之外没有其他点,那么它的角在里面

c# - WPF 动画 - 动画贝塞尔曲线点