Dreieck spiegeln

  • Themenstarter Themenstarter VivaLaHarry
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
V

VivaLaHarry

Gast
moin zusammen,

in unserem Anfängerkurs Informatik lernen wir gerade die grundlegenden Funktionen von Java. Dabei werden uns natürlich auch einige Aufgaben aus dem Aufgabenbuch gestellt und aufgegeben. Eine Aufgabe, die für viele schon mehr als das Limit darstellt, beschäftigt mich zurzeit ziemlich stark:

"Ein beliebiges Dreieck soll gezeichnet und an einer vertikalen Achse gespiegelt werden."
Mein Lösungsversuch erschien mir anfangs sehr einfach und logisch .. aber irgendwie funktioniert es nicht wie gewollt und ich erkenn' den Fehler leider nicht.

Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class Dreieck2 extends Applet {
       public Dreieck2() {
              setBackground(Color.green);
       }
         public void Dreieck2 (Graphics stift) {
         stift.setColor(Color.black);
         int zielpunktex[] = new int [4];
         int Punktexy[] = { 33, 33, 20, 40, 45, 60, 33, 33};
         int Achse = 80;
         for (int n=0; n<3; n+=1) {
              zielpunktex[n] = Achse-Punktexy[1+(2*n)]+Achse;
         }
                for (int m=0; m<6; m+=2) {
                    stift.drawLine(Punktexy[m+1], Punktexy[m+2], Punktexy[m+3], Punktexy[m+4]);
                }
                stift.drawLine(Achse,1,Achse,500);
                for (int m=0; m<6; m+=1) {
                    stift.drawLine(zielpunktex[m], Punktexy[m+2], zielpunktex[m+1], Punktexy[m+4]);
                }
         }
}

Wäre schön, wenn mir da mal wer rüberschauen könnte.

MfG,
VivaLaHarry
 
dein Fehler ist, dass das da aufjedenfall kein Applet ist 😉
Am besten liest du dich da nochmal ein, z.B. bei
http://www.galileocomputing.de/open...20_001.htm#mj44a15b773537ae29ddbb34d29b3783a7


das hier gibt dir wenigstens mal eine Ausgabe (auch wenn noch einige Fehler drin sind, am besten überdenkst du zuerst mal deine for Schleife, die wirft nämlich eine ArrayIndexOutOfBoundsException und ist so überhaupt nicht notwendig, verkompliziert das ganze nur unnötig 😉)
Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Dreieck2 extends Applet { 
          
       @Override
       public void init() {
           setBackground(Color.GREEN); 
       }    
       
       @Override
       public void paint(Graphics stift) {
           stift.setColor(Color.black); 
         int zielpunktex[] = new int [4]; 
         int Punktexy[] = { 33, 33, 20, 40, 45, 60, 33, 33}; 
         int Achse = 80; 
         for (int n=0; n<3; n+=1) { 
              zielpunktex[n] = Achse-Punktexy[1+(2*n)]+Achse; 
         } 
                for (int m=0; m<6; m+=2) { 
                    stift.drawLine(Punktexy[m+1], Punktexy[m+2], Punktexy[m+3], Punktexy[m+4]); 
                } 
                stift.drawLine(Achse,1,Achse,500); 
                for (int m=0; m<6; m+=1) { 
                    stift.drawLine(zielpunktex[m], Punktexy[m+2], zielpunktex[m+1], Punktexy[m+4]); 
                } 
         }    
}

ps.: ich hab den Code gerade zusammengebastelt, will dir die Freude an den Hausaufgaben aber nicht verderben, sonst lernst du ja nichts. Poste den nach weiteren Fortschritten aber gerne später.
 
moin zusammen,

habe jetzt nochmal alles durchgeschaut und dabei gemerkt, dass mein Programm nicht dadrauf eingeht, dass das Originaldreieck auch auf der anderen Seite liegen kann. Das habe ich nun angepasst. Andere Dinge fallen mir aber leider nicht auf. 😳

Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Dreieck2 extends Applet {

       @Override
       public void init() {
           setBackground(Color.GREEN);
       }

       @Override
       public void paint(Graphics stift) {
           stift.setColor(Color.black);
         int zielpunktex[] = new int [4];
         int Punktexy[] = { 33, 33, 20, 40, 45, 60, 33, 33};
         int Achse = 80;
         for (int n=0; n<3; n+=1) {
              if (Achse < Punktexy[1+(2*n)])
              zielpunktex[n] = Achse-(Achse-Punktexy[1+(2*n)]);
              else
              zielpunktex[n] = Achse+(Achse-Punktexy[1+(2*n)]);
         }
                for (int m=0; m<6; m+=2) {
                    stift.drawLine(Punktexy[m+1], Punktexy[m+2], Punktexy[m+3], Punktexy[m+4]);
                }
                stift.drawLine(Achse,1,Achse,500);
                for (int m=0; m<6; m+=1) {
                    stift.drawLine(zielpunktex[m], Punktexy[m+2], zielpunktex[m+1], Punktexy[m+4]);
                }
         }
}

MfG,
VivaLaHarry
 
da bekommst du aber immer noch die ArrayIndexOutOfBoundsException.

wie wäre sowas als Basis?

Code:
/*
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Dreieck2 extends JApplet { 
          
       @Override
       public void init() {
           setBackground(Color.WHITE); 
       }    
       
       @Override
       public void paint(Graphics stift) {
         int[] points = {40,40,110,50,75,175};
         int achseXKoord = 135;
         stift.setColor(Color.black); 
        
         stift.drawLine(points[0], points[1], points[2], points[3]);
         stift.drawLine(points[0], points[1], points[4], points[5]);
         stift.drawLine(points[2], points[3], points[4], points[5]);
         
         stift.setColor(Color.BLUE);
         stift.drawLine(achseXKoord, 0, achseXKoord, 200);
         stift.setColor(Color.BLACK);
         
         //Insert Spiegelung
   
}*/

fehlen nur noch die 3 Zeilen zur Spiegelung.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben