While-Schleife - Kreise und Quadrate

Status
Nicht offen für weitere Antworten.
H

Harald

Gast
Hi Leute,
ich bin grad dabei die folgende Aufgabe zu lösen:

1. Erstellen Sie ein Applet mit der Größe 400x400.
2. Zeichnen Sie 5 Quadrate und 5 Kreise mit zunehmender Größe, programmiert mit einer Schleife.
3. Der kleinste Kreis soll einen Durchmesser von 80 Pixel haben und zentriert im Applet liegen.
4. Um den Kreis soll ein Quadrat gelegt werden, welches den Kreis an 4 Stellen berührt.
5. Um das Quadrat soll ein Kreis gelegt werden, welcher das Quadrat an 4 Stellen berührt.
usw.....

soll dann so aussehen:
java.jpg


Nun habe ich folgendes Problem,
ich habe die Quadrate und Kreise gezeichnet, allerdings komme ich einfach nicht auf den Faktor
den ich bei jeder Schleife dazuaddieren muss.
Mein Quelltext sieht momentan so aus:

import java.applet.*;
import java.awt.*;

public class UebZeichneKreisRechteck1 extends java.applet.Applet
{
public void paint (java.awt.Graphics g)
{
int xPos = 175;
int yPos = 175;
int breite = 50;
int hoehe = 50;
int counter = 1;

int xposvar = xPos;
int yposvar = yPos;
int breitevar = breite;
int hoehevar = hoehe;

int faktor = 0;

while (counter <= 10)
{

g.drawOval(xposvar,yposvar,breitevar,hoehevar);
g.drawRect(xposvar,yposvar,breitevar,hoehevar);
xposvar-=15*faktor;
yposvar-=15*faktor;
breitevar+=30*faktor;
hoehevar+=30*faktor;
faktor+=1;
counter++;
}
}
}

muss man in irgendeinerweise "pi" mit einbauen?
habt ihr ne ahnung?

schon jetzt tausend dank für eure antworten!
 
H

Harald

Gast
jau, da haste recht! echt kreativ...

deinen link kann ich irgendwie nich einbauen,
glaub ich stehe n bisschen auf dem schlauch.

hatte auch shcon was mit quadratur des kreises gefunden,
aber irgendwie hat mir das alles nich weitergeholfen.
 

Wildcard

Top Contributor
Da stehen doch die Formeln für In- und Umkreis.
btw, Quadratur des Kreises ist was anderes :lol:
 
B

Beni

Gast
Wenn ein Kreis die Mitte am Punkt 0/0 hat, und einen Radius "r", dann sind die vier Eckpunkt eines inneren Quadrates z.B. +-sqrt(2)*r, +-sqrt(2)*r (sqrt=Wurzel). Vielleicht hilft dir das weiter.
 

Wildcard

Top Contributor
Einfacher (wie in Wiki beschrieben):
Umkreisradius: a/sqrt(2)
Inkreisradius: a/2

Da alle Objekte den gleichen Mittelpunkt haben ist es damit kein Problem sie zu berechnen...
 
H

Harald

Gast
najoh, das is mir ja klar...
nur ich muss die dinger ja über ne whileschleife generieren
und das bereitet mir probleme
 

Wildcard

Top Contributor
Sagen wir mal ganz pragmatisch durchmesser (d) beim kreis entspricht der seitenlänge beim quadrat.
1. kreis : d = 80
1. quadrat : d

Danach musst du in jeder iteration folgende Berechnung machen:

Code:
d=(2*d)/Math.sqrt(2);
 
H

Harald

Gast
das klingt schonmal ganz gut :)
werd ich morgen ma ausprobieren!

vielen dank schonmal
 
R

rakete

Gast
funzt nicht, die draw methode will einen int, die wurzel benötigt aber einen double um zu funktionieren.. :(
 
G

Gast

Gast
Das ist ja richtig SCHWER! versuche schon seit 2 Stunden das hin zu bekommen... Achja kleiner Tipp, der kleinste Kreis ist 50X50 und keine 80X80!!!
 
R

rakete

Gast
ich weiß nicht was "casten" in diesem zusammenhang bedeutet :( bin doch blutiger java anfänger...
 
G

Guest

Gast
das geht nicht klar... hier mal mein testcode... vielleicht kann da jemand etwas draus machen was der compiler nicht ablehnt...
ein guter Tip ist aber auch immer gut...oder die beantwortung der Frage: Wie bekomme ich es hin, das die g.draw* methode einen kommawert annimmt?


Code:
import java.applet.*;
import java.awt.*;
 
public class RecKreis extends Applet
{
	public void paint(Graphics g)
	{
		int 		PosR		=	175;
		int 		PosK		=	175;

//		int		breiteR		= (int)	80.00;
//		int		breiteK		= (int)	80.00;

		int 		Farbe1		=	255;
		int 		Farbe2		=	0;
		
//		int		a		=	2;
//		float	a		=	;
		
		
		while (breiteR<=300)
		{
			g.setColor	(new Color(Farbe2,0,Farbe1));
			
			Farbe2			=	Farbe2+25;
			Farbe1			=	Farbe1-25;
			
			g.drawOval(PosK,PosK,breiteK,breiteK);
			int breiteK		= 	(int)	(2*breiteK)/Math.sqrt(2);
			PosK			=	PosK-(18);
			
		  	g.drawRect(PosR,PosR,breiteR,breiteR);
			int breiteR		= 	(int)	(2*breiteR)/Math.sqrt(2);
			PosR			=	PosR-(20);
			
			
			
			
		}
    }
}
 
H

Harald

Gast
Die Variable, in die der Wert aus der Wurzel etc. kommt, darf nicht int sein...
hab die als double deklariert und es funtzt!
Vielen Dank euch allen!!!

Hier der Quellcode:

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

public class UebZeichneKreisRechteck1 extends Applet
{
   public void paint(Graphics g)
   {
       
       int i=0;         //Zählervariable
       double faktor=0;         //Faktor für die Größenfestlegung und Positionierung
       int xPos=160;        //X-Position des 1. Rechtecks/Kreises
       int yPos=160;        //Y-Position des 1. Rechtecks/Kreises
       int breite=80;        //Breite des 1. Rechtecks/Kreises   
       int hoehe=80;       //Höhe des 1. Rechtecks/Kreises
       
       while(i<5)   //führe aus, solange Zählervariable i<5
          {
             i++;         //i=i+1
             g.drawOval(xPos,yPos,breite,hoehe);      //Zeichnen des Kreises
             g.drawRect(xPos,yPos,breite,hoehe);      //Zeichnen des Rechtecks
             faktor=breite*Math.sqrt(2)-breite;      //Berechnung des Faktors
             breite+=faktor;      //weitere Rechtecke/Kreise je Faktor breiter
             hoehe+=faktor;     //weitere Rechtecke/Kreise je Faktor höher
             xPos-=faktor/2;      //Lage der weiteren Rechtecke/Kreise
             yPos-=faktor/2;
          }
    }
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben