# While-Schleife - Kreise und Quadrate



## Harald (15. Nov 2006)

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: 
	

	
	
		
		

		
			





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!


----------



## Wildcard (15. Nov 2006)

Die Aufgabe finde ich mal kreativ   
http://de.wikipedia.org/wiki/Quadrat_(Geometrie)


----------



## Harald (15. Nov 2006)

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 (15. Nov 2006)

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


----------



## Beni (15. Nov 2006)

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 (15. Nov 2006)

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...


----------



## Harald (15. Nov 2006)

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


----------



## Wildcard (15. Nov 2006)

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:


```
d=(2*d)/Math.sqrt(2);
```


----------



## Harald (15. Nov 2006)

das klingt schonmal ganz gut 
werd ich morgen ma ausprobieren!

vielen dank schonmal


----------



## rakete (17. Nov 2006)

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


----------



## Gast (17. Nov 2006)

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!!!


----------



## Wildcard (17. Nov 2006)

rakete hat gesagt.:
			
		

> funzt nicht, die draw methode will einen int, die wurzel benötigt aber einen double um zu funktionieren..


casten?  :roll:


----------



## rakete (18. Nov 2006)

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


----------



## Wildcard (18. Nov 2006)

```
int i = (int) 2.34;
```


----------



## Guest (19. Nov 2006)

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?



```
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);
			
			
			
			
		}
    }
}
```


----------



## Wildcard (19. Nov 2006)

Also deine Formatierung ist ja mal...  :shock: 


> Wie bekomme ich es hin, das die g.draw* methode einen kommawert annimmt?


Das geht nicht, da es eben keine halben Pixel gibt.


> vielleicht kann da jemand etwas draus machen was der compiler nicht ablehnt...


Dann könntest du ja auch dazuschreiben was er zu bemängeln hat.


----------



## Harald (19. Nov 2006)

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:


```
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;
          }
    }
}
```


----------



## rakete (19. Nov 2006)

edit: spitze lösung... ich hab die ecke einfach nciht bekommen.. *grmpf*


----------

