Denkaufgabe: Kollisionsabfrage

arkanoid

Mitglied
ich habe das mal mit einem Bsp durchgerechnet, welches nicht kollidiert:

b=10

L1s=9
L1l=4

L2s=4
L2l=2

L1s=0 v=9
(mod 10 nicht notwendig, da schon im intervall)
L2s=-7
-7<0+9 => ja

Also kann da etwas nciht stimmen...

wenn L2s nach der subtraktion im minusbereich landet, dann müsstest du es entsprechend auch in den positiven bereich zurücksetzen...

Ich rechne das nochmal durch, wie ich das gemeint hatte an deinem Beispiel...
--------------------
b=10
L1s=9
L1l=4
L2s=4
L2l=2
---------------------
gut, wir setzen L1l nun auf 0 wie du es gemacht hattest... durch -9 quasi...
L1 geht also von 0 nach 4

wenn ich also von L2s nun 9 abziehe, lande ich bei -5
das verschiebe ich nun in den positiven bereich, damit wir wieder auf einer vergleichsbasis liegen... also liegen wir bei ähh... 5 als Start, wenn ich mich da nicht täusche...

und wenn wir dann prüfen, ob L2s kleiner als L1s+L1l ist, dann erhalten wir quasi False und somit überschneiden die sich nicht...

die rechnung würde dann wie folgt aussehen:
(in der reihenfolge)
---------------------------------------------------------------
WENN (L1l > L2l) DANN c = L1s SONST c = L2s

WENN (L1s > b-1) L1s = L1s % b
L1s = L1s - c
WENN (L1s < 0) DANN L1s = L1s + b
L1e = L1s + L1l

WENN (L2s > b-1) L2s = L2s % b
L2s = L2s - c
WENN (L2s < 0) DANN L2s = L2s + b
L2e = L2e + L2l

KOLLISION = MAX( L1s, L2s) <= MIN(L1e, L2e)
---------------------------------------------------------------

Mal schnell durchgerechnet mit den oberen Werten:
WENN (4 > 2) DANN c = 9
L1s = 9 - c = 0
L1e = 0 + 4 = 4
L2s = 4 - 9 = -5
WENN L2s < 0 DANN L2s = L2s + 10 = 5
L2e = 5 + 2 = 7
KOLLISION = MAX(0, 5) <= MIN(4, 7) = NEIN

Versuche am besten garnicht, dass in eine Abfrage zu kriegen,... ich verlier schon beim Ansehen der Abfrage die Übersicht :)
Mit ein paar Nebenrechnungen wird es einfacher...
 

thomy800

Erfahrenes Mitglied
Ah, jetzt verstehe ich, wie das funktionieren soll :D
Habe in der Zwischenzeit meine Formel von vorhin mal getestet und die funktioniert auch hervorragend. Und da meine Formel kürzer ist, werde ich die verwenden ;)

PS: Das Wenn von
Code:
WENN (L1s > b-1) L1s = L1s % b
kannste einsparen:
Code:
L1s = L1s % b
 

arkanoid

Mitglied
Jaaaaa... stimmt, da hast du recht :-(
wie mir das nur entgehen konnte...

Aber trotzdem eine interessante Diskussion, egal, welche Lösung bei rausgekommen ist :)