Guest User

Untitled

a guest
May 27th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.56 KB | None | 0 0
  1. /*
  2. * Created on 2005-06-15
  3. *
  4. * TODO To change the template for this generated file go to
  5. * Window - Preferences - Java - Code Style - Code Templates
  6. */
  7. package rw.animacja;
  8.  
  9. import java.awt.Color;
  10. import java.awt.Cursor;
  11. import java.awt.Graphics;
  12. import java.awt.GraphicsDevice;
  13. import java.awt.GraphicsEnvironment;
  14. import java.awt.Image;
  15. import java.awt.Point;
  16. import java.awt.Rectangle;
  17. import java.awt.Toolkit;
  18. import java.awt.event.ActionEvent;
  19. import java.awt.event.ActionListener;
  20. import java.awt.event.KeyEvent;
  21. import java.awt.event.KeyListener;
  22. import java.awt.image.BufferStrategy;
  23. import java.awt.image.MemoryImageSource;
  24.  
  25. import javax.swing.JFrame;
  26. import javax.swing.Timer;
  27.  
  28. /**
  29. * Wyświetlacz
  30. *
  31. * @author Rafał Wileczek
  32. * @created 4 maj 2005
  33. */
  34. public class WyswietlaczFrame extends JFrame implements KeyListener,
  35. ActionListener {
  36.  
  37. static final long serialVersionUID = 1;
  38.  
  39. // Zmienne związane z przechodzeniem na pełny ekran
  40. private GraphicsDevice device;
  41.  
  42. private GraphicsEnvironment environment;
  43.  
  44. private BufferStrategy strategy;
  45.  
  46. private Integer[][] kwadrat_wzor = { { 1000, 1000, -1000 }, // e
  47. { 1000, -1000, -1000 }, // f
  48. { -1000, -1000, -1000 }, // g
  49. { -1000, 1000, -1000 }, // h
  50. { 1000, 1000, 1000 }, // a
  51. { 1000, -1000, 1000 }, // b
  52. { -1000, -1000, 1000 }, // c
  53. { -1000, 1000, 1000 } // d
  54. };
  55.  
  56. private Integer[][] kwadrat = null;
  57.  
  58. private Integer[][] kwadrat_pers = null;
  59.  
  60. private Integer[][] siatka = {
  61. // kwadrat z tyłu
  62. { 4, 5 }, // e-f
  63. { 5, 6 }, // f-g
  64. { 6, 7 }, // g-h
  65. { 7, 4 }, // h-e
  66. // połączenia
  67. { 0, 4 }, // a-e
  68. { 1, 5 }, // b-f
  69. { 2, 6 }, // c-g
  70. { 3, 7 }, // d-h
  71. // kwadrat z przodu
  72. { 0, 1 }, // a-b
  73. { 1, 2 }, // b-c
  74. { 2, 3 }, // c-d
  75. { 3, 0 } // d-a
  76. };
  77.  
  78. Integer odl_ekr = 6000;
  79.  
  80. Integer xo = 0;
  81.  
  82. Integer yo = 1;
  83.  
  84. Integer zo = 30;
  85.  
  86. Double rad_incr = 2 * Math.PI / 720;
  87.  
  88. Double kat = 0.0;
  89.  
  90. Integer dx;
  91.  
  92. Integer dy;
  93.  
  94. private Timer timer = null;
  95.  
  96. private int czas = 10;
  97.  
  98. /**
  99. * Konstruktor klasy WyswietlaczFrame
  100. *
  101. */
  102. public WyswietlaczFrame() {
  103. // Ustawienia okna
  104. setUndecorated(true);
  105. setResizable(false);
  106.  
  107. // Okno odbiera zdarzenia z klawiszy
  108. setFocusable(true);
  109. addKeyListener(this);
  110.  
  111. // Anulowanie domyślnego odświeżania ekranu
  112. setIgnoreRepaint(true);
  113.  
  114. // Pobranie "kontekstu urządzenia"
  115. environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
  116. device = environment.getDefaultScreenDevice();
  117.  
  118. kwadrat = new Integer[8][3];
  119. kwadrat_pers = new Integer[8][2];
  120.  
  121. timer = new Timer(czas, this);
  122. }
  123.  
  124. private void kopiujWzor() {
  125. for (int i = 0; i < 8; i++) {
  126. for (int j = 0; j < 3; j++) {
  127. kwadrat[i][j] = kwadrat_wzor[i][j];
  128. }
  129. }
  130. }
  131.  
  132. // Przekształcenia afiniczne
  133. private void kwadrat_obrotY(double alfa) {
  134. for (int i = 0; i < 8; i++) {
  135. Double a = kwadrat[i][0] * Math.cos(alfa) - kwadrat[i][2]
  136. * Math.sin(alfa);
  137. Double b = kwadrat[i][0] * Math.sin(alfa) + kwadrat[i][2]
  138. * Math.cos(alfa);
  139. kwadrat[i][0] = a.intValue();
  140. kwadrat[i][2] = b.intValue();
  141. }
  142. }
  143.  
  144. private void kwadrat_obrotX(double alfa) {
  145. for (int i = 0; i < 8; i++) {
  146. Double a = kwadrat[i][1] * Math.cos(alfa) - kwadrat[i][2]
  147. * Math.sin(alfa);
  148. Double b = kwadrat[i][1] * Math.sin(alfa) + kwadrat[i][2]
  149. * Math.cos(alfa);
  150. kwadrat[i][1] = a.intValue();
  151. kwadrat[i][2] = b.intValue();
  152. }
  153. }
  154.  
  155. private void kwadrat_obrotZ(double alfa) {
  156. for (int i = 0; i < 8; i++) {
  157. Double a = kwadrat[i][0] * Math.cos(alfa) - kwadrat[i][1]
  158. * Math.sin(alfa);
  159. Double b = kwadrat[i][0] * Math.sin(alfa) + kwadrat[i][1]
  160. * Math.cos(alfa);
  161. kwadrat[i][0] = a.intValue();
  162. kwadrat[i][1] = b.intValue();
  163. }
  164. }
  165.  
  166. private void kwadrat_pers() {
  167. for (int i = 0; i < 8; i++) {
  168. kwadrat_pers[i][0] = (kwadrat[i][0] * 768)
  169. / (odl_ekr + kwadrat[i][2]) + dx;
  170. kwadrat_pers[i][1] = (kwadrat[i][1] * 768)
  171. / (odl_ekr + kwadrat[i][2]) + dy;
  172. }
  173. }
  174.  
  175. private void paintCzarny() {
  176. Graphics g = strategy.getDrawGraphics();
  177.  
  178. Rectangle rect = this.getBounds();
  179. g.setColor(Color.black);
  180. g.fillRect(rect.x, rect.y, rect.width, rect.height);
  181.  
  182. strategy.show();
  183. }
  184.  
  185. /**
  186. * Tworzy niewidoczny kursor
  187. *
  188. * @return niewidoczny kursor
  189. */
  190. private Cursor createTransparentCursor() {
  191. int[] pixels = new int[16 * 16];
  192. Image image = Toolkit.getDefaultToolkit().createImage(
  193. new MemoryImageSource(16, 16, pixels, 0, 16));
  194. Cursor transparentCursor = Toolkit.getDefaultToolkit()
  195. .createCustomCursor(image, new Point(0, 0), "invisiblecursor");
  196. return transparentCursor;
  197. }
  198.  
  199. /**
  200. * Wejście w tryb pełnoekranowy
  201. */
  202. private void setFullScreen() {
  203. device.setFullScreenWindow(this);
  204. // Double buffering
  205. createBufferStrategy(2);
  206. strategy = getBufferStrategy();
  207. Rectangle r = this.getBounds();
  208. dx = (int) (r.getMaxX() / 2);
  209. dy = (int) (r.getMaxY() / 2);
  210. }
  211.  
  212. /**
  213. * Opuszczenie trybu pełnoekranowego
  214. */
  215. private void exitFullScreen() {
  216. device.setFullScreenWindow(null);
  217. strategy = null;
  218. }
  219.  
  220. /**
  221. * Otwarcie okna i rozpoczęcie wyświetlania
  222. */
  223. public void rozpocznijWyswietlanie() {
  224. // Wejście w tryb pełnoekranowy
  225. setFullScreen();
  226. paintCzarny();
  227. // Prezentacja okna
  228. setCursor(createTransparentCursor());
  229. setVisible(true);
  230.  
  231. timer.start();
  232. }
  233.  
  234. private void kresl() {
  235. // Przygotowujemy kwadrat
  236. kwadrat_pers();
  237.  
  238. Graphics g = strategy.getDrawGraphics();
  239. g.setColor(Color.black);
  240. Rectangle r = this.getBounds();
  241. g.fillRect(0, 0, r.width, r.height);
  242. g.setColor(Color.GREEN);
  243. // Rysujemy kwadrat
  244. for (int i = 0; i < 12; i++) {
  245. Integer p1 = siatka[i][0];
  246. Integer p2 = siatka[i][1];
  247. Integer x1 = kwadrat_pers[p1][0];
  248. Integer x2 = kwadrat_pers[p2][0];
  249. Integer y1 = kwadrat_pers[p1][1];
  250. Integer y2 = kwadrat_pers[p2][1];
  251.  
  252. g.drawLine(x1, y1, x2, y2);
  253. }
  254. strategy.show();
  255. }
  256.  
  257. /**
  258. * Zamknięcie okna i przywrócenie wartości początkowych klasy
  259. */
  260. public void zakonczWyswietlanie() {
  261. timer.stop();
  262. setCursor(null);
  263. exitFullScreen();
  264. setVisible(false);
  265. System.exit(0);
  266. }
  267.  
  268. // Akcja timera
  269. public void actionPerformed(ActionEvent e) {
  270. kopiujWzor();
  271. kwadrat_obrotX(2 * kat);
  272. kwadrat_obrotY(2 * kat / 3);
  273. kwadrat_obrotZ(kat / 2);
  274. kresl();
  275. kat += rad_incr;
  276. }
  277.  
  278. // Interfejs KeyListener - implementacja
  279. public void keyTyped(KeyEvent e) {
  280. }
  281.  
  282. public void keyPressed(KeyEvent e) {
  283. if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
  284. zakonczWyswietlanie();
  285. } else if (e.getKeyCode() == KeyEvent.VK_UP) {
  286. if (odl_ekr < 20000)
  287. odl_ekr += 200;
  288. } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
  289. if (odl_ekr > 400)
  290. odl_ekr -= 200;
  291. }
  292. }
  293.  
  294. public void keyReleased(KeyEvent e) {
  295. }
  296. }
Add Comment
Please, Sign In to add comment