我有一些原始版本的贝塞尔曲线绘制程序,在这里
void DrawBezier(float ax, float ay,
float bx, float by,
float cx, float cy,
float dx, float dy, unsigned color)
{
float step = 1.0/1000.0;
for(float t=0; t<=1; t+=step)
{
float u = 1.0-t;
float a = u*u*u;
float b = 3.0*u*u*t;
float c = 3.0*u*t*t;
float d = t*t*t;
float x = ax*a + bx*b + cx*c + dx*d;
float y = ay*a + by*b + cy*c + dy*d;
SetPixel(int(x),int(y), color);
}
}
这是非常慢的,因为 float->int 转换速度很慢,至少在我的旧 pentium 4 上是这样(这种转换实际上消耗了 90% 的时间,3k beziers/s 而当 setpixel 被注释时为 30k beziers/s)。
所以我有一个想法将它重写为定点算法,但我对此并没有太多经验 - 如何将它重写为定点?(注意 t 在 0.0 到 1.0 的范围内)
编辑:问题的第二部分:如何以像素为单位估计贝塞尔曲线的长度(需要绘制像素)?不知道