这是Window API PolyBezier 绘制出来的三次贝塞尔曲线(很干净):
这是我用三次贝塞尔曲线公式计算出的像素点坐标绘制的贝塞尔曲线(很粗糙):
struct Point
{
double x = 0;
double y = 0;
};
void drawPixel(Point p,unsigned int color)
{
Framework f = Framework::instance();
unsigned* vram = f.videoMemory();
int x = static_cast<int>(p.x + 0.5);
int y = static_cast<int>(p.y + 0.5);
vram[y * 320 + x] = color;
}
void bezier(Point apt[])
{
Point p;
for (double t = 0; t <= 1.0; t += 0.001)
{
p.x = pow((1 - t), 3) * apt[0].x
+ (3 * t) * pow((1 - t), 2) * apt[1].x
+ (3 * t * t * (1 - t)) * apt[2].x
+ pow(t, 3) * apt[3].x;
p.y = pow((1 - t), 3) * apt[0].y
+ (3 * t) * pow((1 - t), 2) * apt[1].y
+ (3 * t * t * (1 - t)) * apt[2].y
+ pow(t, 3) * apt[3].y;
drawPixel(p, 0xffffff);// 在p点绘制白色
}
}
我想知道如何才能像PolyBezier一样绘制出干净的贝塞尔曲线。就像下面这样:
感谢你的帮助。
1.我是自己用贝塞尔曲线公式计算出像素坐标,再绘制出曲线。没有抗锯齿选项。
2.我不是想让曲线平滑,是想知道如何才能在计算像素坐标的时候,规避掉那些导致锯齿现象的像素坐标。
@邱云: 贴一些代码, 建议