FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
JavaExercises/Experiments/RotatingCube.java at master · biblelamp/JavaExercises · GitHub
biblelamp
/
JavaExercises
Public
Notifications
You must be signed in to change notification settings
Fork
130
Star
153
Code
Issues
1
Pull requests
9
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
JavaExercises
/
Experiments
/
RotatingCube.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
95 lines (76 loc) · 2.7 KB
Breadcrumbs
JavaExercises
/
Experiments
/
RotatingCube.java
Copy path
File metadata and controls
95 lines (76 loc) · 2.7 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
85
86
87
88
89
90
91
92
93
94
95
// http://compgraphics.info/3D/3d_affine_transformations.php
// https://rosettacode.org/wiki/Draw_a_rotating_cube#Java
import
java
.
awt
.*;
import
java
.
awt
.
event
.
ActionEvent
;
import
static
java
.
lang
.
Math
.*;
import
javax
.
swing
.*;
public
class
RotatingCube
extends
JPanel
{
double
[][]
nodes
= {{-
1
, -
1
, -
1
}, {-
1
, -
1
,
1
}, {-
1
,
1
, -
1
}, {-
1
,
1
,
1
},
{
1
, -
1
, -
1
}, {
1
, -
1
,
1
}, {
1
,
1
, -
1
}, {
1
,
1
,
1
}};
int
[][]
edges
= {{
0
,
1
}, {
1
,
3
}, {
3
,
2
}, {
2
,
0
}, {
4
,
5
}, {
5
,
7
}, {
7
,
6
},
{
6
,
4
}, {
0
,
4
}, {
1
,
5
}, {
2
,
6
}, {
3
,
7
}};
public
RotatingCube
() {
setPreferredSize
(
new
Dimension
(
640
,
640
));
setBackground
(
Color
.
white
);
scale
(
100
);
rotateCube
(
PI
/
4
,
atan
(
sqrt
(
2
)));
new
Timer
(
17
, (
ActionEvent
e
) -> {
rotateCube
(
PI
/
180
,
0
);
repaint
();
}).
start
();
}
final
void
scale
(
double
s
) {
for
(
double
[]
node
:
nodes
) {
node
[
0
] *=
s
;
node
[
1
] *=
s
;
node
[
2
] *=
s
;
}
}
final
void
rotateCube
(
double
angleX
,
double
angleY
) {
double
sinX
=
sin
(
angleX
);
double
cosX
=
cos
(
angleX
);
double
sinY
=
sin
(
angleY
);
double
cosY
=
cos
(
angleY
);
for
(
double
[]
node
:
nodes
) {
double
x
=
node
[
0
];
double
y
=
node
[
1
];
double
z
=
node
[
2
];
node
[
0
] =
x
*
cosX
-
z
*
sinX
;
node
[
2
] =
z
*
cosX
+
x
*
sinX
;
z
=
node
[
2
];
node
[
1
] =
y
*
cosY
-
z
*
sinY
;
node
[
2
] =
z
*
cosY
+
y
*
sinY
;
}
}
void
drawCube
(
Graphics2D
g
) {
g
.
translate
(
getWidth
() /
2
,
getHeight
() /
2
);
for
(
int
[]
edge
:
edges
) {
double
[]
xy1
=
nodes
[
edge
[
0
]];
double
[]
xy2
=
nodes
[
edge
[
1
]];
g
.
drawLine
((
int
)
round
(
xy1
[
0
]), (
int
)
round
(
xy1
[
1
]),
(
int
)
round
(
xy2
[
0
]), (
int
)
round
(
xy2
[
1
]));
}
for
(
double
[]
node
:
nodes
)
g
.
fillOval
((
int
)
round
(
node
[
0
]) -
4
, (
int
)
round
(
node
[
1
]) -
4
,
8
,
8
);
}
@
Override
public
void
paintComponent
(
Graphics
gg
) {
super
.
paintComponent
(
gg
);
Graphics2D
g
= (
Graphics2D
)
gg
;
g
.
setRenderingHint
(
RenderingHints
.
KEY_ANTIALIASING
,
RenderingHints
.
VALUE_ANTIALIAS_ON
);
drawCube
(
g
);
}
public
static
void
main
(
String
[]
args
) {
SwingUtilities
.
invokeLater
(() -> {
JFrame
f
=
new
JFrame
();
f
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
f
.
setTitle
(
"Rotating Cube"
);
f
.
setResizable
(
false
);
f
.
add
(
new
RotatingCube
(),
BorderLayout
.
CENTER
);
f
.
pack
();
f
.
setLocationRelativeTo
(
null
);
f
.
setVisible
(
true
);
});
}
}
Back
|
FazBrowse Home
|
New Git URL