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@11:2cd6341136ca, 2019-03-24 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |