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);
}