Problem.1

void draw1(float x1,float y1,float x2,float y2, int _numPoints){
Vec2d A(x1,y1);
Vec2d B(x2,y2);
int numPoints = _numPoints;
numPoints = (numPoints < 1) ? 1 : numPoints;
float dp = 1.0 / numPoints;
glColor3f(1,1,1);
glPointSize(3);
glBegin(GL_POINTS);
for(float p=0;p<1.0;p+=dp){
Vec2d C = A*(1.0-p)+B*p;
glVertex2f(C.x, C.y);
}
glEnd();
}
void drawProblem1(){
draw1(100,200,500,500,30);
}
Problem. 2

Vec2d lerp(Vec2d A, Vec2d B,float p){
Vec2d C = A*(1.0-p)+B*p;
return C;
}
void draw2(int stepnum){
Vec2d varray1[4]={Vec2d(100,100),Vec2d(150,100),Vec2d(200,250),Vec2d(50,200)};
Vec2d varray2[4]={Vec2d(500,20),Vec2d(550,100),Vec2d(650,300),Vec2d(450,300)};
for(int i=0;i<stepnum;i++){
glColor3f(1,1,1);
glBegin(GL_LINE_LOOP);
for(int j=0;j<4;j++){
float s =(float)i/(float)stepnum;
Vec2d C=lerp(varray1[j],varray2[j],s);
glVertex2f(C.x,C.y);
}
glEnd();
}
glColor3f(1,1,1);
glBegin(GL_LINE_LOOP);
for(int i=0;i<4;i++){
glVertex2f(varray1[i].x,varray1[i].y);
}
glEnd();
glColor3f(1,1,1);
glBegin(GL_LINE_LOOP);
for(int i=0;i<4;i++){
glVertex2f(varray2[i].x,varray2[i].y);
}
glEnd();
}
void drawProblem2(){
draw2(10);
}
Problem. 3

void drawBez(Vec2d a,Vec2d b,Vec2d c,Vec2d d){
glLineWidth(1);
glBegin(GL_LINE_STRIP);
glColor3f(1,0,0);
for(float p=0;p<1.0;p+=0.01){
float u=1.0-p;
Vec2d r = a*u*u*u+b*3*u*u*p+c*3*p*p*u+d*p*p*p;
glVertex2f(r.x,r.y);
}
glEnd();
}
void drawProblem3(){
drawBez(Vec2d(100,100),Vec2d(140,200),Vec2d(400,200),Vec2d(700,540));
}
Problem. 5

void drawBez2(Vec2d a,Vec2d b,Vec2d c,Vec2d d){
glLineWidth(1);
glBegin(GL_LINE_STRIP);
glColor4f(1,1,1,.4);
for(float p=0;p<1.0;p+=0.01){
float u=1.0-p;
Vec2d r = a*u*u*u+b*3*u*u*p+c*3*p*p*u+d*p*p*p;
glVertex2f(r.x,r.y);
}
glEnd();
}
float xx,xx2;
void drawHair(){
srand(1);
for(int i=0;i<windowW;i++){
float ax=i;
float ay=windowH;
float bx=i+rand()%10*cos(xx+(float)(rand()%10))-5;
float by=windowH-rand()%200;
float cx=bx+rand()%50*sin(xx+(float)(rand()%10))-25;
float cy=by-rand()%200;
float dx=cx+rand()%100*cos(xx+(float)(rand()%10));
float dy=cy-rand()%100-50;
drawBez2(Vec2d(ax,ay),Vec2d(bx,by),Vec2d(cx,cy),Vec2d(dx,dy) );
}
xx+=0.01;
xx2+=0.01;
}
void drawProblem5(){
drawHair();
}
problem. 7 | project idea
graphic elements composed of bezier curves and ellipses
