# Koordinaten bei drawArc und drawLine



## JavaGast (14. Mai 2004)

Welche Funktion erfüllen die Parameter, die ich z.B. bei 
	
	
	
	





```
g.drawArc (0,0,400,400,0,360);
		g.drawLine(200,200,0,220);
```
 habe?


Danke für eure Hilfe!


----------



## bygones (14. Mai 2004)

rtfAPI

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.html#drawArc(int,%20int,%20int,%20int,%20int,%20int)
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Graphics.html#drawLine(int,%20int,%20int,%20int)

Das steht dort explizit da....


----------



## JavaGast (15. Mai 2004)

Danke!

Ich möchte ein Ziffernblatt erstellen doch weiß ich nicht genau wie ich z.B. die Markierung für die 5 Minutenschritte auf dem Kreis realisiere. 


```
g.setColor(Color.blue);
		g.drawArc (0,0,400,400,0,360);
		g.drawLine(0,200,400,200);
		
		g.setColor(Color.red);
		g.drawLine (200,0,200,400);
		g.drawLine (200,200,300,150)
```


Wie kann ich jetzt nun die Markierungen anbriengen oder wie ausrechnen?[/quote]


----------



## Donut (16. Mai 2004)

kompliziert aber es geht:


```
int m_x = 500; //x- Koordinate des Mittelpunktes
int m_y = 500; //y- Koordinate des Mittelpuniktes

int r = 500; //Radius in px
int l = 50; //Länge der markierung in px
int markierung = 5; //anzahl minuten pro markierung

int grad = 360/(60/markierung);
float verschiebung_x = (cos (90-grad))*r;
float verschiebung_y = (sin (90-grad))*r;
float verschiebung_x2 = l/r*((cos (90-grad))*r);
float verschiebung_y2 = l/r*((sin (90-grad))*r);

for( int i = 0; i<= 360; i+= grad)
{
	g.drawLine(m_x+verschiebung_x, m_y-verschiebung_y, (int) ((m_x+verschiebung_x)-verschiebung_x2),  (int) ((m_y-verschiebung_y)+verschiebung_y2);
}
```


----------



## JavaGast (16. Mai 2004)

Danke für deinen Lösungsvorschlag!
Ich habe mal diesen Quelltext eingefügt, aber es werden Fehler angezeigt. 


```
g.setColor(Color.blue);
		g.drawArc (0,0,1000,1000,0,360);
		/*g.drawLine(0,200,400,200);
		
		g.setColor(Color.red);
		g.drawLine (200,0,200,400);
		g.drawLine (200,200,330,50);*/
		
		int m_x = 500; //x- Koordinate des Mittelpunktes 
		int m_y = 500; //y- Koordinate des Mittelpuniktes 

		int r = 500; //Radius in px 
		int l = 50; //Länge der markierung in px 
		int markierung = 5; //anzahl minuten pro markierung 

		int grad = 360/(60/markierung); 
		float verschiebung_x = (float) ((Math.cos (90-grad))*r); 
		float verschiebung_y = (float) ((Math.sin (90-grad))*r); 
		float verschiebung_x2 = (float) (l/r*((Math.cos (90-grad))*r)); 
		float verschiebung_y2 = (float) (l/r*((Math.sin (90-grad))*r)); 

		for( int i = 0; i<= 360; i+= grad) 
		
		   g.drawLine((int) (m_x+verschiebung_x), (int) (m_y-verschiebung_y), (int) ((m_x+verschiebung_x)-verschiebung_x2),  (int) ((m_y-verschiebung_y)+verschiebung_y2));
```

Das Ziffernblatt wird aber nicht Angezeigt. Der Kreis wurde deinen Koordinaten angepasst.


----------



## Donut (16. Mai 2004)

Math.sin und Math.cos beinhalten den Radialen, aber nicht den Winkel-sinus bzw. cosinus


----------



## JavaGast (16. Mai 2004)

Deine Lösung funktioniert bei mit nicht, da sin und cos immer unterstrichen werden. Das Ziffernblatt wird auch nicht erstellt.


----------



## Donut (16. Mai 2004)

ja klar ich hatte sin und cos nur so hingeschrieben, sodass man weiß, was gemeint ist .....
funktionieren tut es so:

```
g.setColor(Color.blue);
g.drawArc (0,0,500,500,0,360);
      
int m_x = 250; //x- Koordinate des Mittelpunktes
int m_y = 250; //y- Koordinate des Mittelpuniktes

float r = 250; //Radius in px
float l = 50; //Länge der markierung in px
int markierung = 5; //anzahl minuten pro markierung

int grad = (int) 360/(60/markierung);
for( int i = 0; i< 360; i+= grad)
{
	double verschiebung_x = r*Math.cos(Math.toRadians(90)-Math.toRadians(i));
	double verschiebung_y = r*Math.sin(Math.toRadians(90)-Math.toRadians(i));
	double verschiebung_x2 = (l/r)*((Math.cos(Math.toRadians(90)-Math.toRadians(i)))*r);
	double verschiebung_y2 = (l/r)*((Math.sin(Math.toRadians(90)-Math.toRadians(i)))*r);
	g.drawLine((int) (m_x+verschiebung_x), (int) (m_y-verschiebung_y), (int) ((m_x+verschiebung_x)-verschiebung_x2),  (int) ((m_y-verschiebung_y)+verschiebung_y2));
}
```


----------



## Guest (16. Mai 2004)

Danke!


----------

