Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.67 KB | None | 0 0
  1. //FractalGUI class
  2. import java.awt.geom.*;
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import java.util.*;
  6.  
  7. import javax.swing.*;
  8.  
  9. public class FractalGUI extends JFrame {
  10.  
  11. ArrayList<ModifiedLine> linesFromModel;
  12. FractalGUI theGUI;
  13. Model theModel;
  14. ModifiedLine aLine;
  15. JTextField setDepthField = new JTextField(20);
  16. JPanel depthFieldPanel = new JPanel();
  17. JButton startFractal = new JButton("Fractalize!");
  18.  
  19. public static void main(String[] args) {
  20. Model model = new Model();
  21. FractalGUI theGUI = new FractalGUI(model);
  22. model.setTheGUI(theGUI);
  23. }
  24.  
  25. public FractalGUI(Model aModel) {
  26. super("Fractal Generator");
  27. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28. setLocationRelativeTo(null);
  29. setVisible(true);
  30. JPanel canvas = new DrawPanel();
  31. add(canvas, BorderLayout.NORTH);
  32. add(addTextFieldPanel(), BorderLayout.SOUTH);
  33. pack();
  34. theModel = aModel;
  35. setupLineArray();
  36.  
  37. }
  38.  
  39. public void setupLineArray() {
  40. linesFromModel = theModel.getLinesToDraw();
  41. }
  42.  
  43. public JPanel addTextFieldPanel() {
  44. depthFieldPanel.setLayout(new BorderLayout());
  45. setDepthField.setEditable(true);
  46. depthFieldPanel.add(setDepthField, BorderLayout.WEST);
  47. startFractal.addActionListener(new ButtonListener());
  48. depthFieldPanel.add(startFractal, BorderLayout.EAST);
  49. return depthFieldPanel;
  50. }
  51.  
  52. class ButtonListener implements ActionListener {
  53. public void actionPerformed(ActionEvent e) {
  54. if (e.getActionCommand() == "Fractalize!") {
  55. int depth = Integer.parseInt(setDepthField.getText());
  56. System.out.println(depth + "");
  57. for (ModifiedLine lines: linesFromModel) {
  58. linesFromModel = theModel.getLinesToDraw();
  59. theModel.toFiveLines(lines, depth);
  60. }
  61. repaint();
  62. }
  63. }
  64. }
  65.  
  66. class DrawPanel extends JPanel {
  67.  
  68. public DrawPanel(){
  69.  
  70. // Set window stuff
  71. setBackground(Color.gray); // window background color
  72. setPreferredSize(new Dimension(500,500));
  73. setResizable(false);
  74.  
  75. }
  76. public void paintComponent(Graphics g) {
  77. super.paintComponent(g);
  78. Graphics2D g2 = (Graphics2D) g;
  79. for (ModifiedLine lines: linesFromModel) {
  80. g2.setColor(Color.red);
  81. g2.draw(lines);
  82. }
  83. }
  84. }
  85.  
  86.  
  87. public Model getTheModel() {
  88. return theModel;
  89. }
  90.  
  91. public void setTheModel(Model theModel) {
  92. this.theModel = theModel;
  93. }
  94.  
  95. public ModifiedLine getaLine() {
  96. return aLine;
  97. }
  98.  
  99. public void setaLine(ModifiedLine aLine) {
  100. this.aLine = aLine;
  101. }
  102.  
  103. }
  104.  
  105.  
  106.  
  107.  
  108. //Model classimport java.awt.geom.*;
  109. import java.awt.*;
  110. import java.awt.event.*;
  111. import java.util.*;
  112.  
  113. import javax.swing.*;
  114.  
  115. public class Model {
  116. ArrayList<ModifiedLine> linesToDraw = new ArrayList<ModifiedLine>();
  117. FractalGUI theGUI;
  118.  
  119. public Model() {
  120. linesToDraw.add(new ModifiedLine(250.0, 300.0, 250.0, 200.0));
  121. linesToDraw.add(new ModifiedLine(250.0, 200.0, 350.0, 200.0));
  122. linesToDraw.add(new ModifiedLine(350.0, 200.0, 350.0, 300.0));
  123. linesToDraw.add(new ModifiedLine(350.0, 300.0, 250.0, 300.0));
  124. }
  125.  
  126. // converts a given line into 5 new lines that branch off of it
  127. public void toFiveLines(ModifiedLine line, int depth) {
  128. //creates new ArrayList of modifiedLines
  129. ArrayList<ModifiedLine> newLines = new ArrayList<ModifiedLine>();
  130.  
  131. //divides line length by 3 for calculations of new points
  132. double thirdOfLengthX = ((Math.abs(line.getX1() - line.getX2()))/3);
  133. double thirdOfLengthY = ((Math.abs(line.getY1() - line.getY2()))/3);
  134.  
  135. if (depth < 1) {
  136.  
  137. }
  138.  
  139. else {
  140.  
  141. newLines.add(new ModifiedLine(line.getX1(), line.getY1(), line.getX1(), line.getY1()-thirdOfLengthY));
  142.  
  143. // if both points have same x coordinate the line is vertical, then whichever
  144. // y point is higher determines orientation
  145.  
  146. // if both points have same y coordinate the line is vertical, then whichever
  147. // x point is higher determines orientation
  148.  
  149. if ( (line.getX1() == line.getX2()) && (line.getY2() < line.getY1()) ) {
  150. //first third of old vertical line
  151. newLines.add(new ModifiedLine(line.getX1(), line.getY1(), line.getX1(), line.getY1()-thirdOfLengthY));
  152. //last third of old vertical line
  153. newLines.add(new ModifiedLine(line.getX1(), line.getY1()-(2*thirdOfLengthY), line.getX1(), line.getY2()));
  154. //outside vertical line
  155. newLines.add(new ModifiedLine(line.getX1()-thirdOfLengthY, line.getY1()-(thirdOfLengthY), line.getX1()-thirdOfLengthY, line.getY1()-(2*thirdOfLengthY)));
  156. //outside bottom line
  157. newLines.add(new ModifiedLine(line.getX1(), line.getY1()-(thirdOfLengthY), line.getX1()-thirdOfLengthY, line.getY1()-(thirdOfLengthY)));
  158. //outside top line
  159. newLines.add(new ModifiedLine(line.getX1()-thirdOfLengthY, line.getY1()-(2*thirdOfLengthY), line.getX1(), line.getY1()-(2*thirdOfLengthY)));
  160.  
  161. }
  162. else if ( (line.getY1() == line.getY2()) && (line.getX1() < line.getX2()) ){
  163. //first third of old horizontal line
  164. newLines.add(new ModifiedLine(line.getX1(), line.getY1(), line.getX1()+thirdOfLengthX, line.getY1()));
  165. //last third of old horizontal line
  166. newLines.add(new ModifiedLine(line.getX1()+(2*thirdOfLengthX), line.getY1(), line.getX2(), line.getY1()));
  167. //outside horizontal line
  168. newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthX, line.getY1()-(thirdOfLengthX), line.getX1()+(2*thirdOfLengthX), line.getY1()-(thirdOfLengthX)));
  169. //outside "right" (relative to original line position)line
  170. newLines.add(new ModifiedLine(line.getX1()+(2*thirdOfLengthX), line.getY1()-thirdOfLengthX, line.getX1()+(2*thirdOfLengthX), line.getY1()));
  171. //outside "left" (relative to original line position)line
  172. newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthX, line.getY1(), line.getX1()+thirdOfLengthY, line.getY1()-(thirdOfLengthX)));
  173. }
  174. else if ( (line.getX1() == line.getX2()) && (line.getY2() > line.getY1()) ){
  175. //first third of old vertical line
  176. newLines.add(new ModifiedLine(line.getX1(), line.getY1(), line.getX1(), line.getY1()+thirdOfLengthY));
  177. //last third of old vertical line
  178. newLines.add(new ModifiedLine(line.getX1(), line.getY1()-(2*thirdOfLengthY), line.getX1(), line.getY2()));
  179. //outside vertical line
  180. newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthY, line.getY1()+(thirdOfLengthY), line.getX1()+thirdOfLengthY, line.getY1()+(2*thirdOfLengthY)));
  181. //outside top line
  182. newLines.add(new ModifiedLine(line.getX1(), line.getY1()+(thirdOfLengthY), line.getX1()+thirdOfLengthY, line.getY1()+(thirdOfLengthY)));
  183. //outside bottom line
  184. newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthY, line.getY1()+(2*thirdOfLengthY), line.getX1(), line.getY1()+(2*thirdOfLengthY)));
  185. }
  186. else if ( (line.getY1() == line.getY2()) && (line.getX1() > line.getX2()) ){
  187. //first third of old horizontal line
  188. newLines.add(new ModifiedLine(line.getX1(), line.getY1(), line.getX1()+thirdOfLengthX, line.getY1()));
  189. //last third of old horizontal line
  190. newLines.add(new ModifiedLine(line.getX1()+(2*thirdOfLengthX), line.getY1(), line.getX2(), line.getY1()));
  191. //outside horizontal line
  192. newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthX, line.getY1()-(thirdOfLengthX), line.getX1()+(2*thirdOfLengthX), line.getY1()-(thirdOfLengthX)));
  193. //outside "right" (relative to original line position)line
  194. newLines.add(new ModifiedLine(line.getX1()+(2*thirdOfLengthX), line.getY1()-thirdOfLengthX, line.getX1()+(2*thirdOfLengthX), line.getY1()));
  195. //outside "left" (relative to original line position)line
  196. newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthX, line.getY1(), line.getX1()+thirdOfLengthY, line.getY1()-(thirdOfLengthX)));
  197.  
  198. }
  199. else {
  200. // //test
  201. // //first third of old horizontal line
  202. // newLines.add(new ModifiedLine(line.getX1(), line.getY1(), line.getX1()+thirdOfLengthX, line.getY1()));
  203. // //last third of old horizontal line
  204. // newLines.add(new ModifiedLine(line.getX1()+(2*thirdOfLengthX), line.getY1(), line.getX2(), line.getY1()));
  205. // //outside horizontal line
  206. // newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthX, line.getY1()-(thirdOfLengthX), line.getX1()+(2*thirdOfLengthX), line.getY1()-(thirdOfLengthX)));
  207. // //outside "right" (relative to original line position)line
  208. // newLines.add(new ModifiedLine(line.getX1()+(2*thirdOfLengthX), line.getY1()-thirdOfLengthX, line.getX1()+(2*thirdOfLengthX), line.getY1()));
  209. // //outside "left" (relative to original line position)line
  210. // newLines.add(new ModifiedLine(line.getX1()+thirdOfLengthX, line.getY1(), line.getX1()+thirdOfLengthY, line.getY1()-(thirdOfLengthX)));
  211.  
  212. }
  213. }
  214. //add new Lines to list of lines to draw
  215. for (ModifiedLine lines: newLines) {
  216. linesToDraw.add(lines);
  217. }
  218. //remove original line
  219. linesToDraw.remove(line);
  220.  
  221. //Recursive method calls here on each new line created
  222. for (ModifiedLine lines: newLines) {
  223. toFiveLines(lines, depth-1);
  224. }
  225. // toFiveLines(newLines.get(0), depth-1);
  226. // toFiveLines(newLines.get(1), depth-1);
  227. // toFiveLines(newLines.get(2), depth-1);
  228. // toFiveLines(newLines.get(3), depth-1);
  229. // toFiveLines(newLines.get(4), depth-1);
  230.  
  231. }
  232.  
  233. public ArrayList<ModifiedLine> getLinesToDraw() {
  234. return linesToDraw;
  235. }
  236.  
  237. public void setLinesToDraw(ArrayList<ModifiedLine> linesToDraw) {
  238. this.linesToDraw = linesToDraw;
  239. }
  240.  
  241. public FractalGUI getTheGUI() {
  242. return theGUI;
  243. }
  244.  
  245. public void setTheGUI(FractalGUI theGUI) {
  246. this.theGUI = theGUI;
  247. }
  248.  
  249. }
  250.  
  251.  
  252.  
  253. //ModifiedLineimport java.awt.geom.*;
  254. import java.awt.*;
  255. import java.awt.event.*;
  256. import java.util.*;
  257. import javax.swing.*;
  258.  
  259.  
  260. public class ModifiedLine extends Line2D.Double {
  261.  
  262. // overrides Line2D.Double's constructor
  263. public ModifiedLine(double X1, double Y1, double X2, double Y2) {
  264. super(X1, Y1, X2, Y2);
  265. }
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement