Week 11 Assignment

 

Problem2-5

void Mesh::makePath()
{
float Rad=80; //fixed radius

float MRad=-10; //Mov rad
float o= 30; // offset
float Amp=10;
float Amp2=80;
int A;

float Frequency=4;
float Phase=8;

Vec3d Q;
Vec3d center(180,100,0);
Vec3d vecList[gridW];
Vec3d Up(0,1,0);
Vec3d parallel;
Vec3d normal;
Vec3d side;
Vec3d P;
Vec3d R;

// the path
for(A = 0; A< gridW; A++){

Q.x = (Rad +MRad)*cos( A / 180.0 * 3.14159)-(MRad +o)* cos(((Rad+MRad)/MRad)* A / 180.0 * 3.14159);
Q.y = (Rad +MRad)*sin( A / 180.0 * 3.14159)-(MRad +o)* sin(((Rad+MRad)/MRad)* A / 180.0 * 3.14159);
Q.x+= Amp2* sin( (A / 180.0 * 3.14159)*Frequency+Phase);
Q.y+= Amp* sin(( A / 180.0 * 3.14159)*Frequency);
Q.z=0;
//Q = Q+ center;
vecList [A].x=Q.x;
vecList [A].y=Q.y;
vecList [A].z=A*2;

}



//the shape
Vec3d vecList2[gridH];
int Rad2=30;
int angle;

int petals=10; //number of petals
float iRad= 10; //inner radius
float Amp3=20; //petal length
float Rad3;


int m = round(720/petals);
float Wavelength;
if (m%2==0)
{
Wavelength= m;
}
else
{
Wavelength=m+1;
}




for(angle = 0; angle < gridH; angle++){
float An = 360.0 /gridH * angle;
Rad3= iRad+abs(Amp3*(cos((An/ 180.0 * 3.14159)/Wavelength*360.0)));
P.x = (cos(An/ 180.0 * 3.14159) * Rad3);
P.y = sin(An/ 180.0 * 3.14159) * Rad3;
P.z=0;

vecList2[angle].x=P.x;
vecList2[angle].y=P.y;
vecList2[angle].z=P.z;
//vecList2[angle].y=(vecList2[angle].y)+angle/15;
//vecList2[angle].y=P.y


}


/*
for(angle = 0; angle < gridH; angle++){
float An = 2*3.1416 /gridH * angle;
P.x = cos(An) * Rad2;
P.y = sin(An) * Rad2;
P.z=0;

vecList2[angle].x=P.x;
vecList2[angle].y=P.y;
vecList2[angle].z=P.z;


}
*/





for (int i=0; i<gridW; i++){

if(i==0){
parallel= vecList[i+1]-vecList[i];

}

parallel=vecList[i]-vecList[i-1];

normal=parallel.cross(Up);
normal.normalize();
side= parallel.cross(normal);
side.normalize();
P= vecList[i];



for(int j=0; j<gridH; j++)

{
R= P+(side*vecList2[j].x)+(normal*vecList2[j].y);


grid[i][j]=R;
}
}




}

 


void Mesh::calculateNormal()
{



for (int i=0; i<gridW; i++){

for(int j=0; j<gridH; j++){

normPoints[i][j].x=0;
normPoints[i][j].y=0;
normPoints[i][j].z=0;
}
}

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

for(int j=0; j<gridH-1; j++)
{
//
Vec3d A = grid[i][j];
Vec3d B =grid[i+1][j];
Vec3d C =grid[i+1][j+1];
Vec3d D=grid[i][j+1];
Vec3d AB= B-A;
Vec3d AC= C-A;

Vec3d AD= D-A;

Vec3d Normal= AB.cross(AC);
Vec3d Normal2= AD.cross(AC);
//Vec3d Normal= AB.cross(Up);

//Vec3d Side= Normal.cross(AB);



normPoints[i][j] = normPoints[i][j]+ Normal;
normPoints[i+1][j]= normPoints[i+1][j]+ Normal;
normPoints[i+1][j+1]=normPoints[i+1][j+1]+Normal;
normPoints[i][j] = normPoints[i][j]+ Normal2;
normPoints[i][j+1]= normPoints[i][j+1]+ Normal2;
normPoints[i+1][j+1]= normPoints[i+1][j+1]+Normal2;

}

}
for (int i=0; i<gridW; i++)
{

for(int j=0; j<gridH; j++)
{
normPoints[i][j].normalize();
//printf( "%f %f %f", normPoints[i][j].x, normPoints[i][j].y,normPoints[i][j].z);

}
}

 

}