Ok. Ich hab es initialisiert..
aber wie krieg da jetzt die x[] und y[] werte rein?
sodass ich für points.x alle meine x-koordinaten habe und für points.y alle y-koordinaten?
Sorry steh gerade aufm Schlauch..sitze schon zulange davor..
..........Point[] points =newPoint[n];for(int i =0; i < sides; i++){
x[i]= cx +Math.cos(i * theta)*1;
y[i]= cy +Math.sin(i * theta)*1;
points[i]=newPoint(x[i], y[i]);this.points = points;System.out.println(points[i].x);}System.out.println(points[0].x);}Bei meiner ersten Ausgabe-->1.0-0.4999999999999998-0.5000000000000004Kriege ich die Punkte, die ich brauche,also in der Schleife gibt er mit das richtige raus.Bei meiner zweiten Ausgabe-->-0.5000000000000004
das kriege ich für points[0].x,points[1].x,points[2].x
immer das gleiche??
warum nicht..
points[0].x -->1.0
points[1].x--->-0.4999999999999998
points[2].x -->-0.5000000000000004
Hier mein kompletter Quellcode, für diese Klasse...
Für diese Aufgabe habe ich noch die Klasse Point, Angle und App, die main() beinhaltet.
Java:
publicclassPolygon{privatePoint[] points;publicint sides;privatedouble theta, radius, cx, cy;privatedouble x[];privatedouble y[];publicPolygon(Point[] points){this.points = points;}// end polygon points// Punkte rotierenpublicPolygonrotate(Angle phi){for(int i =0; i <this.points.length; i++){this.points[i].rotate(phi);}returnnewPolygon(newPoint[]{newPoint(points[0].x, points[0].y)});}// Punkte verschiebenpublicPolygontranslate(Point point){for(int i =0; i <this.points.length; i++){
points[i].shift(Point.x,Point.y);}returnnewPolygon(newPoint[]{newPoint(points[0].x, points[0].y)});}// Eckpunkte generierenpublicPolygon(int n){Point args =newPoint(n);
sides = n;// n-ecken
x =newdouble[sides];
y =newdouble[sides];
theta =2.0*Math.PI / sides;
cx =0;// Mittelpunkt
cy =0;Point[] points =newPoint[n];for(int i =0; i < sides; i++){
x[i]= cx +Math.cos(i * theta)*1;
y[i]= cy +Math.sin(i * theta)*1;
points[i]=newPoint(x[i], y[i]);this.points = points;}}// end polygon npublicvoiddraw(){}}// end Isogon
Hat keiner eine Idee, warum meine Punkte in Point[], alle mit dem gleichen Punkt besetzt sind,
sodass ich für points[0].x ,points[1].x,points[2].x......... immer den gleichen Wert hab und nicht die gewünschten x-Koordinaten, die ich ja in x[0], x[1],... ja habe??
Ich habe es gerade bei mir mal ausgeführt und bekomme drei verschiedene Punkte ausgegeben.
Was mir aber auffällt:
- Du erzeugst im Konstruktor eine lokale Variable "points". Entferne die und arbeite besser direkt auf dem privaten Point-Array. Es müllt den Code nur unnötig zu.
- die Variable Point args wird nie benutzt
- Warum erzeugst du die x- und y-Arrays? Du arbeitest nie mit ihnen, sondern speicherst die Werte direkt in einer Point-Instanz. Auch das würde ich vereinfachen und mit lokalen Variablen arbeiten, die ins Array geschrieben werden.
(Außerdem kostet dich die Erzeugung eines Arrays mehr Speicher als ein Integer, aber das ist wahrscheinlich Korinthenkackerei....)
- Außerdem würde ich Zeile 59 und 61 entfernen und stattdessen die draw()-Methode aufrufen. Man versucht, Redundanz und Dopplungen zu vermeiden, um eventuelle Änderungen nur an einer Stelle vornehmen zu müssen.
Also es muss new Polygon(i).rotate(phi).translate(pos.rotate(phi)).draw(); ausgeführt werden und für die Methode draw()
brauch ich zwei double[] damit ich meine Polygone zeichnen kann, mit dem Befehl StdDraw.polygon(double[]x,double[]y)
Ja das war das Problem...zu oft falsch static angewendet.
Jetzt kriege ich die Punkte richtig.
Ich hab dafür mit getter und setter gearbeitet,danach hat es funktioniert.