Visual C++ 6.0 绘制曲线

绘制Bezier曲线

// 功    能:单击鼠标左键进行折点确定,单击右键进行Bezier曲线(绿色)绘制,同时也会画出多边折线(黄色)
// 编译环境:Visual C++ 6.0,EasyX_20190219(beta) 
#include
#include
double get(int i,int n,double t){
	int j;
	double a=1,b=1,c=1,d=1,e=1;
	for(j=1;j<=n;j++){
		a=a*j;
		if(j<=i){
			b=b*j;
			d=d*t;
		}
		if(j<=n-i){
			c=c*j;
			e=e*(1.0-t);
		}
	}
	if(a==0){a=1;}
	if(b==0){b=1;}
	if(c==0){c=1;}
	return (a/(b*c))*d*e;
}
void paint_bezier(POINT *p,int n){
	int i,j;
	double b[100];
	double t=0,x=0,y=0;
	setcolor(YELLOW);
	moveto(p[0].x,p[0].y);
	int k=50;
	for(i=0;i

演示如下:
Visual C++ 6.0 绘制曲线_第1张图片
绘制抛物样条曲线

//功    能:鼠标控制绘制抛物样条曲线,左键单击时绘制实心圆,右键单击后绘制抛物线
// 编译环境:Visual C++ 6.0,EasyX_20190219(beta) 
#include
#include
#include
#include
#include
using namespace std;
void parspl(int p[][2],int n,int k,int e){
	int x,y,i,j,m;
	double t1,t2,t3,t,a,b,c,d;
	if(e==1){ 
		m=n;
		p[0][0]=p[1][0];
		p[0][1]=p[1][1];
		p[n+1][0]=p[n][0];
		p[n+1][1]=p[n][1]; 
	}
	else{
		m=n+1;
		p[0][0]=p[n][0];
		p[0][1]=p[n][1];
		p[m][0]=p[1][0];
		p[m][1]=p[1][1];
		p[m+1][0]=p[2][0];
		p[m+1][1]=p[2][1];  
	}
	t=0.5/k;
	moveto(p[1][0],p[1][1]);
	for(i=0;i

红笔为起点,蓝笔为终点
Visual C++ 6.0 绘制曲线_第2张图片
鼠标右键:
Visual C++ 6.0 绘制曲线_第3张图片

你可能感兴趣的:(C++)