ELEC2645 (2018/19) / Mbed 2 deprecated el17cd

Dependencies:   mbed

Committer:
el17cd
Date:
Sun Mar 24 12:31:38 2019 +0000
Revision:
11:2cd6341136ca
Parent:
10:07a23afd5088
Child:
13:f4de03202477
added horizon, rotating field of view when moving and collision detection

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17cd 7:15543cb10a14 1 //#include "mbed.h"
el17cd 4:759a5c34e239 2 #include "Cube.h"
el17cd 7:15543cb10a14 3 #include "math.h"
el17cd 4:759a5c34e239 4
el17cd 7:15543cb10a14 5 Cube::Cube(double x, double y, double z, double size){
el17cd 10:07a23afd5088 6 xPos = x;
el17cd 10:07a23afd5088 7 yPos = y;
el17cd 10:07a23afd5088 8 zPos = z;
el17cd 7:15543cb10a14 9 double v[8][3] = {{x-size, y+size, z-size},
el17cd 4:759a5c34e239 10 {x-size, y+size, z+size},
el17cd 4:759a5c34e239 11 {x+size, y+size, z+size},
el17cd 4:759a5c34e239 12 {x+size, y+size, z-size},
el17cd 4:759a5c34e239 13 {x-size, y-size, z-size},
el17cd 4:759a5c34e239 14 {x-size, y-size, z+size},
el17cd 4:759a5c34e239 15 {x+size, y-size, z+size},
el17cd 4:759a5c34e239 16 {x+size, y-size, z-size}};
el17cd 4:759a5c34e239 17
el17cd 4:759a5c34e239 18 for(int vertex = 0; vertex < 8; vertex++){
el17cd 4:759a5c34e239 19 for(int axis = 0; axis < 3; axis++){
el17cd 4:759a5c34e239 20 verticies[vertex][axis] = v[vertex][axis];
el17cd 4:759a5c34e239 21 }
el17cd 4:759a5c34e239 22 }
el17cd 7:15543cb10a14 23 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]}};
el17cd 7:15543cb10a14 24 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]}};
el17cd 7:15543cb10a14 25 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]}};
el17cd 7:15543cb10a14 26 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]}};
el17cd 7:15543cb10a14 27 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]}};
el17cd 7:15543cb10a14 28 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]}};
el17cd 4:759a5c34e239 29 faces[0].setVerticies(f0Points);
el17cd 4:759a5c34e239 30 faces[1].setVerticies(f1Points);
el17cd 4:759a5c34e239 31 faces[2].setVerticies(f2Points);
el17cd 4:759a5c34e239 32 faces[3].setVerticies(f3Points);
el17cd 4:759a5c34e239 33 faces[4].setVerticies(f4Points);
el17cd 4:759a5c34e239 34 faces[5].setVerticies(f5Points);
el17cd 4:759a5c34e239 35 }
el17cd 4:759a5c34e239 36
el17cd 4:759a5c34e239 37 Face Cube::getFace(int index){
el17cd 4:759a5c34e239 38 return faces[index];
el17cd 5:54d3b36fec2c 39 }
el17cd 5:54d3b36fec2c 40
el17cd 11:2cd6341136ca 41 bool Cube::tooClose(){
el17cd 11:2cd6341136ca 42 if (sqrt(pow(xPos, 2) + pow(yPos, 2) + pow(zPos, 2)) < 5){
el17cd 11:2cd6341136ca 43 return true;
el17cd 11:2cd6341136ca 44 }
el17cd 11:2cd6341136ca 45 return false;
el17cd 11:2cd6341136ca 46
el17cd 11:2cd6341136ca 47 }
el17cd 11:2cd6341136ca 48
el17cd 8:a667bc5050c1 49 void Cube::rotateY(double angle){
el17cd 10:07a23afd5088 50 double x = xPos;
el17cd 10:07a23afd5088 51 double z = zPos;
el17cd 10:07a23afd5088 52
el17cd 10:07a23afd5088 53 xPos = x*cos(angle)-z*sin(angle);
el17cd 10:07a23afd5088 54 zPos = x*sin(angle)+z*cos(angle);
el17cd 10:07a23afd5088 55
el17cd 5:54d3b36fec2c 56 for( int i = 0; i<12; i++){
el17cd 7:15543cb10a14 57 double x = verticies[i][0];
el17cd 7:15543cb10a14 58 double z = verticies[i][2];
el17cd 7:15543cb10a14 59
el17cd 8:a667bc5050c1 60 verticies[i][0] = x*cos(angle)-z*sin(angle);
el17cd 8:a667bc5050c1 61 verticies[i][2] = x*sin(angle)+z*cos(angle);
el17cd 8:a667bc5050c1 62
el17cd 8:a667bc5050c1 63 }
el17cd 8:a667bc5050c1 64 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]}};
el17cd 8:a667bc5050c1 65 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]}};
el17cd 8:a667bc5050c1 66 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]}};
el17cd 8:a667bc5050c1 67 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]}};
el17cd 8:a667bc5050c1 68 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]}};
el17cd 8:a667bc5050c1 69 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]}};
el17cd 8:a667bc5050c1 70 faces[0].setVerticies(f0Points);
el17cd 8:a667bc5050c1 71 faces[1].setVerticies(f1Points);
el17cd 8:a667bc5050c1 72 faces[2].setVerticies(f2Points);
el17cd 8:a667bc5050c1 73 faces[3].setVerticies(f3Points);
el17cd 8:a667bc5050c1 74 faces[4].setVerticies(f4Points);
el17cd 8:a667bc5050c1 75 faces[5].setVerticies(f5Points);
el17cd 8:a667bc5050c1 76 }
el17cd 8:a667bc5050c1 77
el17cd 11:2cd6341136ca 78
el17cd 11:2cd6341136ca 79 void Cube::rotateZ(double angle){
el17cd 11:2cd6341136ca 80 double y = yPos;
el17cd 11:2cd6341136ca 81 double x = xPos;
el17cd 11:2cd6341136ca 82
el17cd 11:2cd6341136ca 83 xPos = x*cos(angle)-y*sin(angle);
el17cd 11:2cd6341136ca 84 yPos = y*cos(angle)+x*sin(angle);
el17cd 11:2cd6341136ca 85
el17cd 11:2cd6341136ca 86 for( int i = 0; i<12; i++){
el17cd 11:2cd6341136ca 87 double y = verticies[i][1];
el17cd 11:2cd6341136ca 88 double x = verticies[i][0];
el17cd 11:2cd6341136ca 89
el17cd 11:2cd6341136ca 90 verticies[i][0] = x*cos(angle)-y*sin(angle);
el17cd 11:2cd6341136ca 91 verticies[i][1] = y*cos(angle)+x*sin(angle);
el17cd 11:2cd6341136ca 92
el17cd 11:2cd6341136ca 93
el17cd 11:2cd6341136ca 94 }
el17cd 11:2cd6341136ca 95 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]}};
el17cd 11:2cd6341136ca 96 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]}};
el17cd 11:2cd6341136ca 97 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]}};
el17cd 11:2cd6341136ca 98 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]}};
el17cd 11:2cd6341136ca 99 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]}};
el17cd 11:2cd6341136ca 100 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]}};
el17cd 11:2cd6341136ca 101 faces[0].setVerticies(f0Points);
el17cd 11:2cd6341136ca 102 faces[1].setVerticies(f1Points);
el17cd 11:2cd6341136ca 103 faces[2].setVerticies(f2Points);
el17cd 11:2cd6341136ca 104 faces[3].setVerticies(f3Points);
el17cd 11:2cd6341136ca 105 faces[4].setVerticies(f4Points);
el17cd 11:2cd6341136ca 106 faces[5].setVerticies(f5Points);
el17cd 11:2cd6341136ca 107 }
el17cd 11:2cd6341136ca 108
el17cd 8:a667bc5050c1 109 void Cube::rotateX(double angle){
el17cd 10:07a23afd5088 110 double y = yPos;
el17cd 10:07a23afd5088 111 double z = zPos;
el17cd 10:07a23afd5088 112
el17cd 10:07a23afd5088 113 xPos = y*cos(angle)-z*sin(angle);
el17cd 10:07a23afd5088 114 zPos = z*cos(angle)+y*sin(angle);
el17cd 10:07a23afd5088 115
el17cd 8:a667bc5050c1 116 for( int i = 0; i<12; i++){
el17cd 8:a667bc5050c1 117 double y = verticies[i][1];
el17cd 8:a667bc5050c1 118 double z = verticies[i][2];
el17cd 8:a667bc5050c1 119
el17cd 8:a667bc5050c1 120
el17cd 8:a667bc5050c1 121 verticies[i][1] = y*cos(angle)-z*sin(angle);
el17cd 8:a667bc5050c1 122 verticies[i][2] = z*cos(angle)+y*sin(angle);
el17cd 7:15543cb10a14 123
el17cd 6:75031d14fc0d 124 }
el17cd 7:15543cb10a14 125 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]}};
el17cd 7:15543cb10a14 126 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]}};
el17cd 7:15543cb10a14 127 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]}};
el17cd 7:15543cb10a14 128 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]}};
el17cd 7:15543cb10a14 129 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]}};
el17cd 7:15543cb10a14 130 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]}};
el17cd 6:75031d14fc0d 131 faces[0].setVerticies(f0Points);
el17cd 6:75031d14fc0d 132 faces[1].setVerticies(f1Points);
el17cd 6:75031d14fc0d 133 faces[2].setVerticies(f2Points);
el17cd 6:75031d14fc0d 134 faces[3].setVerticies(f3Points);
el17cd 6:75031d14fc0d 135 faces[4].setVerticies(f4Points);
el17cd 6:75031d14fc0d 136 faces[5].setVerticies(f5Points);
el17cd 6:75031d14fc0d 137 }
el17cd 6:75031d14fc0d 138
el17cd 6:75031d14fc0d 139
el17cd 7:15543cb10a14 140 void Cube::translate(double x, double y, double z){
el17cd 10:07a23afd5088 141
el17cd 10:07a23afd5088 142 xPos += x;
el17cd 10:07a23afd5088 143 yPos += y;
el17cd 10:07a23afd5088 144 zPos += z;
el17cd 10:07a23afd5088 145
el17cd 6:75031d14fc0d 146 for( int i = 0; i<12; i++){
el17cd 7:15543cb10a14 147 double hyp = sqrt(pow(verticies[i][0],2) + pow(verticies[i][1], 2));
el17cd 6:75031d14fc0d 148 verticies[i][0] += x;
el17cd 6:75031d14fc0d 149 verticies[i][1] += y;
el17cd 6:75031d14fc0d 150 verticies[i][2] += z;
el17cd 5:54d3b36fec2c 151 }
el17cd 7:15543cb10a14 152 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]}};
el17cd 7:15543cb10a14 153 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]}};
el17cd 7:15543cb10a14 154 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]}};
el17cd 7:15543cb10a14 155 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]}};
el17cd 7:15543cb10a14 156 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]}};
el17cd 7:15543cb10a14 157 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]}};
el17cd 5:54d3b36fec2c 158 faces[0].setVerticies(f0Points);
el17cd 5:54d3b36fec2c 159 faces[1].setVerticies(f1Points);
el17cd 5:54d3b36fec2c 160 faces[2].setVerticies(f2Points);
el17cd 5:54d3b36fec2c 161 faces[3].setVerticies(f3Points);
el17cd 5:54d3b36fec2c 162 faces[4].setVerticies(f4Points);
el17cd 5:54d3b36fec2c 163 faces[5].setVerticies(f5Points);
el17cd 10:07a23afd5088 164 }
el17cd 10:07a23afd5088 165
el17cd 10:07a23afd5088 166 bool Cube::despawn(){
el17cd 10:07a23afd5088 167 if(zPos < -10){
el17cd 10:07a23afd5088 168 return true;
el17cd 10:07a23afd5088 169 }
el17cd 10:07a23afd5088 170 return false;
el17cd 4:759a5c34e239 171 }