Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Cube/Cube.cpp
- Committer:
- el17cd
- Date:
- 2019-03-19
- Revision:
- 10:07a23afd5088
- Parent:
- 8:a667bc5050c1
- Child:
- 11:2cd6341136ca
File content as of revision 10:07a23afd5088:
//#include "mbed.h"
#include "Cube.h"
#include "math.h"
Cube::Cube(double x, double y, double z, double size){
xPos = x;
yPos = y;
zPos = z;
double v[8][3] = {{x-size, y+size, z-size},
{x-size, y+size, z+size},
{x+size, y+size, z+size},
{x+size, y+size, z-size},
{x-size, y-size, z-size},
{x-size, y-size, z+size},
{x+size, y-size, z+size},
{x+size, y-size, z-size}};
for(int vertex = 0; vertex < 8; vertex++){
for(int axis = 0; axis < 3; axis++){
verticies[vertex][axis] = v[vertex][axis];
}
}
double f0Points[4][3] = {{v[0][0], v[0][1], v[0][2]}, {v[1][0], v[1][1], v[1][2]}, {v[2][0], v[2][1], v[2][2]}, {v[3][0], v[3][1], v[3][2]}};
double f1Points[4][3] = {{v[0][0], v[0][1], v[0][2]}, {v[1][0], v[1][1], v[1][2]}, {v[5][0], v[5][1], v[5][2]}, {v[4][0], v[4][1], v[4][2]}};
double f2Points[4][3] = {{v[1][0], v[1][1], v[1][2]}, {v[2][0], v[2][1], v[2][2]}, {v[6][0], v[6][1], v[6][2]}, {v[5][0], v[5][1], v[5][2]}};
double f3Points[4][3] = {{v[3][0], v[3][1], v[3][2]}, {v[2][0], v[2][1], v[2][2]}, {v[6][0], v[6][1], v[6][2]}, {v[7][0], v[7][1], v[7][2]}};
double f4Points[4][3] = {{v[0][0], v[0][1], v[0][2]}, {v[3][0], v[3][1], v[3][2]}, {v[7][0], v[7][1], v[7][2]}, {v[4][0], v[4][1], v[4][2]}};
double f5Points[4][3] = {{v[4][0], v[4][1], v[4][2]}, {v[5][0], v[5][1], v[5][2]}, {v[6][0], v[6][1], v[6][2]}, {v[7][0], v[7][1], v[7][2]}};
faces[0].setVerticies(f0Points);
faces[1].setVerticies(f1Points);
faces[2].setVerticies(f2Points);
faces[3].setVerticies(f3Points);
faces[4].setVerticies(f4Points);
faces[5].setVerticies(f5Points);
}
Face Cube::getFace(int index){
return faces[index];
}
void Cube::rotateY(double angle){
double x = xPos;
double z = zPos;
xPos = x*cos(angle)-z*sin(angle);
zPos = x*sin(angle)+z*cos(angle);
for( int i = 0; i<12; i++){
double x = verticies[i][0];
double z = verticies[i][2];
verticies[i][0] = x*cos(angle)-z*sin(angle);
verticies[i][2] = x*sin(angle)+z*cos(angle);
}
double f0Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[3][0], verticies[3][1], verticies[3][2]}};
double f1Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}, {verticies[4][0], verticies[4][1], verticies[4][2]}};
double f2Points[4][3] = {{verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}};
double f3Points[4][3] = {{verticies[3][0], verticies[3][1], verticies[3][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}};
double f4Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[3][0], verticies[3][1], verticies[3][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}, {verticies[4][0], verticies[4][1], verticies[4][2]}};
double f5Points[4][3] = {{verticies[4][0], verticies[4][1], verticies[4][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}};
faces[0].setVerticies(f0Points);
faces[1].setVerticies(f1Points);
faces[2].setVerticies(f2Points);
faces[3].setVerticies(f3Points);
faces[4].setVerticies(f4Points);
faces[5].setVerticies(f5Points);
}
void Cube::rotateX(double angle){
double y = yPos;
double z = zPos;
xPos = y*cos(angle)-z*sin(angle);
zPos = z*cos(angle)+y*sin(angle);
for( int i = 0; i<12; i++){
double y = verticies[i][1];
double z = verticies[i][2];
verticies[i][1] = y*cos(angle)-z*sin(angle);
verticies[i][2] = z*cos(angle)+y*sin(angle);
}
double f0Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[3][0], verticies[3][1], verticies[3][2]}};
double f1Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}, {verticies[4][0], verticies[4][1], verticies[4][2]}};
double f2Points[4][3] = {{verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}};
double f3Points[4][3] = {{verticies[3][0], verticies[3][1], verticies[3][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}};
double f4Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[3][0], verticies[3][1], verticies[3][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}, {verticies[4][0], verticies[4][1], verticies[4][2]}};
double f5Points[4][3] = {{verticies[4][0], verticies[4][1], verticies[4][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}};
faces[0].setVerticies(f0Points);
faces[1].setVerticies(f1Points);
faces[2].setVerticies(f2Points);
faces[3].setVerticies(f3Points);
faces[4].setVerticies(f4Points);
faces[5].setVerticies(f5Points);
}
void Cube::translate(double x, double y, double z){
xPos += x;
yPos += y;
zPos += z;
for( int i = 0; i<12; i++){
double hyp = sqrt(pow(verticies[i][0],2) + pow(verticies[i][1], 2));
verticies[i][0] += x;
verticies[i][1] += y;
verticies[i][2] += z;
}
double f0Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[3][0], verticies[3][1], verticies[3][2]}};
double f1Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}, {verticies[4][0], verticies[4][1], verticies[4][2]}};
double f2Points[4][3] = {{verticies[1][0], verticies[1][1], verticies[1][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}};
double f3Points[4][3] = {{verticies[3][0], verticies[3][1], verticies[3][2]}, {verticies[2][0], verticies[2][1], verticies[2][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}};
double f4Points[4][3] = {{verticies[0][0], verticies[0][1], verticies[0][2]}, {verticies[3][0], verticies[3][1], verticies[3][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}, {verticies[4][0], verticies[4][1], verticies[4][2]}};
double f5Points[4][3] = {{verticies[4][0], verticies[4][1], verticies[4][2]}, {verticies[5][0], verticies[5][1], verticies[5][2]}, {verticies[6][0], verticies[6][1], verticies[6][2]}, {verticies[7][0], verticies[7][1], verticies[7][2]}};
faces[0].setVerticies(f0Points);
faces[1].setVerticies(f1Points);
faces[2].setVerticies(f2Points);
faces[3].setVerticies(f3Points);
faces[4].setVerticies(f4Points);
faces[5].setVerticies(f5Points);
}
bool Cube::despawn(){
if(zPos < -10){
return true;
}
return false;
}