Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.72 KB | None | 0 0
  1. import java.applet.Applet;
  2. import java.awt.AlphaComposite;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.RenderingHints;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseMotionListener;
  8. import java.awt.AlphaComposite;
  9. import java.awt.Graphics;
  10. import java.awt.Graphics2D;
  11. import java.awt.RenderingHints;
  12. import java.awt.event.MouseEvent;
  13. import java.awt.event.MouseMotionListener;
  14.  
  15.  
  16. public class OhTannenbaum extends Applet implements MouseMotionListener{
  17.     final public int STARTPOINTCOUNT = 15;
  18.     final public int STARTPOINTS[][] = new int [STARTPOINTCOUNT][2];
  19.     final public int APPLETWIDTH = 640;
  20.     final public int APPLETHEIGHT = 480;
  21.     public int maxDisplacement = 3;
  22.     public int tannenbaumRepeats = 10;
  23.     public int drawedPoints[][][] = new int[100][STARTPOINTCOUNT][2];
  24.    
  25.     /**
  26.      * Initialisierung des Applets
  27.      */
  28.     public void init() {
  29.         // Fenstergröße des Applets einstellen
  30.         setSize(APPLETWIDTH,APPLETHEIGHT);
  31.         // Die Startpunkte für die Form des Tannenbaums
  32.         STARTPOINTS[0][0] = 300; STARTPOINTS[0][1] = 400;
  33.         STARTPOINTS[1][0] = 200; STARTPOINTS[1][1] = 400;
  34.         STARTPOINTS[2][0] = 200; STARTPOINTS[2][1] = 350;
  35.         STARTPOINTS[3][0] = 50;  STARTPOINTS[3][1] = 350;
  36.         STARTPOINTS[4][0] = 150; STARTPOINTS[4][1] = 250;
  37.         STARTPOINTS[5][0] = 100; STARTPOINTS[5][1] = 250;
  38.         STARTPOINTS[6][0] = 200; STARTPOINTS[6][1] = 150;
  39.         STARTPOINTS[7][0] = 150; STARTPOINTS[7][1] = 150;
  40.         STARTPOINTS[8][0] = 250; STARTPOINTS[8][1] = 50;
  41.         STARTPOINTS[9][0] = 350; STARTPOINTS[9][1] = 150;
  42.         STARTPOINTS[10][0] = 300; STARTPOINTS[10][1] = 150;
  43.         STARTPOINTS[11][0] = 400; STARTPOINTS[11][1] = 250;
  44.         STARTPOINTS[12][0] = 350; STARTPOINTS[12][1] = 250;
  45.         STARTPOINTS[13][0] = 450; STARTPOINTS[13][1] = 350;
  46.         STARTPOINTS[14][0] = 300; STARTPOINTS[14][1] = 350;
  47.         drawedPoints[0] = STARTPOINTS;
  48.         //STARTPOINTS = scalePointPosition(STARTPOINTS,0.7f);
  49.         // Applet wird selbst als MouseMotionListener angemeldet, so dass es auf Maus-Ereignisse hoert
  50.         addMouseMotionListener(this);
  51.     }
  52.    
  53.    
  54.     /**
  55.      * Zeichen der Figur
  56.      *
  57.      * @param g Grafik-Kontext des Applets, auf den gezeichnet wird
  58.      */
  59.     public void paint(Graphics g){
  60.         // Casting des Grafik-Kontextes, so dass man auch Antialiasing verwenden kann
  61.         Graphics2D g2d = (Graphics2D)g;
  62.        
  63.         // setze dann wirklich den ANTIALIASING-Modus fuer das Zeichnen
  64.         g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  65.        
  66.         // definiere die Transparenz als Alpha-Wert, mit der gezeichnet werden soll
  67.         AlphaComposite ac1 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.21f);
  68.         g2d.setComposite(ac1);
  69.         // Mit den Startkoordinaten des Tannenbaums anfangen
  70.         int recentlyDrawedPoints[][] = STARTPOINTS;
  71.         // und dann kann das Zeichnen auch endlich losgehen
  72.         for (int i = 0; i < tannenbaumRepeats; i++) {
  73.             recentlyDrawedPoints = STARTPOINTS;
  74.             recentlyDrawedPoints = calculatePointPosition(STARTPOINTS, maxDisplacement, 1);
  75.             for (int j = 0; j < recentlyDrawedPoints.length; j++) {
  76.                 int nextPoint = j+1;
  77.                 if (nextPoint >= recentlyDrawedPoints.length) {
  78.                     nextPoint = 0;
  79.                 }
  80.                 g2d.drawLine(recentlyDrawedPoints[j][0], recentlyDrawedPoints[j][1], recentlyDrawedPoints[nextPoint][0], recentlyDrawedPoints[nextPoint][1]);
  81.             }
  82.         }
  83.     }
  84.  
  85.     // Berechnet die Abweichung der übergebenen Figur "figure" mit der maximalen Abweichung "randomFactor".
  86.     public int[][] calculatePointPosition(int figure[][], int randomFactor, int calculateRepeats) {
  87.         if (randomFactor == 0) {
  88.             return figure;
  89.         }
  90.         for (int i = 0; i < calculateRepeats; i++) {
  91.             for (int j = 0; j < figure.length; j++) {
  92.                 figure[j][0]+=(int)(Math.random()*maxDisplacement*2-maxDisplacement);
  93.                 figure[j][1]+=(int)(Math.random()*maxDisplacement*2-maxDisplacement);
  94.             }
  95.         }
  96.         return figure;
  97.     }
  98.    
  99.     // Berechnet die Skalierung der übergebenen Figur "figure" mit dem Skalierungsfaktor "scaleFactor".
  100.     public int[][] scalePointPosition(int figure[][], float scaleFactor) {
  101.         if (scaleFactor <= 0) {
  102.             return figure;
  103.         }
  104.         for (int i = 0; i < figure.length; i++) {
  105.             figure[i][0]*=scaleFactor;
  106.             figure[i][1]*=scaleFactor;
  107.         }
  108.         return figure;
  109.     }
  110.    
  111.     // Berechnet die Translation (Verschiebung) der übergebenen Figur "figure" mit dem X-Wert "translateX" und dem Y-Wert "translateY"
  112.     public int[][] translatePointPosition(int figure[][], int translateX, int translateY) {
  113.         if (translateX == 0 && translateY == 0) {
  114.             return figure;
  115.         }
  116.         for (int i = 0; i < figure.length; i++) {
  117.             figure[i][0]+=translateX;
  118.             figure[i][1]+=translateY;
  119.         }
  120.         return figure;
  121.     }
  122.    
  123.     /**
  124.      * Maus-Bewegung steuert die Berechnung der Figur und stoesst den Zeichenprozess neu an.
  125.      *
  126.      * @param e Event-Objekt, in dem die Informationen über die Maus-Position stehen
  127.      */
  128.     @Override
  129.     public void mouseDragged(MouseEvent e) {
  130.         /* diese Methode muss zwar da sein, falls ein passendes Ereignis passiert,
  131.          *  aber es wird in dem Fall nichts gemacht
  132.          */
  133.     }
  134.  
  135.     /**
  136.      * Maus-Bewegung steuert die Berechnung der Figur und stoesst den Zeichenprozess neu an.
  137.      *
  138.      * @param e Event-Objekt, in dem die Informationen über die Maus-Position stehen
  139.      */
  140.     @Override
  141.     public void mouseMoved(MouseEvent e) {
  142.         int x;
  143.         int y;
  144.  
  145.         // Hole die Koordinaten der Maus aus dem Event
  146.         x = e.getX();
  147.         y = e.getY();
  148.        
  149.         /* berechne Faktor von 0 (linke Seite) bis 1 (rechte Seite).
  150.          * Um die Breite des Fensters fuer die Berechnung zu kann man
  151.          * die Methode getWidth() aufrufen, die dann die Breite in Pixel
  152.          * zurueck gibt.
  153.          */
  154.        
  155.         // mit dem neuen Faktor sollte man dann die Figur auch neu berechnen
  156.        
  157.        
  158.         // und wenn alles neu berechnet wurde, wird das Zeichnen mit repaint() angestossen
  159.         repaint();
  160.     }
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement