week5

problem 1 | problem 2

int numPoints=0;
Vec2d pointList[1000];
float x;
float sWidth[1000];

void drawStroke(float s){
glColor3f(1,1,1);
glBegin(GL_TRIANGLE_STRIP);

for(int i=0;i<numPoints-1;i++){

Vec2d A = pointList[i];
Vec2d B = pointList[i+1];
Vec2d V = B-A;
Vec2d Vp;
Vp.x = V.y*-1.0;
Vp.y = V.x;

Vp.normalize();
Vec2d C =A+Vp*s;
Vec2d D =A-Vp*s;

glVertex2f(C.x,C.y);
glVertex2f(D.x,D.y);
}

glEnd();

}

void drawProblem1(){
drawStroke(1);
}

void drawProblem2(){
drawStroke(3);
}

 

problem 3

void drawProblem3(){
float s1;
float s2=1;
glColor3f(1,1,1);
glBegin(GL_TRIANGLE_STRIP);

for(int i=0;i<numPoints-1;i++){
Vec2d A = pointList[i];
Vec2d B = pointList[i+1];
Vec2d V = B-A;
Vec2d Vp;
Vp.x = V.y*-1.0;
Vp.y = V.x;
Vp.normalize();
s1=((i/5)%4)*30+1;
Vec2d C =A+Vp*s1;
Vec2d D =A-Vp*0;
glVertex2f(C.x,C.y);
glVertex2f(D.x,D.y);

}

glEnd();
}

 

problem 4

void drawProblem4(){

float s1;
float amplitude=30;
float freq=.8;
float s2=1;
glColor3f(1,1,1);
//glBegin(GL_TRIANGLE_STRIP);
glBegin(GL_LINE_STRIP);

for(int i=0;i<numPoints-1;i++){
Vec2d A = pointList[i];
Vec2d B = pointList[i+1];
Vec2d V = B-A;
Vec2d Vp;
Vp.x = V.y*-1.0;
Vp.y = V.x;
Vp.normalize();
s1=sin((float)(i*freq))*amplitude;
Vec2d C =A+Vp*s1;
//Vec2d D =A-Vp*0;
glVertex2f(C.x,C.y);
//glVertex2f(D.x,D.y);

}

glEnd();

}

 

problem 5

void drawProblem5(){

float s1=30;
float s2=30;
glColor3f(1,1,1);
//glBegin(GL_TRIANGLE_STRIP);
glBegin(GL_LINES);

for(int i=1;i<numPoints-1;i++){
Vec2d A = pointList[i];
Vec2d B = pointList[i-1];
Vec2d V = B-A;
Vec2d Vp;
Vp.x = V.y*-1.0;
Vp.y = V.x;
V.normalize();
Vp.normalize();
Vec2d C =A+Vp*s1+V*s1;
Vec2d D =A-Vp*s2+V*s2;
//Vec2d C=A.
glVertex2f(C.x,C.y);
glVertex2f(A.x,A.y);
glVertex2f(D.x,D.y);
glVertex2f(A.x,A.y);

}

glEnd();

}

 

problem 6

float numPoints2;
int t;

void drawProblem6(){
float s1;
float amplitude=10;
//float freq=.8;
float s2=1;
glColor3f(1,1,1);
glBegin(GL_TRIANGLE_STRIP);
//glBegin(GL_LINE_STRIP);

numPoints2+=0.03;
if(numPoints2>numPoints){
numPoints2=numPoints;
}

t++;

for(int i=0;i<numPoints2-1;i++){
Vec2d A = pointList[i];
Vec2d B = pointList[i+1];
Vec2d V = B-A;
Vec2d Vp;
Vp.x = V.y*-1.0;
Vp.y = V.x;
Vp.normalize();
amplitude=3*sin(t*0.008)+10;
s1=(cos(4*PI*i/numPoints2+PI)+1)*amplitude;
//s1=2;

Vec2d C =A+Vp*s1;
Vec2d D =A-Vp*s1;
glColor3f(0,0,0);
glVertex2f(C.x,C.y);
glColor3f(1,1,1);
glVertex2f(D.x,D.y);

}

glEnd();

}

 

problem 7

void rotate(Vec2d* v,int n,int a){
Vec2d center;
Vec2d rv[n];
glColor4f(1,1,1,0.5);
glBegin(GL_LINE_LOOP);

Vec2d Xp,Yp;
Xp.x = d_cos(a);
Xp.y = d_sin(a);
Yp.x = -1*d_sin(a);
Yp.y = d_cos(a);

for(int i=0;i<n;i++){
glVertex2f(v[i].x,v[i].y);
center.x+=v[i].x;
center.y+=v[i].y;
}
center.x=center.x/n;
center.y=center.y/n;
glEnd();

glColor4f(1,1,1,1);
glBegin(GL_LINE_LOOP);

for(int i=0;i<n;i++){
rv[i]=v[i]-center;
//Vec2d rotatedPoint = Xp*currentPoint.x + Yp*currentPoint.y;
rv[i]=Xp*rv[i].x + Yp*rv[i].y;
rv[i]=rv[i]+center;
glVertex2f(rv[i].x,rv[i].y);
}

glEnd();

glBegin(GL_POINTS);
glVertex2f(center.x,center.y);
glEnd();

}

void drawProblem7(){
Vec2d varray[4]={Vec2d(200,200),Vec2d(240,400),Vec2d(700,600),Vec2d(700,340)};
rotate(varray,4,mouseX);

}

 

 

problem 8

void rotate2(Vec2d* v,int n,float a){
Vec2d center;
Vec2d rv[n];
Vec2d xp[n];
Vec2d yp[n];
glColor3f(1,1,1);
//glBegin(GL_LINE_LOOP);
glBegin(GL_POINTS);
/*
Vec2d Xp,Yp;
Xp.x = d_cos(a);
Xp.y = d_sin(a);
Yp.x = -1*d_sin(a);
Yp.y = d_cos(a);
*/

for(int i=0;i<n;i++){
glVertex2f(v[i].x,v[i].y);
center.x+=v[i].x;
center.y+=v[i].y;
}
center.x=center.x/n;
center.y=center.y/n;
glEnd();

glBegin(GL_LINE_LOOP);

for(int i=0;i<n;i++){
rv[i]=v[i]-center;
//float d=sqrt((rv[i].x-center.x)*(rv[i].x-center.x)+(rv[i].y-center.y)*(rv[i].y-center.y));
float d=rv[i].length();
d=d/1000;
xp[i].x=d_cos(a*d);
xp[i].y=d_sin(a*d);
yp[i].x=-1*d_sin(a*d);
yp[i].y=d_cos(a*d);
rv[i]=xp[i]*rv[i].x + yp[i]*rv[i].y;
rv[i]=rv[i]+center;

glVertex2f(rv[i].x,rv[i].y);
}

glEnd();

glBegin(GL_POINTS);
glVertex2f(center.x,center.y);
glEnd();

}

void drawProblem8(){
//Vec2d varray[4]={Vec2d(600,450),Vec2d(240,400),Vec2d(700,600),Vec2d(700,340)};
Vec2d varray[100];
for(int i=0;i<100;i++){
varray[i]=Vec2d(300*cos(2*PI*i/100)+windowW/2,100*sin(2*PI*i/100)+windowH/2);
}
rotate2(varray,100,mouseX);

}