-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cube.cs
84 lines (72 loc) · 2.82 KB
/
Cube.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace CSGame{
class Cube{
// Modify Line 53 of Game.cs to match the class name above
Setting game;
Point3D[] p = new Point3D[8];
Point3D[] r = new Point3D[8];
int x, y;
public int K;
public bool displayPoints = true;
int A=0,B=1,C=2,D=3,E=4,F=5,G=6,H=7;
public Cube(Setting game, int K){
this.game = game;
p[A] = new Point3D(-1,-1,-1);
p[B] = new Point3D(-1,-1,1);
p[C] = new Point3D(1,-1,1);
p[D] = new Point3D(1,-1,-1);
p[E] = new Point3D(-1,1,-1);
p[F] = new Point3D(-1,1,1);
p[G] = new Point3D(1,1,1);
p[H] = new Point3D(1,1,-1);
this.K = K;
for(int index = 0; index < p.Length; index++){
r[index] = p[index];
}
}
public void Draw(){
Point[] p = new Point[2];
int posx,posy;
x = game.mouseX;
y = game.mouseY;
int[,] edges = new int[,] {{C,D},{D,H},{H,G},{G,C},{G,F},{F,B},{B,C},{B,A},{E,A},{A,D},{E,H},{F,E}};
for(int index = 0; index < edges.GetLength(0); index++){
for(int pos = 0; pos < 2; pos++){
posx = (int)(K * r[edges[index,pos]].X)+x;
posy = (int)(K * r[edges[index,pos]].Y)+y;
p[pos] = new Point(posx,posy);
if(displayPoints) game.canvas.DrawString(""+ (char)(65+edges[index,pos]),game.form.Font,Brushes.Black,p[pos]);
}
game.canvas.DrawLine(new Pen(Color.Black),p[0],p[1]);
}
}
public void Rotate(double Az, double Ax, double Ay){
double tmpx, tmpy, tmpz;
for (int index = 0; index < r.Length; index++){
tmpx = Math.Cos(Az) * p[index].X + Math.Sin(Az) * p[index].Y + 0 * p[index].Z;
tmpy = -Math.Sin(Az) * p[index].X + Math.Cos(Az) * p[index].Y + 0 * p[index].Z;
tmpz = 0 * p[index].X + 0 * p[index].Y + 1 * p[index].Z;
r[index].X = tmpx; r[index].Y = tmpy; r[index].Z = tmpz;
}
for(int index = 0; index < r.Length; index++){
tmpx = 1 * r[index].X + 0 * r[index].Y * 0 * r[index].Z;
tmpy = 0 * r[index].X + Math.Cos(Ax) * r[index].Y + Math.Sin(Ax) * r[index].Z;
tmpz = 0 * r[index].X - Math.Sin(Ax) * r[index].Y + Math.Cos(Ax) * r[index].Z;
r[index].X = tmpx; r[index].Y = tmpy; r[index].Z = tmpz;
}
for(int index = 0; index < r.Length; index++){
tmpx = Math.Cos(Ay) * r[index].X + 0 * r[index].Y - Math.Sin(Ay) * r[index].Z;
tmpy = 0 * r[index].X + 1 * r[index].Y + 0 * r[index].Z;
tmpz = Math.Sin(Ay) * r[index].X + 0 * r[index].Y + Math.Cos(Ay) * r[index].Z;
r[index].X = tmpx; r[index].Y = tmpy; r[index].Z = tmpz;
}
}
public void Reset(){
for(int index = 0; index < p.Length; index++){
r[index] = p[index];
}
}
}
}