Vieleck

Schaaaf

Bekanntes Mitglied
Hallo,

gibt es eine Möglichkeit ein Vieleck nach Anzahl des eingegebenen Int Werts zu zeichnen ?
Also wenn ich z.B. eine 3 eingebe, soll ein Dreieck gezeichnet werden, bei Eingabe einer 5 ein Fünfeck usw. Gibts da ne Möglichkeit?

Danke schon einmal
 

Opi3

Aktives Mitglied
Nur eine Idee.

Du hast einen Mittlepunkt,
und weist wie viel grad ein Kreis hat.
Jetzt setzt du die Punkte in der Entnervung n jeweils um KreisGrad/Anzahl um den Mittelpunkt gedreht angeordnet.

So, das müsste klappen...

Opi3

[EDIT]
Da bei meiner verdrehte Satzstellung eventuell nicht klar wird was ich meine:
AS3 (Fühle ich mich einfach heimischer)
//Mit var name:Art = ... werden in As3 Variablen deklariert.
Java:
	var A:Number = 360 / ecken;
	for (var i:int = 0; i<ringe; ++i)//Das mit den Ringen, kommt daher das ich den Codeausschnitt    
                                    //aus einem Mühlespiel das ich gemacht habe entnommen habe.
	{
		var E:int = (i+1)*50;
		for (var i2:int = 0; i2<ecken; ++i2)
		{
			var A2:Number = (A*i2+(A/2))/180*Math.PI;
			new Point(Math.sin(A2) * E,Math.cos(A2) * E);
		}
	}
[/EDIT]
 
Zuletzt bearbeitet:

tuttle64

Bekanntes Mitglied
Für Dein Problem kann man Java2D verwenden resp. entweder die Klasse Polygon oder auch die Klasse GeneralPath. Zum GEneralPath kann ich auch ein Beispiel aus dem Buch "Grundkurs Computergrafik mit Java" von F. Klawonn liefern. Zuerst das Programm GeneralPathExample.java:

Code:
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;

public class GeneralPathExample extends Frame {

	private static final long serialVersionUID = 1L;

	public GeneralPathExample() {
		addWindowListener(new MyFinishWindow());
	}
	
	public void paint(Graphics g) {
		Graphics2D g2d = (Graphics2D)g;
		g.setColor(Color.red);
		GeneralPath gp = new GeneralPath(); 
		gp.moveTo(60, 120); 
		gp.lineTo(80, 120); // vordere Unterboden
		gp.quadTo(90, 140, 100, 120); // Vorderreifen
		gp.lineTo(160, 120); // mittlere Unterboden
		gp.quadTo(170, 140, 180, 120); // Hinterreifen
		gp.lineTo(200, 120);
		gp.curveTo(195, 100, 200, 80, 160, 80); // Heck
		gp.lineTo(110, 80); // Dach
		gp.lineTo(90, 100); // Frontscheibe
		gp.lineTo(60, 100); // Motorhaube
		gp.lineTo(60, 120); // Front
		
		g2d.draw(gp);

	}
	
	public static void main(String[] args) {
		GeneralPathExample f = new GeneralPathExample();
		f.setTitle("GeneralPath Example");
		f.setBounds(100, 100, 500, 400);
		f.setVisible(true);
	}
}


und den Code für die Klasse MyFinishWindow

Code:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyFinishWindow extends WindowAdapter {

	public void windowClosing(WindowEvent arg0) {
		System.exit(0);

	}
}


Details zur Klasse Polygon findest Du hier: Polygon (Java Platform SE 6)
 

Schaaaf

Bekanntes Mitglied
Vielen Dank. Werde jetzt Path2D benutzen. Manchmal muss man einfach mal nur davon hören...
Jetzt noch kurz ein Hinweis bitte, wie ich das ganze in Abhängigkeit der Anzahl der Variablen lösen kann?!
 
Zuletzt bearbeitet:

Schaaaf

Bekanntes Mitglied
Sorry...alles klar.... Hab es jetzt so versucht :

Java:
double x,y;
x = x0 - d/2*Math.cos(360/e); 
y = y0 + d/2*Math.sin(360/e);

Wobei, x0,y0 der Mittelpunkt ist, e die Anzahl der Ecken und d der Durchmesser des Kreises ist.

Das sieht auch erstmal ganz ok aus...Aber dann komme ich nicht weiter...

Also, ich habe mit obigem den ersten Punkt (z.B. eines Dreiecks) rausbekommen und diese mit meinem (freigewähltem) Startpunkt verbunden. Nun suche ich den dritten Punkt... Aber weiß nicht genau, was ich in der Formel verändern muss..
 
Zuletzt bearbeitet:
S

SpagettiMonster

Gast
Ich würde alle Punkte berechnen, nicht nur 1 ...

[Java]

for(int i = 1 ; i <= e ; i++) {
new Point p;
p.setX( x0 - d/2*Math.cos(360/e *i) );
p.setY( y0 + d/2*Math.sin(360/e *i) );
pointArray = p;
}
.
.
.
paintMethode(pointArray);

[/Java]

Oder ne Liste oder oder oder...
 

Andi_CH

Top Contributor
So nebenbei - aber es passt ja in etwa zum Thema: Bin ich blind oder gibt es wirklich keine vorgefertigte polar <-> rechtwinklig Transformation?
 

Andi_CH

Top Contributor
Ja, du bist blind :) [c]Math.atan2[/c], [c]Math.hypot[/c]

Java:
int x = (int)(Math.cos(a) * radius);
int y = (int)(Math.sin(a) * radius);

Das habe ich natürlich auch aber zu einem Punkt würde IMHO ein Konstruktor mit Distanz und Winkel gehören, genau so wie entsprechende getter. Na ja, Java ist halt alles andere als Vollständig :D

So -es ist TO -Fütterungszeit :)

Not fully tested and not optimzed! :)

Java:
import java.awt.Point;
import java.util.Vector;

public class Vieleck {
	private final int abstand;
	private Vector<Point> points = new Vector<Point>();

	public Vieleck(int radius) {
		abstand = radius;
	}

	private void log(double ang, int x, int y) {
		System.out.println("Neuer Punkt: Winkel = " + Math.toDegrees(ang) + " Grad, X = " + x + ", Y = " + y);
	}

	public void generatePolygon( int anzahl) {
		points.removeAllElements();
		final double angle = Math.toRadians(360.0 / anzahl);
		for(double a=0.0; a<2*Math.PI; a+=angle) {
			int x = (int)(Math.cos(a) * abstand);
			int y = (int)(Math.sin(a) * abstand);
			log(a, x, y);
			points.add(new Point(x, y));
		}
	}

	@Override
	public String toString() {
		return points.toString();
	}

	public static void main(String[] args) {
		Vieleck ve = new Vieleck(10);
		for (int i=1; i<=4; i++) {
			ve.generatePolygon(i);
			System.out.println(ve);
		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Hilfe: Klasse Vieleck Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben