Bezier曲线是一条参数曲线,即有一个参数t,在该参数下,可以求多项式,以求曲线上各点的位置。
一些常见情形的多项式可以在案例上找到。
要在屏幕上画出一条贝塞尔曲线,就可以用很小的一小步来计算从0到1的多项式在不断增加t时的作用。然而,这将是非常浪费的,因为一般来说,参数"space“不对应于屏幕"space",即几个小步骤可能落在一个像素上。
我的问题是:如何找到最小的一步,使笛卡儿距离从前一点增加至少一个像素?
换句话说:我想在屏幕上画一个Bezier曲线。如何选择t应该增长的(统一)步骤,这样我就不会再多画一个像素了?我不介意当t增长过快时的“洞”,我只是不想重新绘制已经绘制的像素。
编辑
我所说的“如何找到”是指O(1)。是的,我可以使用德卡斯尔焦算法,但我希望有一种快速“猜测”最佳t步骤的方法。
发布于 2015-07-10 03:55:27
上面的注释(jozxyqk)给了您一个提示。我会用样条图的递归二进制除法来尝试。
假设您从参数空间的粗略分辨率开始(delta_t = 0.1),它给出了样条曲线s,s(t=0),s(t=0.1),…,s(t=0.9),s(t=1)上的11个点。计算s(t_i)和s(t_i+1)之间的距离。如果它>1,则在这两个点之间进行二进制细分。等等..。
但老实说,我想计算所有点的速度更快--一个更高的分辨率--没有任何递归循环或细分。特别是当您使用多线程编程时。
https://stackoverflow.com/questions/31327561
复制相似问题