Polygon erweitern

Polygon ist ziemlich antiquiert, für die meisten Dinge ist ein Path2D besser.
Das ist alles schön und gut, aber ich befürchte irgendwie, dass der Threadstarter irgendeine Hausaufgabe gekriegt hat, wo er beispielsweise den Umfang eines Fünfecks ausrechnen muss, und nun in den finsteren Abgründen von Java2D schmort, anstatt seine Hausaufgaben zu machen, und alles simple & stupid from scratch zu implementieren. :autsch:
 
Meine Gedanken wären Richtung Array gegangen und den schrittweise erweitert. Aber danke! Und ja ich werde wahrscheinlich festhängen. Und??? I frage das naechstemal um Erlaubnis ob ich was fragen darf.😳
 
Du in vollständigen Sätzen kannst? Bitte? Es ist anstrengend lesen so!!!...!::!:?! Danke.
Meine Gedanken wären Richtung Array gegangen und den schrittweise erweitert.
Das ist zwar schön, dass sie irgendwohin gegangen wären, aber bis zu deinem Post haben's die Gedanken anscheinend doch nicht geschafft, und Gedanken lesen können wir hier nicht. Es sind nur zwei nicht besonders ausführliche Fragen mit dem Stichwort "Polygon" herausgekommen, darauf hat sich dann eRaaaa gestürzt, und dir irgendein Monstrum aus der Standard-API herausgegraben, weil ihm auch nichts besseres eingefallen ist.

Also, fangen wir einfach nochmal an:
- Gib ein paar Anhaltspunkte, damit wir dein Niveau etwas eingrenzen können: bist du 12? Bist du ein Informatikstudent? Bist du vielleicht ein emeritierter Informatikprofessor? Die Antwort würde jeweils anders aussehen.
- Skizziere dein Problem, die Fragestellung, die Anforderungen...
- Beschreibe die Werkzeuge, die Du zur Lösung verwenden darfst/ sollst/ willst
(es sind jeweils völlig verschiedene Fragen, je nach dem, ob es um eine Isolierte Hausaufgabe ohne GUI, um eine AWT-basierte Bibliothek, oder um 3D-Grafik geht)
- Beschreibe deine bisherigen Lösungsansätze, poste ggf kurzes kompilierbares Beispiel
- Füge ggf. Fehlermeldungen hinzu etc.

Genaueres kannst du hier nachlesen: http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Wenn es um's dynamische Hinzufügen geht, sind Arrays normalerweise keine Option: ArrayList wäre da schon etwas besser, LinkedList wäre erheblich besser.
 
Zuletzt bearbeitet:
Also:
Java:
import java.awt.*;

class Example1 extends Frame{
	public Example1(){
		super("my window");
		setSize(400,300);
		setVisible(true);
	}
	
	public void paint(Graphics g){
		
		int[]x = new int[7];
		int[]y = new int[7];
		
		//int xx = 0;
		
		for(int yy = 0;yy<x.length;++yy){
			x[yy] = (int)(Math.random()*400);
			y[yy] = (int)(Math.random()*300);
		}
		
		g.drawPolygon(x,y,x.length);
		
		
		
	}
	
	public static void main(String[]args){
		new Example1();
	}
}

ein neues Gedankenspiel:
ich moechte in Polygon mit 7 Punkten darstellen. das sich nach einer Zeit immer verändert.
Polygon mit 7 Punkten habe ich. erstes Problem: es verändert sich wenn ich die Windowgrösse verändere. Gibt es ein Window das in seiner Größe fix ist?
Und bitte nicht zu hart mit mir ins Gericht gehen...
 
Und bitte nicht zu hart mit mir ins Gericht gehen...

Gehen wird normalerweise nicht. Ich verstehe 0x7F800000 im Moment auch nicht :bahnhof:

Hey, was'n los^^ hab ich hier jemanden versehentlich gelyncht :joke:? sorry, falls es so rübergekommen ist, ich bin grad in meiner ätzend-sarkastischen Stimmung^^ 😳 Aber ich find' man kann die Fragen wirklich etwas konkreter stellen, als beim ersten Versuch... Also: was meintest du nochmal mit "hinzufügen"? Ich hab dein Beispiel bisschen ergänzt, dass man nun mit mouseklick punkte einfügen kann, dort sieht man auch, inwiefern eine LinkedList besser zum Einfügen geeignet ist:
Java:
import javax.swing.*;
import java.awt.Graphics;
import java.awt.event.*;
import java.util.*;
import static java.lang.Math.*;

class Example1 extends JFrame{
    public Example1(){
        super("my window");
        setSize(400,300);
        // setResizable(false); // größe unveränderlich machen, falls nötig
        setVisible(true);
        
        // auf mausklicks hören
        addMouseListener(new MouseAdapter(){
        	@Override
        	public void mousePressed(MouseEvent e){
        		// beim klick punkt einfügen, alles neumalen
        		polygonLine.add(new Point(e.getX(), e.getY()));
        		repaint();
        	}
        });
    }
    
    /** minimalistische Klasse um Punkte darzustellen, gibts in der standard-API
     *  auch irgendwo schon
     */
    protected class Point{
    	int x;
    	int y;
    	public Point(int x, int y){
    		this.x = x; 
    		this.y = y;
    	}
    }
    
    /** der polygonzug als member variable, nicht als temporäre variable in paint,
     *  dann springt es beim neumalen nicht so lustig hin und her 
     */
    protected List<Point> polygonLine = new LinkedList<Point>();
    
    // beim initialisieren der Instanz irgendwie füllen, falls nötig
    // ("initializer block" nennt sich das, afair)
    /*
    {
    	for (int i = 0; i < 70; i++) 
    		polygonLine.add(new Point( (int)(random()*300 + 50), (int)(random()*200 + 50)));
    }
    */
    
    // das funzt zwar, ist aber schon recht brutal, 
    // direkt auf's fenster draufzumalen. irgendein spezialisiertes JComponent
    // wäre evtl ein bisschen angebrachter
    public void paint(Graphics g){
    	super.paint(g);
        if (!polygonLine.isEmpty()){
        	Point previous = polygonLine.get(polygonLine.size() - 1);
        	for (Point current: polygonLine){
        		g.drawLine(previous.x, previous.y, current.x, current.y);
        		previous = current;
        	}
        }
    }
    
    public static void main(String[]args){
        new Example1();
    }
}
klick mal rum, dann sieht man was...
Willst du das jetzt noch irgendwie "animieren", oder wie ist das mit "verändern" zu verstehen?
 
Zuletzt bearbeitet:

Zurück
Oben