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...