Blitz Basic ungenau
Übersicht

![]() |
CtuchikBetreff: Blitz Basic ungenau |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich arbeite momentan an einer Kugelsimulation, mit Kugeln die eben möglichst realistisch voneinander abprallen und dabei ist mir aufgefallen, dass BB anscheinend nicht ganz korrekt rechnet!
Im DebugLog stehen die Werte a\x = 224.098 und b\x = 198.112 Wenn man die ganz normal voneinander abzieht mit RunTimeError (224.098 - 198.112) 25.986 stimmt das Ergebnis, aber das was er berechnet a\x - b\x ergibt 25.9856 Das macht das ganze Programm kaputt ![]() |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
- Zuletzt bearbeitet von Ctuchik am Di, Feb 01, 2005 0:53, insgesamt einmal bearbeitet
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein schon bekanntes Problem!
Blitz arbeitet nur mit 4 Byte Float im binär Modus Durch das umrechnen in Dezimal kommmt dann sowas dabei raus Hier mal ein schönen BeispielCode: [AUSKLAPPEN] For i# = 0.0 To 1.0 Step 0.01
Print I Next WaitKey |
||
[BB2D | BB3D | BB+]
|
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
O mann, so ein Schrott! Also kann ich die Genauigkeit vergessen!
Naja ich post gleich mal was ich schon so hab! |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jaja, Doppelpost schon gut!
Mit Leertaste wirds neu gestartet! Kollision mit Wänden is noch nicht eingebaut! Code: [AUSKLAPPEN] Const scr_width = 800 Const scr_height = 600 Graphics scr_width,scr_height,0,2 SetBuffer BackBuffer() Global timer1 = CreateTimer(60) Global energie# = 0 Type Kugel Field x#,y# Field vx#,vy# Field tu# Field r# Field clr% Field lastcoll.Kugel End Type Type Kollision Field eins.Kugel Field zwei.Kugel Field time# End Type SeedRnd MilliSecs() .reset For k.Kugel = Each Kugel Delete k Next ;Billiard CreateKugel(250,300,0,0,15,255,0,0) CreateKugel(224,316,0,0,15,255,0,0) CreateKugel(224,284,0,0,15,255,0,0) CreateKugel(198,331,0,0,15,255,0,0) CreateKugel(198,300,0,0,15,255,0,0) CreateKugel(198,269,0,0,15,255,0,0) CreateKugel(172,347,0,0,15,255,0,0) CreateKugel(172,316,0,0,15,255,0,0) CreateKugel(172,284,0,0,15,255,0,0) CreateKugel(172,253,0,0,15,255,0,0) CreateKugel(500,300,-11,Rnd(-1.5,1.5),15,255,255,255) ;CreateKugel(250,300,0,0,20,255,0,0) ;CreateKugel(290,300,0,0,15,255,0,0) ;CreateKugel(325,300,0,0,5,255,0,0) ;CreateKugel(550,300,-3,0,15,255,255,255) ;CreateKugel(25,585,0,0,255,0,0) ;CreateKugel(75,585,0,0,255,0,0) ;CreateKugel(125,585,0,0,255,0,0) ;CreateKugel(175,585,0,0,255,0,0) ;CreateKugel(225,585,0,0,255,0,0) ;CreateKugel(275,585,0,0,255,0,0) ;CreateKugel(325,585,0,0,255,0,0) ;CreateKugel(375,585,0,0,255,0,0) ;CreateKugel(425,585,0,0,255,0,0) ;CreateKugel(475,585,0,0,255,0,0) ;CreateKugel(525,585,0,0,255,0,0) ;CreateKugel(575,585,0,0,255,0,0) ;CreateKugel(625,585,0,0,255,0,0) ;CreateKugel(675,585,0,0,255,0,0) ;CreateKugel(725,585,0,0,255,0,0) ;CreateKugel(775,585,0,0,255,0,0) ;CreateKugel(100,100,0,0,255,255,255) Repeat If KeyHit(57) Goto reset WaitTimer(timer1) Update() Render() Flip Cls Until KeyHit(1) End Function Update() kollision_fertig = False energie# = 0.0 tu# = 0.0 For a.Kugel = Each Kugel a\tu# = 0.0 a\lastcoll = Null energie# = energie# + 0.5 * ((a\vx)^2 + (a\vy^2)) Next Repeat For a.Kugel = Each Kugel For b.Kugel = Each Kugel If (a <> b) And ((a\lastcoll <> b) Or (b\lastcoll <> a)) d# = (a\x - b\x) e# = (a\vx - b\vx) n# = (a\y - b\y) u# = (a\vy - b\vy) qa# = (e^2 + u^2) qb# = 2*(d*e + n*u) qc# = (d^2 + n^2) - (a\r + b\r)^2 w# = qb^2 - 4*qa*qc If (w# < 0) Then collision = False Else w# = Sqr(w#) t1# = (-qb + w) / (2*qa) t2# = (-qb - w) / (2*qa) tu# = a\tu t# = -1 If ((t1 >= 0) And (t1 <= (1.0 - tu))) Then t# = t1 If (((t2 >= 0) And (t2 <= (1.0 - tu))) And ((t# <> -1) Or (t2 < t1))) Then t# = t2 If (t# <> -1) Then collision = True Else collision = False End If End If If collision Then ;Kollision registrieren newcol.Kollision = New Kollision newcol\eins.Kugel = a newcol\zwei.Kugel = b Repeat anx# = a\x# + a\vx#*(t# - buffer#) any# = a\y# + a\vy#*(t# - buffer#) bnx# = b\x# + b\vx#*(t# - buffer#) bny# = b\y# + b\vy#*(t# - buffer#) If ((anx - bnx)^2 + (any - bny)^2) < (a\r + b\r)^2 Then buffer# = buffer# + 0.000001 Else Exit End If Forever newcol\time# = t# - buffer# End If End If Next Next ;Kleinstes suchen If (First Kollision = Null) kollision_fertig = True Else early.Kollision = First Kollision For col.Kollision = Each Kollision If (col\time# < early\time#) Then early = col Next a = early\eins b = early\zwei a\lastcoll = b b\lastcoll = a For k.Kugel = Each Kugel k\x# = k\x# + k\vx#*(early\time#) k\y# = k\y# + k\vy#*(early\time#) Next tu# = early\time# ;Kollidieren wi# = ((b\y# - a\y#) / (b\x# - a\x#)) apx# = (wi * a\vy + a\vx) / (wi^2 + 1) asy# = a\vy - wi*apx bpx# = (wi * b\vy + b\vx) / (wi^2 + 1) bsy# = b\vy - wi*bpx anx# = bpx + a\vx - apx any# = b\vy - bsy + asy bnx# = apx + b\vx - bpx bny# = a\vy - asy + bsy a\vx# = anx# a\vy# = any# b\vx# = bnx# b\vy# = bny# For col.Kollision = Each Kollision Delete col Next End If Until (kollision_fertig) For a.Kugel = Each Kugel a\x# = a\x# + a\vx#*(1.0 - a\tu#) a\y# = a\y# + a\vy#*(1.0 - a\tu#) Next End Function Function Render() For k.Kugel = Each Kugel Color 0,0,k\clr Oval Int(k\x#-k\r),Int(k\y#-k\r),2*k\r,2*k\r Next Color 0,255,0 Text 10,10,"Energie: " + energie,0,0 End Function Function CreateKugel.Kugel(x#,y#,vx#,vy#,rad%,r%,g%,b%) newkugel.Kugel = New Kugel newkugel\x# = x# newkugel\y# = y# newkugel\vx# = vx# newkugel\vy# = vy# newkugel\r% = rad% newkugel\clr% = $10000 * r + $100 * g + b Return newkugel End Function |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
top!
Was man so erkennen kann, keine groben physikalischen Fehler. Meinen Respekt hast du! Gute Ausgangslage für ein Billard. In die Richtung was geplant? MfG D2006 |
||
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke! ![]() Momentan hab ich nicht geplant daraus eine Billardsimulation zu machen, aber was noch nicht ist kann ja noch werden! Ich hatte einfach mal Lust sowas zu simulieren, weil ich das früher schon zweimal versucht habe, damals aber einfach nicht den richtigen Ansatz gefunden habe! Was ich noch einbauen will sind Wände mit beliebigem Winkel, dann schau ich ob ich ein Billard draus mach! MfG Ctuchik |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group