计算机辅助与图形学作业(二)——绘制B样条曲线

如需转载本文,请注明出处。

接着(一),继续,这次要绘制的是B样条曲线,更为复杂了。

任然使用的是EasyX图形库。

先看一下效果:

其中,红色的为B样条曲线,绿色的为其控制线。

源代码如下:

/*
	本程序借助EasyX图形库绘制B样条曲线
*/#include <graphics.h> 
#include<conio.h> 
#include<stdio.h>
#include<iostream>
using namespace std;

void b_spline(int color, float p[4][2]) /*画b样条曲线函数*/ 
{
	float t, t2, t3, xt, yt;
	int rate = 100, x, y;
	setcolor(color);
	for (t = 0; t <= 1; t += 1.0 / rate)
	{
		t2 = t*t;
		t3 = t*t*t;
		xt = ((1 - 3 * t + 3 * t2 - t3)*p[0][0] + (4 - 6 * t2 + 3 * t3)*p[1][0] + (1 + 3 * t + 3 * t2 - 3 * t3)*p[2][0] + t3*p[3][0]) / 6;
		yt = ((1 - 3 * t + 3 * t2 - t3)*p[0][1] + (4 - 6 * t2 + 3 * t3)*p[1][1] + (1 + 3 * t + 3 * t2 - 3 * t3)*p[2][1] + t3*p[3][1]) / 6;
		x = (int)(xt);
		y = (int)(yt);
		if (t == 0) moveto(x, y);
		lineto(x, y);
	}
}

void main()
{
	int i;
	float p[4][2];
	p[0][0]=120;			//第一个控制点
	p[0][1]=240;
	p[1][0]=300;			//第二个控制点
	p[1][1]=100;
	p[2][0]=400;			//第三个控制点
	p[2][1]=100;
	p[3][0]=500;			//第四个控制点
	p[3][1]=250;
	initgraph(640,480);
	cleardevice();
	setcolor(GREEN);
	moveto(p[0][0], p[0][1]);
	for (i = 1; i <=3; i++)
		lineto(p[i][0], p[i][1]);				//绘制控制点的连线(绿色)
	b_spline(LIGHTRED, p);			//绘制B样条曲线(红色)
	system("pause");
}

源码链接:https://github.com/xsgaaaa/Computer-Graphics-Homeworks

如果你感觉有用,不妨点赞关注一下呗^ _^。

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值