Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics 贝塞尔曲线绘制步骤的选择_Graphics_Bezier_Polynomials - Fatal编程技术网

Graphics 贝塞尔曲线绘制步骤的选择

Graphics 贝塞尔曲线绘制步骤的选择,graphics,bezier,polynomials,Graphics,Bezier,Polynomials,贝塞尔曲线是一条参数曲线,这意味着存在一个参数t,在该参数处可以计算多项式,以找出曲线上点的位置 一些常见情况下的多项式可在 要在屏幕上绘制贝塞尔曲线,可以通过微小的步骤以不断增加的t计算从0到1的多项式。然而,这将是非常浪费的,因为通常情况下,参数“space”与屏幕“space”不对应,即几个小步骤可能只落在一个像素上 我的问题是:如何找到与上一点的笛卡尔距离至少增加1像素的最小步长 换句话说,我想在屏幕上画一条贝塞尔曲线。如何选择t应该增长的(统一)步长,这样我就不会一次只画一个像素了?当

贝塞尔曲线是一条参数曲线,这意味着存在一个参数
t
,在该参数处可以计算多项式,以找出曲线上点的位置

一些常见情况下的多项式可在

要在屏幕上绘制贝塞尔曲线,可以通过微小的步骤以不断增加的
t
计算从
0
1
的多项式。然而,这将是非常浪费的,因为通常情况下,参数“space”与屏幕“space”不对应,即几个小步骤可能只落在一个像素上

我的问题是:如何找到与上一点的笛卡尔距离至少增加1像素的最小步长

换句话说,我想在屏幕上画一条贝塞尔曲线。如何选择
t
应该增长的(统一)步长,这样我就不会一次只画一个像素了?当
t
增长太快时,我不介意“洞”,我只是不想重新绘制已经绘制的像素

编辑

我所说的“如何找到”是指O(1)。是的,我可以使用,但我希望有一种方法可以快速“猜测”最佳
t
步骤。

上面的评论(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,则在这两点之间进行二元细分。等等


但老实说,我想在没有任何递归循环或细分的情况下,以更高的分辨率计算所有点会更快。尤其是当您使用多线程编程时。

我认为您所追求的不是统一的步骤。只要你的曲线跨越很多像素,我会在每个点上找到关于
t
的导数,然后增加
t
的量,产生至少一个像素的导数(x或y)。如果曲线相对于像素大小很快弯曲,这将不起作用。考虑支持。@ LHF,我只是,谢谢你的建议。也谢谢Lua!非常感谢。但我要做的是找出O(1)中最小的一步。我把问题说得更清楚了。