首页 新闻 会员 周边 捐助

如何像PolyBezier一样绘制漂亮的贝塞尔曲线

0
悬赏园豆:100 [已解决问题] 解决于 2024-04-18 15:19

这是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一样绘制出干净的贝塞尔曲线。就像下面这样:

感谢你的帮助。

邱云的主页 邱云 | 初学一级 | 园豆:114
提问于:2024-03-03 15:17
< >
分享
最佳答案
0
邱云 | 初学一级 |园豆:114 | 2024-04-18 15:09
其他回答(1)
0
  1. 看看你用的语言/API 是不是没设置抗锯齿. 设置一下.
  2. 在算出来的point上插入更多的point, 让曲线更平滑, 也可以套用现成的曲线平滑算法让线更平滑. 还要考虑分辨率的问题, 设置适当的参数.
收获园豆:100
czd890 | 园豆:14488 (专家六级) | 2024-03-04 10:19

1.我是自己用贝塞尔曲线公式计算出像素坐标,再绘制出曲线。没有抗锯齿选项。
2.我不是想让曲线平滑,是想知道如何才能在计算像素坐标的时候,规避掉那些导致锯齿现象的像素坐标。

支持(0) 反对(0) 邱云 | 园豆:114 (初学一级) | 2024-03-05 20:06

@邱云: 贴一些代码, 建议

支持(0) 反对(0) czd890 | 园豆:14488 (专家六级) | 2024-03-05 20:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册