Rotations Problem

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

mas93

Betreff: Rotations Problem

BeitragDo, Aug 07, 2008 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,
Ich bin gerade dabei von BB3d auf Bmax umzusteigen... jetzt gibts aber n Problem, was jetzt eigentlich nich speziell was mit Bmax zu tun hat... Da ich aber in Bmax programmiere poste ichs mal hier...

Folgendes Szeniario xD

Ich habe ein Raumschiffbild, welches gemidhandled wird und an koordinate xy gezeichnet wird.
Dazu habe ich noch ein Waffenbild(auch midhandled), welches an Koordinate x+wx,y+wy gezeichnet wird.

Jetzt sollen sich beide Bilder zur Mausausrichte. Das ist auch kein Problem, mittels Atan2 hab ich ja den Winkel...

Wenn ich aber jetzt beide Bilder in dem Winkel drehen lasse, stimmt die possition der Waffe natürlich nichtmehr... Ich hoffe ihr versteht was ich meine, hier ein Bild:

user posted image

Wie lässt sich das ausgleichen/beheben?
Gibts da nen Trick, oder muss man das i-wie berechnen(Wenn ja, wie?)

Wäre nett wenn ihr mir weiterhelfen könntet

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

amon

BeitragDo, Aug 07, 2008 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
vielleicht hab ich es falsch verstanden - aber, es kann nicht "ein" winkel sein - es müssen immer zwei winkel sein (einer fürs schiff, einer für die kanone). die beiden winkel sind zwar sehr ähnlich - aber fast nie gleich

mas93

BeitragDo, Aug 07, 2008 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du recht, aber das ist nicht das Problem Wink
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

Ava

Gast

BeitragDo, Aug 07, 2008 19:07
Antworten mit Zitat
Du musst die Position der Waffe neu berechnen (x+wx * cos + wy * sin , y+wy * cos - wx * sin) wobei cos/sin aus dem rotationswinkel berechnet werden ^^

mas93

BeitragDo, Aug 07, 2008 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, ok...
also was genau wird bei dir in der klammer berechnet? Die neue x und y possition der waffe(also x vor und y hinter dem komma?)

weil die rechnugn da sah etwas wild aus^^
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

Ava

Gast

BeitragDo, Aug 07, 2008 19:30
Antworten mit Zitat
wieso sieht meine Rechnung wild aus? ich habe lediglich Deine Koordinaten (so wie Du sie gepostet hast) angepasst Razz

mas93

BeitragDo, Aug 07, 2008 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ich denk ich habs irgendwie noch nich ganz raus, sry.
Ich poste hier mal meinen code zum anzeigen des Bildes:

Code: [AUSKLAPPEN]
DrawImage w.image,sp.x+t.ws_x1*Cos(sp.winkel)+t.ws_y1*Sin(sp.winkel),sp.y+t.ws_y1*Cos(sp.winkel)-t.ws_y1*Sin(sp.winkel)


sp.x und sp.y sind die koordinaten des schiffs
sp.winkel der der winkel von schiff zu maus
t.ws_x1 xpos der waffe usw

Ich weiss, blöde variablenbenennung, will ich aber so machen, weil das ganze später ziemlich flexibel sein soll... also nich ohne grund
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

Ava

Gast

BeitragDo, Aug 07, 2008 20:40
Antworten mit Zitat
DrawImage w.image,sp.x+t.ws_x1*Cos(sp.winkel)+t.ws_y1*Sin(sp.winkel),sp.y+t.ws_y1*Cos(sp.winkel)-t.ws_x1*Sin(sp.winkel)

Auch bei einem flexiblen Programm kann man die Variablen vernünftig bennen Smile
  • Zuletzt bearbeitet von Ava am Do, Aug 07, 2008 20:41, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragDo, Aug 07, 2008 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, kleine Skizze...

user posted image
Mitte ist dein Schiff in einem bestimmten Winkel (Linie A-B, 0°)
In einem bestimmten Radius (A-C) befindet sich das Geschütz das ebenfalls einen bestimmten winkel besitzt.

Ich würde dir also vorschlagen statt x,y Position für Waffen Winkel und Radius festzulegen, die entsprechden Koordinaten werden dann berechnet.

Edit:
Für x|y lassen sich verschiedene Radien verwenden, dann ist das ganze halt Oval... Ich hoffe ich verwirre nicht noch mehr Confused
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

mas93

BeitragDo, Aug 07, 2008 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, ich hab das angepasst ava, aber das functioniert immer noch nicht.
ist immer noch genau wie davor...

und Xeres, hmm hört sich eigentlich logisch an, nur kapier ich jetzt grade garnichts mehr^^

vorallem den Satz hab ich nach 10 mal lesen nich kapiert:

Zitat:
Ich würde dir also vorschlagen statt x,y Position für Waffen Winkel und Radius festzulegen, die entsprechden Koordinaten werden dann berechnet.


oder hat jemand evtl sowas schonmal gemacht und hat n ganz kleines codebeispiel?
s kann ja nur ne linie und n kreis oder so sein, die sich richtig ausrichten... wäre echt ne Hilfe.

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

Ava

Gast

BeitragDo, Aug 07, 2008 21:34
Antworten mit Zitat
Code: [AUSKLAPPEN]
   Local   main_x:Float = 400.00
   Local   main_y:Float = 200.00
   Local   option_offset_x:Float = 100.00
   Local   option_offset_y:Float = 50.00
   
         
   Repeat
   
   Cls
   
   Local   angle:Float = ATan2(MouseY() - main_y, MouseX() - main_x)
   Local   option_x1:Float = main_x + (option_offset_x * Sin(angle) + option_offset_y * Cos(angle))
   Local   option_y1:Float = main_y + (option_offset_y * Sin(angle) - option_offset_x * Cos(angle))
   Local   option_x2:Float = main_x + (-option_offset_x * Sin(angle) + option_offset_y * Cos(angle))
   Local   option_y2:Float = main_y + (option_offset_y * Sin(angle) - -option_offset_x * Cos(angle))

   
         DrawOval ( main_x - 32 , main_y - 32, 64, 64 )
         DrawLine ( main_x , main_y , main_x + Cos(angle) * 64, main_y + Sin(angle) * 64 )
         
         
         DrawOval (   option_x1 - 16, option_y1 - 16, 32, 32 )
         DrawOval (   option_x2 - 16, option_y2 - 16, 32, 32 )

   Flip
   
   Until KeyHit(key_escape) End



Sorry, mein Fehler, hatte Cos und Sin vertauscht ^^

mas93

BeitragDo, Aug 07, 2008 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh, ok vielen dank für die Hilfe, habs jetzt hinbekommen!
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

Ava

Gast

BeitragDo, Aug 07, 2008 21:59
Antworten mit Zitat
Bitte Bitte Very Happy

mas93

BeitragDo, Aug 28, 2008 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab noch ein kleines Problem mit dem Zeichnen der Waffen...
Die koordinaten stimmen nun nichtmehr ganz...

Umso mehr die x Possition der Waffe von der X possition des Schiffs abweicht, desto mehr wird die waffe an der falschen possition gezeichnet...

normal sollte die x possition der waffe z.b 20 pixel links von der schiffpossition sein. So steht es auch im code,
doch gezeichnet wird sie viel weiter links... alles etwas irreführend.

Hier der zeichencode:

Code: [AUSKLAPPEN]
DrawImage w.image,sp.x+Cos(sp.winkel-t.wsx[i])*t.wsy[i],sp.y+Sin(sp.winkel-t.wsx[i])*t.wsy[i]


sp.x+y schiff koordinaten
sp.winkel winkel des Schiffes
t.wsx[i],t.wsy[i] x+y koordinaten der waffe

Könnt ihr mir sagen, warum sich die Possitionen so "verfälschen"?
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Xeres

Moderator

BeitragDo, Aug 28, 2008 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
AutoMidHanlde? richtiges i in t.wsx[i]?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

mas93

BeitragDo, Aug 28, 2008 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, automidhandle is drinne, aber die 20 pixel sollen von der mitte des Schiffes weg sein, müsste also stimmen...
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

BamBam

BeitragDi, Okt 07, 2008 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine etwas unmathematische Idee (nicht 100% sicher ob es funktioniert)

Wenn beide Bilder die gleiche größe haben (am besten Quadratisch) und alles was du davon nicht willst halt transparent. Liegen nun beide Bilder auf der gleichen Koordinate und du drehst beide mit dem gleichen winkel, sollte die position der waffe im verhältnis zum schiff eigentlich gleich bleiben!

Lasse mich gerne eines Besseren belehren!

D2006

Administrator

BeitragDi, Okt 07, 2008 10:29
Antworten mit Zitat
Benutzer-Profile anzeigen
mas93 hat Folgendes geschrieben:

Code: [AUSKLAPPEN]
DrawImage w.image,sp.x+Cos(sp.winkel-t.wsx[i])*t.wsy[i],sp.y+Sin(sp.winkel-t.wsx[i])*t.wsy[i]


sp.x+y schiff koordinaten
sp.winkel winkel des Schiffes
t.wsx[i],t.wsy[i] x+y koordinaten der waffe


Du hast eine scheussliche Variablenbenennung. Wenn du da nicht mal was dran änderst, wirst du noch oft Probleme haben.

Und was Xeres vorhin meinte: Du positionierst die kleine Waffe nicht mehr mit dem X- und Y-Offset relativ zum Mittelpunkt, sondern mit einem Winkel und einem Radius. Der Winkel gibt demnach an, in welcher Richtung vom Schiffsmittelpunkt aus gesehen sich die Waffe befindet und der Radius gibt an, wie weit weg sie ist.

So wie der Code dasteht...
... muss t.wsx[i] der Winkel der kleinen Waffe sein
... und muss t.wsy[i] der Radius der kleinen Waffe sein

Ist das der Fall?
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

BladeRunner

Moderator

BeitragDi, Okt 07, 2008 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BamBam, deine Lösung verschwendet massig Speicherplatz auf der Grafikkarte. Siher ist es so recht einfach, aber dafür wirst Du sehr viel RAM zusauen- das geht für einzelne Bilder ja mal in Ordnung, aber bei vielen müllt man sich nur unnötig den Speicher zu.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group