Winkel: Steuerungsfehler

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Christian

Betreff: Winkel: Steuerungsfehler

BeitragSa, März 12, 2005 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Tag!

Einmal bitte testen:
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

;Laden
w=0
x#=300
y#=300
;Laden

Repeat
Cls

mx = MouseX()
my = MouseY()
winkel = (ATan2(y-my,x-mx)) Mod 360

Text 10,10,\"Winkel: \" + winkel

;Zeichnen
Oval x-5, y-5, 10, 10, 1
Line x, y, x+30*Cos(winkel), y-30*Sin(winkel)
;/Zeichnen

;Bewegen
If KeyDown(200) Then
x = x + Cos(winkel)
y = y - Sin(winkel)
EndIf
;/Bewegen

Flip
Until KeyHit(1)
End

Nach dem testen ist euch sicher aufgefallen, dass da etwas nicht stimmt.
Das Objekt soll zur Maus gesteuert werden, aber ... igendwie... ist das anders.
Ich hoffe ihr wisst, was ich meine und kennt eine Lösung.

Gruß
Christian
 

ann

BeitragSa, März 12, 2005 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
es muss so heißen dann gehts richtig
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

;Laden
w=0
x#=300
y#=300
;Laden

Repeat
Cls

my = MouseX()
mx = MouseY()
winkel = (ATan2(y-my,x-mx)) Mod 360

Text 10,10,\"Winkel: \" + winkel

;Zeichnen
Oval x-5, y-5, 10, 10, 1
Line x, y, x+30*Cos(winkel), y-30*Sin(winkel)
;/Zeichnen

;Bewegen
If KeyDown(200) Then
x = x + Cos(winkel)
y = y - Sin(winkel)
EndIf
;/Bewegen

Flip
Until KeyHit(1)
End


so fehler gefunden...

BladeRunner

Moderator

BeitragSa, März 12, 2005 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
ann? Das ist exakt der selbe Code... Question Exclamation
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
 

ann

BeitragSa, März 12, 2005 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
nein ist es nicht

ann;
Code: [AUSKLAPPEN]
my = MOUSEX()
mx = MOUSEY()

oder so
Code: [AUSKLAPPEN]
mx = MOUSEY()
my = MOUSEX()


christian:

Code: [AUSKLAPPEN]

mx = MOUSEX()
my = MOUSEY()


also ganz so doof bin ich auch nicht obwohl ich erst 14 bin *gg* der fehler ist ganz simpel..manchmal zu simpel um ihn zu finden Very Happy

BladeRunner

Moderator

BeitragSa, März 12, 2005 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
oha. i see. man verzeihe mir. Wink
aber dein 2er Post war wesentlich aufschlussreicher als der erste, so kommt die Antwort besser an.
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
 

ann

BeitragSa, März 12, 2005 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
okok werd ich demnächst immer so machen...achso und noch dazu bin ich ein mädchen *g*

Artemis

BeitragSa, März 12, 2005 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
ann hat Folgendes geschrieben:
Wohnort: Fulda

Wohnst du in der Fulda???
*lol*
*megagrins*
Laughing
 

Bigfreddy

BeitragSa, März 12, 2005 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß ja nicht, was die Frage soll???
Aber warum wird sie eine (existierende) Stadt hinschreiben, wenn sie nicht da wohnt

matte

BeitragSa, März 12, 2005 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Arctangens hat nur einen Wertebereich von -90 bis +90 Grad. Musst dir also für die einzelnen Quadranten entsprechende Werte hinzuaddieren. Geht jetzt einwandfrei...

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

;Laden
w=0
x#=300
y#=300
;Laden

Repeat
Cls

mx = MouseX()
my = MouseY()
; Weltkoordinaten
dx#=mx-x
dy#=y-my
winkel = ATan(dy/dx)

;Quadrantenvorzeichen
If dx<0 And dy>0 Then Winkel=Winkel+180
If dx<0 And dy<0 Then Winkel=Winkel+180
If dx>0 And dy<0 Then Winkel=Winkel+360


Text 10,10,\"Winkel: \" + winkel
Text 10,20,\"sin Winkel: \" +Sin(winkel)
Text 10,30,\"cos Winkel: \" +Cos(winkel)
Text 10,40,\"dx: \"+dx
Text 10,50,\"dy: \"+dy

;Zeichnen
Oval x-5, y-5, 10, 10, 1
Line x, y, x+30*Cos(winkel), y-30*Sin(winkel)
;/Zeichnen

;Bewegen
If KeyDown(200) Then
x = x + Cos(winkel)
y = y - Sin(winkel)
EndIf
;/Bewegen

Flip
Until KeyHit(1)
End




PS: Das von ann scheint nichts zu taugen....
  • Zuletzt bearbeitet von matte am Sa, März 12, 2005 20:34, insgesamt einmal bearbeitet
 

ann

BeitragSa, März 12, 2005 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ok so gehts auch dann hat man nicht die - zahlen

matte

BeitragSa, März 12, 2005 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
An ann,

Das Wesentliche sind nicht die - Zahlen. Das ist nur aus Schönheitsgründen. Wirklich wichtig ist, dass man beim arcus-Tangens immer Winkel hinzuaddieren muss, wenn man sich außerhalb des ersten Quadranten (positives x und positives y) tummelt. Das nützt dir vielleicht irgendwann mal in Mathe was...
Natürlich war deine Anmerkung mit dem my=MouseX() auch richtig, hat aber das Problem nicht ganz gelöst...

Grüße matte
 

ann

BeitragSa, März 12, 2005 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
okay, jetzt weiß ich mehr...kann noch nicht richtig proggen bin ein noob *g* also sorry für meine fehler

Christian

BeitragSa, März 12, 2005 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Tag!

Vielen Dank für die Antworten (besonders von matte).
Es geht jetzt!
Danke!

Gruß
Christian

D2006

Administrator

BeitragSo, März 13, 2005 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,

erstmal @matte:

Schön, schön dein Code, aber warum das Rad neuerfinden?
Christian benutzte nicht die Arcustangens, sonder die Arcustangens2 Funktion. Kurz: ATan2. Diese Funktion macht genau das, was du auch machst. Also die Abhängikeit der Quadranten in die Berechnung einfliessen lassen.

EDIT:
soeben fand ich noch ne Lücke - wenn der Winkel 180° sein sollte,
ist er tatsächlich nur 0°.

@Christian:
In meinem Tutorial schrieb ich, dass es mathematisch exakt ist, wenn man den Sinus immer abzieht. Letztendlich ist das allerdings nicht so wichtig. Du musst allerdings beachten und daran dachte ich noch gar nicht, dass bei der ATan2 Funktion, wenn man mathematisch exakt sein will, nun auch die Berechnung des Y-Parameters anders aussieht.

Probier dies:

BlitzBasic: [AUSKLAPPEN]
winkel = (ATan2(y-my,mx-x)) Mod 360

^^ also das bei dem von dir geposteten Code.

Mittlerweile zweifle ich selbst, ob ich im Tutorial nicht auf die mathematische Korrekheit pfeifen sollte, mal schauen ...

MfG
D2006

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group