Programmieraufgabe - Grafische Oberfläche- falsches Ergebnis?

TomatenBrot447

Mitglied
Hallo,
ich versuche mich zurzeit an einner Aufgabe vom letzten Jahr aus der Uni. Diese Aufgabe ist eher für Java anfänger. Ich sitze schon seit einigen Wochen an der Aufgabe und kann meinen Fehler einfach nicht erkennen.
Ich weiß jetzt nicht, wie ich euch das jetzt am besten hier berichte, damit ihr meinen Fehler eventuell bemerkt und mir mitteilen könnt was denn jetzt genau nicht richtig ist.
Ich werde versuchen euch mein Problem etwas strukturiert hier darzulegen damit ihr mir folgen könnt. Zunächst einmal poste ich euch die Aufgabe (bzw. worum es in dieser aufgabe überhaupt geht) im Anschluss daran poste ich MEINE Bemühungen (also meinen Quellcode) und eventuell auch screenshots.
Ich hoffe ihr könnt mir helfen. Am Mittwoch diese Woche schreibe ich ne Prüfung und ich will da fit sein. Ich hoffe ich kann auf euch zählen :D
 

Anhänge

  • InfoII_P_SoSe2016_04_Projektaufgabe_2.pdf
    932 KB · Aufrufe: 17

TomatenBrot447

Mitglied
import java.awt.Polygon;
import java.awt.Point;

public class Isogon extends Polygon {

private Point mitte;
private int startwinkel;
private int radius;

public Isogon(){

}

public Isogon(int mitteX,int mitteY,int radius , int anzahlEcken){
this.mitte=new Point(mitteX,mitteY);
super.addPoint(this.mitte.x, this.mitte.y);
this.radius=radius;
this.npoints=anzahlEcken;

for (int i = 0; i < this.npoints; i++) {
Point a;
xpoints= (int)Math.round(this.radius* Math.cos(2*Math.PI*i/this.npoints));
ypoints= (int)Math.round(this.radius* Math.sin(2*Math.PI*i/this.npoints));
a = new Point(xpoints,ypoints);

}

}
public Isogon(int mitteX,int mitteY,int radius , int anzahlEcken, int startwinkel){
this.mitte=new Point(mitteX,mitteY);
super.addPoint(this.mitte.x, this.mitte.y);
this.radius=radius;
this.npoints=anzahlEcken;
this.startwinkel=startwinkel;

for (int i = 0; i < this.npoints; i++) {
xpoints= (int)Math.round(this.radius* Math.cos(Math.toRadians(this.startwinkel)+(2*Math.PI*i/this.npoints)));
ypoints= (int)Math.round(this.radius* Math.sin(Math.toRadians(this.startwinkel)+(2*Math.PI*i/this.npoints)));
super.addPoint(xpoints, ypoints);

}

}

public void setEckenzahl(int anzahlEcken){
this.npoints=anzahlEcken;
}
@Override
public void translate (int deltaX, int deltaY){

}
public void rotiere(int winkel){

}



public void verschiebeAufNeueMitte(int mitteX,int mitteY){

}

@Override
public void addPoint(int x, int y){
System.out.println("Das Hinzufügen von Koordinatenpunkten macht bei einem regelmäßigen Polygon keinen Sinn!");
}

@Override
public String toString(){
return "a";
}




}
 

Thallius

Top Contributor
Keine Lust mir das jetzt alles durchzulesen aber ich wette es ist mal wieder das übliche Problem dass du mit einem Grad Winkel rechnest obwohl cos aber eine Rad Winkel erwartet...
 

TomatenBrot447

Mitglied
nein , wie du siehst verwende ich doch die Methode
"xpoints= (int)Math.round(this.radius* Math.cos(Math.toRadians(this.startwinkel)+(2*Math.PI*i/this.npoints)));"
also das kann es nicht sein.
 

TomatenBrot447

Mitglied
das ist wirklich nicht viel. Die aufgabe verstehste in 3 min und wenn du dir meinen Quellcode in deine Entwicklungsumgebung kopierst dann haste das schon. Das sind eigentlich nur zwei Konstruktoren worauf es ankommt. Das ist viel weniger als du denkst.
 

JStein52

Top Contributor
Du errechnest in diesem Konstruktur ständig einen Point a, du machst aber gar nichst damit ?

Code:
public Isogon(int mitteX,int mitteY,int radius , int anzahlEcken){
this.mitte=new Point(mitteX,mitteY);
super.addPoint(this.mitte.x, this.mitte.y);
this.radius=radius;
this.npoints=anzahlEcken;

for (int i = 0; i < this.npoints; i++) {
Point a;
xpoints= (int)Math.round(this.radius* Math.cos(2*Math.PI*i/this.npoints));
ypoints= (int)Math.round(this.radius* Math.sin(2*Math.PI*i/this.npoints));
a = new Point(xpoints,ypoints);

}

}
 
X

Xyz1

Gast
Ich kann mich dran erinnern, vor geraumer Zeit, nicht allzu langer Zeit, das selber gemacht zu hab, und das kam bei raus:
LqiNjDt.png

Ich glaub, das ist auch das von @JStein52 , und die Methode sah ungefähr so aus:
Java:
        regpoly(g, Color.red, 3, 50, 100, 100);
        regpoly(g, Color.blue, 4, 50, 150, 150);
        regpoly(g, Color.yellow, 5, 50, 200, 200);
        regpoly(g, Color.green, 6, 50, 250, 250);
        regpoly(g, Color.magenta, 7, 50, 300, 300);

Nun ist die Frage, ob dir das iewie helfen könnte. Ich hab nämlich auch nicht die komplette Aufgabenstellung der PROJEKTaufgabe gelesen, das erscheint mir doch etwas viel, und auch nach Hausaufgaben!
 

Blender3D

Top Contributor
Du errechnest in diesem Konstruktur ständig einen Point a, du machst aber gar nichst damit ?
JStein52 hat recht das kann so nicht funktionieren. Isogon wird von Polygon abgeleitet. Das bedeutet Du berechnest die notwendigen Punkte richtig und fügst diese mittels der Methode super.addPoint(x, y) zu Deinem Isogon. Thats it!!.
Stolperstein ist hier vielleicht, den Mittelpunkt richtig mit einzubeziehen.
super.addPoint(this.mitte.x, this.mitte.y);
Das stimmt so nicht, da der Mittelpunkt zum Zeichnen von Polygon nicht verwendet wird.

xpoints= (int)Math.round(this.radius* Math.cos(2*Math.PI*i/this.npoints));
ypoints= (int)Math.round(this.radius* Math.sin(2*Math.PI*i/this.npoints));
Auch hier fehlt der Winkel zur Berechnung der Polarkoordinaten und der Mittelpunkt.
Tipp: Angabe genau lesen! :)
 

Blender3D

Top Contributor
Hier der Code für das Isogon.
Code:
import java.awt.Point;
import java.awt.Polygon;
public class Isogon extends Polygon {
    private static final long serialVersionUID = 1L;
    private Point mitte = null;
    private int radius = 0;
    private int numEcken = 0;
    public Isogon(int mitteX, int mitteY, int radius, int numEcken) {
        this.mitte = new Point(mitteX, mitteY);
        this.radius = radius;
        this.numEcken = numEcken;
        double alpha = 360.0 / numEcken;
        for (int n = 0; n < numEcken; n++) {
            int xp = (int) Math.round(radius * Math.cos(alpha + (2 * Math.PI * n) / numEcken)) + mitteX;
            int yp = (int) Math.round(radius * Math.sin(alpha + (2 * Math.PI * n) / numEcken)) + mitteY;           
            super.addPoint(xp, yp);
        }
    }
    public Point getMitte() {
        return mitte;
    }
    public int getNumEcken() {
        return numEcken;
    }
    public int getRadius() {
        return radius;
    }
}
 
Zuletzt bearbeitet:

Blender3D

Top Contributor
Hier eine Testklasse!
Code:
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JPanel;

public class TestPanel extends JPanel {
    private static final long serialVersionUID = 5563895549797564727L;
    private Isogon[] isogons = null;
    public TestPanel(int maxEcken, int radius) {   
        isogons = new Isogon[maxEcken - 2];
        int x = radius ;
        for (int n = 3; n <= maxEcken; n++) {
            isogons[n - 3] = new Isogon(x, x, radius, n);
            x+=radius+10;
        }
    }
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);        
        for (int i = 0; i < isogons.length; i++) {
            Point m = isogons[i].getMitte();
            g.drawPolygon(isogons[i]);
            g.drawLine(m.x, m.y, m.x, m.y); // test middle point       
        }
    }
}
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;

public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setPreferredSize(new Dimension(300, 300));
        frame.add( new TestPanel(7, 30), BorderLayout.CENTER );
        frame.pack();
        frame.setVisible(true);
    }
}
;)
 

TomatenBrot447

Mitglied
Ich kann mich dran erinnern, vor geraumer Zeit, nicht allzu langer Zeit, das selber gemacht zu hab, und das kam bei raus:
LqiNjDt.png

Ich glaub, das ist auch das von @JStein52 , und die Methode sah ungefähr so aus:
Java:
        regpoly(g, Color.red, 3, 50, 100, 100);
        regpoly(g, Color.blue, 4, 50, 150, 150);
        regpoly(g, Color.yellow, 5, 50, 200, 200);
        regpoly(g, Color.green, 6, 50, 250, 250);
        regpoly(g, Color.magenta, 7, 50, 300, 300);

Nun ist die Frage, ob dir das iewie helfen könnte. Ich hab nämlich auch nicht die komplette Aufgabenstellung der PROJEKTaufgabe gelesen, das erscheint mir doch etwas viel, und auch nach Hausaufgaben!
Ich habe doch gesagt : Das sind keine Hausaufgaben. Wie du in der PDF sehen kannst ist die Aufgabe vom Sommersemester 2016! Ich versuche nur die Aufgaben FÜR MICH zu lösen damit ich auf die kommende Prüfung besser vorbereitet bin :D
 

TomatenBrot447

Mitglied
Hier eine Testklasse!
Code:
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.JPanel;

public class TestPanel extends JPanel {
    private static final long serialVersionUID = 5563895549797564727L;
    private Isogon[] isogons = null;
    public TestPanel(int maxEcken, int radius) {  
        isogons = new Isogon[maxEcken - 2];
        int x = radius ;
        for (int n = 3; n <= maxEcken; n++) {
            isogons[n - 3] = new Isogon(x, x, radius, n);
            x+=radius+10;
        }
    }
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);       
        for (int i = 0; i < isogons.length; i++) {
            Point m = isogons[i].getMitte();
            g.drawPolygon(isogons[i]);
            g.drawLine(m.x, m.y, m.x, m.y); // test middle point      
        }
    }
}
Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;

public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setPreferredSize(new Dimension(300, 300));
        frame.add( new TestPanel(7, 30), BorderLayout.CENTER );
        frame.pack();
        frame.setVisible(true);
    }
}
;)
Da ich selber anfänger bin, weiß ich leider nicht was du jetzt mit "Testklasse " meinst ...
 

TomatenBrot447

Mitglied
Du errechnest in diesem Konstruktur ständig einen Point a, du machst aber gar nichst damit ?

Code:
public Isogon(int mitteX,int mitteY,int radius , int anzahlEcken){
this.mitte=new Point(mitteX,mitteY);
super.addPoint(this.mitte.x, this.mitte.y);
this.radius=radius;
this.npoints=anzahlEcken;

for (int i = 0; i < this.npoints; i++) {
Point a;
xpoints= (int)Math.round(this.radius* Math.cos(2*Math.PI*i/this.npoints));
ypoints= (int)Math.round(this.radius* Math.sin(2*Math.PI*i/this.npoints));
a = new Point(xpoints,ypoints);

}

}
Ja natürlich mach ich nichts damit. Erst wenn ich in der Hauptklasse ein Objekt erzeuge und meine Parameter eingebe, mache ich was damit . Oder hab ich da was falsch verstanden???
 

Blender3D

Top Contributor
Ja natürlich mach ich nichts damit. Erst wenn ich in der Hauptklasse ein Objekt erzeuge und meine Parameter eingebe, mache ich was damit . Oder hab ich da was falsch verstanden???
Wenn Deine Klasse Isogon erzeugt wird, wird deren Konsturktor aufgerufen. Dort berechnest Du Die notwendigen Punkte. Die berechneten Koordinaten werden aber, da es sich
1) um lokale Variablen handelt nach verlassen des Konstruktors gelöscht.
2) überschreibst Du die beiden int xpoints, und ypoints bei jedem Schleifendurchlauf.
Ziel ist es alle Punkte zu berechnen und sich zu merken, um diese für das Zeichnen verwenden zu können.
Polygon hat das schon implementiert und mittels der Methode addPoint der Klasse Polygon wird das erledigt. Siehe meine Klasse Isogon.:rolleyes:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Brauche Hilfe in Java Eclipse Programmieraufgabe Neuling Java Basics - Anfänger-Themen 3
Y Programmieraufgabe Java Basics - Anfänger-Themen 6
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
P Gelöste Programmieraufgabe ? Java Basics - Anfänger-Themen 12
S OO anfänger - gailer programmieraufgabe Java Basics - Anfänger-Themen 6
F Programmieraufgabe Java Basics - Anfänger-Themen 2
megachucky Suche Programmieraufgabe mit Lösungen. Java Basics - Anfänger-Themen 3
R Programmieraufgabe ! Java Basics - Anfänger-Themen 15
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
H Mehrsprachigkeit und grafische Oberflächen Java Basics - Anfänger-Themen 4
R Grafische Benutzeroberfläche GUI nachträglich einbauen Java Basics - Anfänger-Themen 3
T Grafische programme - Variblen Schrift Java Basics - Anfänger-Themen 2
D Viele grafische unterschiede von Windows xp zu Windows 7 Java Basics - Anfänger-Themen 3
T Einstieg in "grafische Progammierung" + Rechnen in Flussdiagramm Java Basics - Anfänger-Themen 2
I Grafische Benutzeroberflächen - welche Komponente nehme ich am besten? Java Basics - Anfänger-Themen 13
shiroX OOP Türme von Hanoi - einfache grafische Ausgabe Java Basics - Anfänger-Themen 2
K Panels, grafische Oberflächen Java Basics - Anfänger-Themen 7
K sich bewegende grafische Objekte Java Basics - Anfänger-Themen 68
S Grafische Oberfläche Quellcode ändern Java Basics - Anfänger-Themen 8
B Grafische Oberfläche für Java-Programm Java Basics - Anfänger-Themen 5
N Grafische Programmierung mit jeweils anderen Bildern bei versch. Ergebnissen Java Basics - Anfänger-Themen 9
F grafische Anzeige von Werten Java Basics - Anfänger-Themen 2
A Grafische Umsetzung von Aktienkursen Java Basics - Anfänger-Themen 2
M JavaSpiel ohne grafische Umsetzung Java Basics - Anfänger-Themen 3
T Grafische Oberfläche Java Basics - Anfänger-Themen 14
J Editor für grafische Oberfläche Java Basics - Anfänger-Themen 12
F Grafische Oberfläche.ist das kompliziert? Java Basics - Anfänger-Themen 7
G Grafische Oberfläche mit Buttons und Actionlistener? Java Basics - Anfänger-Themen 27
U Grafische Eingabe und ausgabe mit java Java Basics - Anfänger-Themen 5
V Grafische Auswertung (Ampel-System) Java Basics - Anfänger-Themen 12
B Grafische Darstellung einer Emailverteilerliste Java Basics - Anfänger-Themen 2
TechGirl JAVA GUI Oberfläche Umkreisung - wie heißt dieses Element? Java Basics - Anfänger-Themen 2
S Oberfläche aktualisiert nicht wegen sleep Java Basics - Anfänger-Themen 1
C class in main aufrufen (SWT Oberfläche) Java Basics - Anfänger-Themen 5
K Compilierfehler bei grafischer Oberfläche Java Basics - Anfänger-Themen 7
B eclipse Oberfläche zurück setzen Java Basics - Anfänger-Themen 2
B JPanel-Oberfläche speichern Java Basics - Anfänger-Themen 9
M Lottozahlen mit grafischer Oberfläche Java Basics - Anfänger-Themen 6
S Gui Oberfläche wird nicht richtig dargestellt Java Basics - Anfänger-Themen 5
D Oberfläche machen Java Basics - Anfänger-Themen 8
K Warum updated sich die Oberfläche nicht?! Java Basics - Anfänger-Themen 4
G Framework für eine Flexible Oberfläche! Java Basics - Anfänger-Themen 9
C Oberfläche & anderes Java Basics - Anfänger-Themen 6
C Oberfläche abscannen Java Basics - Anfänger-Themen 13
G Applet Oberfläche Java Basics - Anfänger-Themen 3
K Programm von selbsterstellter Oberfläche starten Java Basics - Anfänger-Themen 2
G Swing Oberfläche Java Basics - Anfänger-Themen 12
G JAR File will nicht von Oberfläche aus gestartet werden Java Basics - Anfänger-Themen 2
eQui Oberfläche mit Graphics zeichnen Java Basics - Anfänger-Themen 11
S Darstellungsfehler auf der Oberfläche Java Basics - Anfänger-Themen 6
M Datenbankabfrage über eine Java Oberfläche Java Basics - Anfänger-Themen 3
P Java Oberfläche mit Windows Feeling Java Basics - Anfänger-Themen 17
S Oberfläche - erhöht Java Basics - Anfänger-Themen 8
Y Grafikanwendungen zeigen keine Oberfläche an Java Basics - Anfänger-Themen 9
J Buttons mit graphischer, selbstgezeichneter Oberfläche Java Basics - Anfänger-Themen 9
Paule 2 Fragen zur grafischen Oberfläche Java Basics - Anfänger-Themen 5
S Graphische Oberfläche Java Basics - Anfänger-Themen 7
J Location von Oberfläche speichern Java Basics - Anfänger-Themen 6
G Laden und Speichern der Konfiguration einer gra. Oberfläche Java Basics - Anfänger-Themen 4
H Thread mit AWT-Oberfläche kombinieren Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben