Schwerkraft (#2)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

KnorxThieus

Betreff: Schwerkraft (#2)

BeitragSa, Nov 22, 2014 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nach langer Zeit mal wieder,

Vor fast einem Jahr habe ich hier mal eine Frage zur Schwerkraft geschrieben. Eine Lösung hatte ich erhalten; ein Ball fällt mit zunehmender Geschwindigkeit abwärts, was sich durch diese Codezeilen in jedem Programmdurchlauf realisieren lässt:
BlitzBasic: [AUSKLAPPEN]
ys = ys + ys_
y = y + ys
;y sei die y-Koordinate, ys die y-Geschwindigkeit und ys_ deren Beschleunigung

Vollständig umgesetzt ist bei mir dann das herausgekommen:
BlitzBasic: [AUSKLAPPEN]
Graphics 300, 600, 32, 2			;Grafikfenster öffnen
SetBuffer BackBuffer() ;BackBuffer setzen

fps = CreateTimer(60) ;60 fps - Timer


Local y# = -25 ;Der Ball startet 25 px über dem Bildschirmrand (sodass man ihn anfangs nicht sieht => Radius 25 px)
Local ys# = 0 ;Anfangsgeschwindigkeit: 0 px/flip
Const ys_# = 2 ;in jedem durchlauf um 2 px geschwindigkeit zunehmen


Repeat ;Hauptschleife
Cls ;Bildschirm löschen

ys = ys + ys_ ;Geschwindigkeit beschleunigen
y = y + ys ;geschwindigkeit auf position übertragen

If y > 600 Then ys = -ys ;wenn ball boden berührt, geschwindigkeit umkehren

Oval 150 - 25, y - 25, 50, 50 ;einzeichnen

Flip 0 ;bildschirm aktualisieren
WaitTimer fps ;warten auf timer
Until KeyHit(1) ;bei esc beenden

Das sieht ganz OK aus, aber nach dem 13. Hoppser springt der Ball nicht mehr hoch, sondern zittert am unteren Bildschirmrand. Mir ist schon klar, woran das liegen mag, nämlich in Zeile 17 (If y > 600 Then ys = -ys):
Irgendwie wird die y-Koordinate zu oft gespiegelt. Mir ist leider trotz Nachdenkens nicht klar, wie es dazu kommt.

Ich habe bereits versucht, die y-Koordinate bereits umzukehren, wenn das untere Ende des Balles den Boden berührt (If y + 25 > 600...). Merkwürdigerweise schafft die Kugel dann nicht mal mehr einen Hoppser.

Ich habe auch schon im Forum gegooglet - leider vergeblich. Sad

Kann mir jemand helfen, wie es geht? Smile

Mit freundlichen Grüßen,
KnorxThieus
Version: BlitzPlus / Blitz+

TimBo

BeitragSa, Nov 22, 2014 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
dein ySpeed wird wohl zu groß sein, baue mal eine obere Schranke für diesen Wert ein.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

KnorxThieus

BeitragSa, Nov 22, 2014 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Guter Ansatz, Danke! Smile

Leider wird die Hupfhöhe (?) des Balles jetzt nicht mehr kleiner - sieh selbst:

BlitzBasic: [AUSKLAPPEN]
Graphics 300, 600, 32, 2
SetBuffer BackBuffer()

fps = CreateTimer(60)


Local y# = -25
Local ys# = 0
Const ys_# = 2


Repeat
Cls

ys = ys + ys_
y = y + ys

If y + 25 > 600
ys = -ys
y = FLimit(y, -50, 600 - 25)
EndIf


Oval 150 - 25, y - 25, 50, 50

Flip 0
WaitTimer fps
Until KeyHit(1)



Function FLimit#(value#, min#, max#)
If value < min
value = min
ElseIf value > max
value = max
EndIf
Return value
End Function


Meine Idee: Irgendwas zu ys addieren, um das auszugleichen - aber was? Shocked

MfG,
KnorxThieus
Version: BlitzPlus / Blitz+

Silver_Knee

BeitragSa, Nov 22, 2014 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du exakt weißt, dass die Geschwindigkeit des balles negativ (nach oben) sein muss kannst du ys=-Abs(ys) nehmen. Das spiegelt die Geschwindigkeit dann nicht mehr, sondern setzt sie immer auf den gleichen Betrag wie vorher nur mit negativem Vorzeichen, ungeachtet, was vorher für ein Vorzeichen da war.

Xeres

Moderator

BeitragSo, Nov 23, 2014 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
1) Möglichst alle Werte durch Variablen ersetzen.
2) Versetze die Höhe der Basislinie, sodass man sicher sein kann, dass nichts darunter verschwindet.
3) Mit DebugLog die Werte anschauen, um raus zu finden, wie sich das Programm verhält

BlitzBasic: [AUSKLAPPEN]

Const KEY_ESC = 1
Local gfx_w = 300
Local gfx_h = 600

Graphics( gfx_w, gfx_h, 32, 2 )
SetBuffer BackBuffer()
Local fps = CreateTimer(60)

Local size# = 25
Local y# = -size
Local ys# = 0
Const ya# = 2

Local baselineY# = 500

Repeat
Cls

ys = ys + ya
y = y + ys

; y+size ist der unterste punkt des Kreises
If y+size > baselineY Then
ys = -ys
DebugLog(ys)

; ist der unterste punkt des kreises nach einer bewegung (+ys) immernoch
; unter der linie, setzte ihn auf die linie
If (y+size+ys > baselineY) Then
DebugLog(Abs(ys))
ys = 0
y = baselineY - size
EndIf
EndIf

Color(255,0,0)
Rect(0, baselineY, gfx_w, 1)

Color(255,255,255)
Oval( gfx_w/2 - size, y - size, size*2, size*2 )


Flip( 0 )
WaitTimer( fps )
Until KeyHit( KEY_ESC )

Function FLimit#(value#, min#, max#)
If value < min
value = min
ElseIf value > max
value = max
EndIf
Return value
End Function
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)

KnorxThieus

BeitragSo, Nov 23, 2014 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@Silver_Knee: Vielen Dank, klingt gut! So hier?
BlitzBasic: [AUSKLAPPEN]
Graphics 300, 600, 32, 2	;Grafikfenster öffnen
SetBuffer BackBuffer() ;BackBuffer setzen

fps = CreateTimer(60) ;60 fps - Timer


Local y# = -25 ;Der Ball startet 25 px über dem Bildschirmrand (sodass man ihn anfangs nicht sieht => Radius 25 px)
Local ys# = 0 ;Anfangsgeschwindigkeit: 0 px/flip
Const ys_# = 2 ;in jedem durchlauf um 2 px geschwindigkeit zunehmen


Repeat ;Hauptschleife
Cls ;Bildschirm löschen

ys = ys + ys_ ;Geschwindigkeit beschleunigen
y = y + ys ;geschwindigkeit auf position übertragen

If y + 25 > 500 ;wenn ball boden berührt, geschwindigkeit umkehren
ys = -Abs(ys)
;y = FLimit(y, -50, 600 - 25)
EndIf


Color 255, 255, 0 ;gelbe...
Rect 0, 500, 300, 1 ;...Bodenlinie

Color 255, 255, 255 ;Kugel (weiß)
Oval 150 - 25, y - 25, 50, 50 ;einzeichnen

Flip 0 ;bildschirm aktualisieren
WaitTimer fps ;warten auf timer
Until KeyHit(1) ;bei esc beenden



Function FLimit#(value#, min#, max#)
If value < min
value = min
ElseIf value > max
value = max
EndIf
Return value
End Function

Irgendwie sinkt er dann auch da ab... Sad

@Xeres: In obenstehendem Code ist 2.) umgesetzt, für 1.) fehlen nur noch GraphicsWidth etc.
3.) hätte ich gemeint, estimieren zu können, du hast natürlich recht...
Zum Code: Sieht gut aus, aber wie kommt das hier zustande?
user posted image
Und am Ende zittert er noch, wie umgeht man das?
Ist der Ansatz richtig, Zeile 25 wie folgt zu verändern?
BlitzBasic: [AUSKLAPPEN]
ys = -ys + 0.00001


MfG,
KnorxThieus
Version: BlitzPlus / Blitz+

BladeRunner

Moderator

BeitragSo, Nov 23, 2014 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn die Bewegungsänderung zu gering wird einfach die Geschwindigkeit auf 0 setzen.
Das beobachtete Verhalten liegt mir an der Ungenauigkeit von Floats. Irgendwann wird die addierte Geschwindigkeit im Bereich der fehleranfälligen Stellen liegen und so kommt es zu einem zyklischen Zittern. Hier wird es zeit die Geschwindigkeit zu nullen und somit die Bewegung zu beenden.
In dem Zusammenhang empfiehlt es sich auch bei floats nie auf = zu prüfen, sondern immer einen Bereich zu prüfen, um die Ungenauigkeiten zu filtern.

Edit: Da Floats auf ca. 7 Stellen genau sind empfiehlt es sich auf die sechste Nachkommastelle zu prüfen.
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

DAK

BeitragSo, Nov 23, 2014 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
So, hab mir das mal genau angeschaut. Dein Problem liegt hier:

BlitzBasic: [AUSKLAPPEN]
ys = ys + ys_
y = y + ys

If y > 600 Then ys = -ys


Nimm an, y > 600 und ys = 0, was dann ist, wenn der Ball am Boden liegen sollte.

Jetzt geht das so durch:
BlitzBasic: [AUSKLAPPEN]
ys = ys + ys_    ;ys = 0 + 2
y = y + ys ;y = y + 2

If y > 600 Then ys = -ys ;ys = -2


Das heißt, egal ob y > 600 oder nicht, y wird um 2 erhöht -> der Ball sinkt ein.

Richtig wäre es so:

BlitzBasic: [AUSKLAPPEN]
ys = ys + ys_
If y > 600 Then ys = -ys
y = y + ys


Jetzt sinkt der Ball nicht mehr ein, aber die Sprunghöhe wird nicht kleiner. Das macht auch Sinn, weil du hast noch nicht alle Kräfte drinnen, die auf den Ball wirken. Du hast Gravitation und eine Kollision ohne Energieverlust. Dir fehlt der Luftwiderstand und ggf. ein Kraftverlust beim Aufprall.

BlitzBasic: [AUSKLAPPEN]
ys = ys + ys_
If y > 600 Then
ys = -ys
ys = ys * 0.9 ;Kraftverlust durch Aufprall
EndIf
y = y + ys
ys = ys * 0.999 ;Luftwiderstand


Dazu dann noch eine Abfrage die das Versinken des Balls verhindert, und eine die die Geschwindigkeit auf 0 setzt, wenn die Geschwindigkeit zu gering wird und du kriegst das hier:

BlitzBasic: [AUSKLAPPEN]
Graphics 300, 600, 32, 2			;Grafikfenster öffnen
SetBuffer BackBuffer() ;BackBuffer setzen

fps = CreateTimer(60) ;60 fps - Timer


Local y# = -25 ;Der Ball startet 25 px über dem Bildschirmrand (sodass man ihn anfangs nicht sieht => Radius 25 px)
Local ys# = 0 ;Anfangsgeschwindigkeit: 0 px/flip
Const ys_# = 2 ;in jedem durchlauf um 2 px geschwindigkeit zunehmen

Local maxys# = 0

Repeat ;Hauptschleife
Cls ;Bildschirm löschen



If (ys#>maxys#) Then maxys# = ys#
If y > 599-25 Then
ys = -Abs(ys)
ys = ys * 0.9 ;Kraftverlust durch Aufprall
If (Abs(ys)<2) Then ;Stoppe den Ball wenn die Geschwindigkeit zu gering wird
ys = 0
Else
ys = ys + ys_
EndIf
DebugLog(maxys#)
maxys# = 0
Else
ys = ys + ys_
EndIf

ys = ys * 0.99 ;Luftwiderstand
y = y + ys

If (y>600-25) Then y=600-25 ;Hindere den Ball am Versinken

;DebugLog("y:"+y+" ys:"+ys+" ys_:"+ys_)

Oval 150 - 25, y - 25, 50, 50 ;einzeichnen

Flip 0 ;bildschirm aktualisieren
WaitTimer fps ;warten auf timer
Until KeyHit(1) ;bei esc beenden



@BladeRunner und Floats:
Hier bitte aufpassen, Floats sind Floating Point Numbers, also Gleitkommazahlen. Die Genauigkeit ändert sich in Abhängigkeit der Größe der Zahl! Floats sind ungefähr auf 7 Stellen genau, beginnend mit der höchsten Stelle der Zahl. Das heißt, wenn die Zahl z.B. 0.000001 ist, so ist die Variable bis ungefähr zur 12. Nachkommastelle genau.
Ist die Zahl aber 10000000, so ist die Variable gerade mal auf die Zehnerstelle genau!
Gewinner der 6. und der 68. BlitzCodeCompo
 

Kruemelator

BeitragSo, Nov 23, 2014 23:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist sehr einfach zu lösen.
Du musst nur dafür sorgen dass der Ball nie im Boden steckt. Mehr brauchst du nicht zu ändern.

BlitzBasic: [AUSKLAPPEN]
If y > 600 Then		;wenn ball in den boden eindringt,
ys = -ys ;geschwindigkeit umkehren
y = 600 ;ball aus boden herausbewegen
EndIf


Da die Bewegungsenergie nie verloren geht springt der Ball ewig, wie DAK schon beschrieben hat.

BladeRunner

Moderator

BeitragMo, Nov 24, 2014 9:27
Antworten mit Zitat
Benutzer-Profile anzeigen
DAK, das ist mir schon klar. Da ich aber ja einen Fehler im Nachkommastellenbereich vermutete war auch dort das Problem verhaftet. Mir ist durchaus bewusst dass die Mantisse immer nur eine begrenzte Stellenzahl wiedergeben kann, auch wenn der Exponent groß ist.
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

DAK

BeitragMo, Nov 24, 2014 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Nah, hab eh gedacht, dass du dich damit auskennst. Es war nur, dass deine Aussage vorhin etwas missverständlich/ungenau war. Ich wollt nur, dass niemand, der sich damit nicht so auskennt, dann glaubt, dass Floats irgendeine Art von Fixed Precision haben. Kommt ja öfters vor.

Das Problem ist leider nicht nur eine Nachkomma-Ungenauigkeit, sondern hat mehr was damit zutun, wie die Gravitation hinzugefügt wird:

Geschwindigkeit erhöhen
Geschwindigkeit zur Position hinzufügen
Erst dann checken, ob der Ball nicht eigentlich den Boden berührt.

@Kruemelator:
Wenn du nur das hinzufügst, ohne eine Verlangsamung, dann springt der Ball sogar immer höher, da er bei jeder Kollision immer wieder ein Stück nach oben gesetzt wird, ohne dass seine Sprungenergie verringert wird.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragMo, Nov 24, 2014 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehm... wieso sind Floats "ungenau" ?
Bin zar nicht der Threadersteller aber interresiert mich gerade :0
Wenn ich
BlitzBasic: [AUSKLAPPEN]

Zahl# =10000000
Zahl2# = 1000000
Print Zahl#+Zahl2#


Mache kommt das richtige bei raus :0
Auch wenn ich Nachkommastellen rechnen lasse 0.0000001 oder sowas halt
kommt trozdem das richtige bei raus ... wieso sind die dann ungenau ? ^^
Erklärt mir das mal bitte :p oder verstehe ich da was falsch?:0
bitro.de

BladeRunner

Moderator

BeitragMo, Nov 24, 2014 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass mal zu 1000000 .000001 addieren und schau Dir das Ergebnis an.
Es wird (zumindest bei BMax) 1000000.00 sein.

Das liegt daran dass bei Floats die Zahl in 2 Komponenten gespeichert wird:
Dem Exponenten (gibt an wo das Komma in der Zahl ist) und der Mantisse (Speichert die Zahl).
Da du nur begrenzt Platz hast (32 bit) ist die Genauigkeit dieser Darstellung eingeschränkt, auf (iirc) 8 Nachkommastellen.

Belese dich mal bei Wikipedia zu Gleitkommazahlen.

Noch dazu hat die binäre Codierung dezimaler Zahlen das Problem dass einige Zahlen gar nicht adäquat dargestellt werden können (zB muss eine periodische Zahl im Dezimalsystem nicht unbedingt eine im Binärsystem sein, bzw. die Periodenlänge kann eine andere sein.
Beispiel:
1/3 = 0.3 dezimal.
Binär jedoch:
0.01
Damit ergibt sich ein zusätzlicher Cut bei der Genauigkeit, und so wird BMax bei Print (1.0/3.0) folgendes ausgeben:
0.333333343

weil eben gerundet werden muss.

Floats sind daher auch für Finanzberechnungen nicht sinnvoll.
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

KnorxThieus

Betreff: Danke! :D

BeitragMo, Nov 24, 2014 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Jetzt bin ich auch wieder da - endlich... Embarassed

Arrow @BladeRunner: Hab ich versucht, hat aber irgendwie nicht geklappt, weil eben der Ball immer gleich hoch sprang...
Arrow @DAK: Wow, super ausführliche Antwort!! Very Happy
Das hast du prima beschrieben, ich glaub', bis auf ein paar Kleinigkeiten ist mir jetzt alles klar:
    • Zu diesem Codeblock hier: BlitzBasic: [AUSKLAPPEN]
    If (Abs(ys)<2) Then ys = 0
    Warum <2 und nicht <1? Habe mal Letzteres eingesetzt, was auch nicht merklich schlechter aussah! (?)
    • Und der Kraftverlust durch den Aufprall entsteht doch bloß, wenn die Kugel teilelastisch ist?
    • Dann dürfte der Luftwiderstand noch von der Form/Größe/Masse/Aerodynamik der Kugel abhängig sein, wenn ich mich nicht irre?

Danke auch für den Hinweis, dass die unterste Zeile GraphicsHeight() - 1 (⇒ 599) px sind! Smile
Arrow @Kruemelator: Wäre es nicht sinnvoller, ein Limit beim Einzeichnen der Kugel zu setzen? BlitzBasic: [AUSKLAPPEN]
Oval 150 - 25, FLimit(y, -25, 499) - 25, 50, 50)

Function FLimit#(value#, min#, max#)
If value < min
value = min
ElseIf value > max
value = max
EndIf
Return value
End Function
So wird die Geschwindigkeit beim Wiederhochspringen nicht manipuliert.
Arrow Floats/Mantisse (OT): Den Begriff hab sogar ich gekannt Wink - aber wie kommt man auf den Exponenten?
Arrow BladeRunner (last): Ja, bei B+ kommt taucht dieser Rundungsfehler auch auf.

MfG,
KnorxThieus Smile
Version: BlitzPlus / Blitz+

DAK

BeitragDi, Nov 25, 2014 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
@Floats: wenn man ein Float in der Dezimalsystem haben würde (ist eventuell zum Verstehen einfacher), dann schaut das z.B. so aus:

12345 (nicht Float-Darstellung) = 1.2345 * 10^4 (Float-Darstellung)

Dabei heißt der linke Teil (1.2345) Mantisse und die Zahl nach dem 10^ (also 4) ist der Exponent. Der Exponent wird dabei immer so gewählt, dass es links vom Komma der Mantisse nur eine Stelle gibt. Als Float-Zahl wird das dann so gespeichert (bsp. 3 Stellen Exponent und 6 Stellen Mantisse):

0041234560

Die ersten drei Stellen sind Exponent, der Rest ist Mantisse.

Der Computer rechnet und speichert natürlich im binären Zahlensystem, nicht im Dezimalen.

@Abs(y)<2:
Das habe ich deswegen so gewählt, da die Gravitationsbeschleunigung 2 ist. So funktioniert das Ganze bei egal welchem Luftwiderstand/Aufprallwiderstand.

@Kraftverlust beim Aufprall: Ja, kommt durch die Teilelastik.

@Luftwiderstand: Ist abhängig von Größe, Form, Gewicht und Luftdichte. Ermittle den aber besser durch Ausprobieren, nicht durch errechnen. Funktioniert normalerweise besser so.
Gewinner der 6. und der 68. BlitzCodeCompo

KnorxThieus

BeitragDi, Nov 25, 2014 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Arrow Floats: Ist die Basis dabei immer 10? Bzw. kann man da mit Logarithmus arbeiten?
Arrow Abs: Also eigtl. If (Abs(ys)<ys_)?
Arrow Teilelastik müsste man doch dann eigentlich durch variierende Höhe einzeichnen, oder? Ach, ist mir momentan aber noch zu kompliziert...
Arrow Luftwiderstand: OK, so hätte ich das wahrscheinlich eh gemacht.

Gut, dann nochmals vielen Dank für alle Hilfe! Very Happy

Mit freundlichen Grüßen,
KnorxThieus
Version: BlitzPlus / Blitz+
  • Zuletzt bearbeitet von KnorxThieus am Di, Nov 25, 2014 19:02, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragDi, Nov 25, 2014 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Basis von Floats am Computer ist - wer hätte es geglaubt - 2.
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

KnorxThieus

BeitragDi, Nov 25, 2014 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach so - eigentlich logisch!
user posted image

Also für genau -3.141:
Code: [AUSKLAPPEN]
10000001100000000000110001000110

Erklärung:
  S E E E E E E E E M M M M M M M M M M M M M M M M M M M M M M M
 
  1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0

Oder?

Quelle: Binärdarstellung von Fliesskommazahlen [sic!]
Version: BlitzPlus / Blitz+

DAK

BeitragMi, Nov 26, 2014 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
@Floats: genau so wie im letzten Beispiel. Dabei wird bei der Mantisse die führende 1 immer weggelassen, da die eh immer 1 ist (außer man hat 0).

@Abs: Jup, genau. Nur eventuell <= statt <, aber das sollte gerade bei Floats eh wurscht sein.

@Teilelastik: Am besten einfach ausprobieren, wie beim Luftwiderstand.

Bei solchen Sachen ist Ausprobieren meist besser, da man die ganz genauen Berechnungen eh nicht so schön hin kriegt. Solange es realistisch ausschaut ist es wurscht, was du genau für Werte hast. In Computerspielen sind so Sachen wie Gravitation und Elastik eh oft anders bewertet als in echt.
Gewinner der 6. und der 68. BlitzCodeCompo

KnorxThieus

BeitragMi, Nov 26, 2014 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
OK.

DAK hat Folgendes geschrieben:
In Computerspielen sind so Sachen wie Gravitation und Elastik eh oft anders bewertet als in echt.

Aufpassen muss man bloß dann, wenn mehrere Objekte im Spiel sind - dass Maßstab und Meine-Welt-Physik-Daten wie Gravitation übereinstimmen - aber auch das dürfte man durch Ausprobieren hinbekommen.

Ansonsten wären dann all meine Fragen geklärt.
Vielen Dank an euch!

MfG,
KnorxThieus
Version: BlitzPlus / Blitz+

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group