Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Rotationsalgorithmus unvollständig » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 3 Beiträge
Tommy1234

Vielen Dank. Es funktioniert. Du bist der erste nach zahlreichen Foreneinträgen, der mein Problem auf Anhieb verstanden hat.

Herzlichen Dank.

Gruß Tommy
eulerscheZahl

Ungetestet, sollte aber klappen. Wenn nicht, bitte etwas mehr Code, damit ich mir nicht extra selbst eine Testfunktion schreiben muss.
code:
1:
deltaPhi = (soll-ist+360) % 360; //deltaPhi ist im Bereicht [0; 359]

if (deltaPhi < 180) {
//...
}
else {
//...
}[/code]
Tommy1234 Rotationsalgorithmus unvollständig

Hallo,

seit längerem beschäftige ich mich mit Rotationen und kann auch schon einige Erfolge verbuchen. Allerdings komme ich bei einem Algorithmus für die Rotaion nicht weiter. Ich arbeite in Java SE.

Das Programm macht folgendes:

Es wird per JButton ein Sprite erzeugt, welches angeklickt und damit rot umrandet wird. Wenn man nun irgendwo in das JFrame klickt dreht sich das Sprite um sich selbst bis es den Winkel zwischen Maus und Sprite erreicht hat und bewegt sich zum Mauszeiger hin.(Hoffe soweit verständlich!).

Aufbau:
Im Konstruktor hab ich den Anfangswinkel mit 0 initialisiert, so dass sich dieser erst zur Laufzeit verändert. Ausserdem hab ich eine eigene Methode, die den Winkel dann zur Laufzeit berechnet und zurückgibt als Double. Der Winkel ist im Bogenmaß. Darüber hinaus habe ich noch für die vier Quadranten Anpassungen vorgenommen, dass ein vollständiger Kreis entsteht. Also von 0 bis 2 PI.

Für die Rotation nehme ich AffineTransform mit dessen Methode rotate(), die einen Winkel im Bogenmaß erwartet.

Das ganze ist in 2D und aus der Vogelperspektive.

Nun zu meinem Problem:

Ich hab mir gedacht ich nehme eine Ganzzahl und erhöhe bzw. vermindere diese um eins und übergebe diese dann der rotate-Methode. Ganzzahl deshalb, weil ich hier auf Gleichheit prüfen kann. Das Problem ist, wie decke ich alle Fälle(damit meine ich, dass die Rotation von Quadrant zu Quadrant korrekt!!! funktioniert) ab? Mein bisheriger Code deckt fast alle Fälle ab außer, wenn ich vom 4ten in den ersten will und umgekehrt, er nimmt nämlich da immer den längeren Weg.

Hier mal die Methode:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:

public double rotate(int soll){
		
		if(soll > ist){
			
				if(i==360){
					i=0;
				}
				if(i!=soll){
					i++;
				}
				else{
					ist=soll;
				}
		}
		else if(soll < ist){
			
			
				if(i==0){
					i=360;
				}
				if(i!=soll){
					i--;
				}
				else{
					ist=soll;
				}
			
		}
		
		
		
		return Math.toRadians(i);
	}







Wäre für Denkanstöße dankbar.

Gruß Tommy