wpadłem na pomysł innego sposobu wykrywania kolizji, pomysł opiera się na wpisaniu w nasz czworokąt okręgu
dobrze by było gdyby nasze testowane czworokąty były kwadratami (wszystkie krawędzie tej samej długości), wtedy środek kwadratu jest też środkiem okręgu wpisanego w ten kwadrat
rozmiar kwadratu znamy bo jest stały, więc znamy również promień okręgu wpisanego w ten kwadrat
teraz wystarczy obliczyć odległość od środka naszego okręgu (środka naszego kwadratu) do środka drugiego testowanego okręgu, jeśli odlegość jest mniejsza od podwójnej długości promienia okręgu (średnicy) wówczas mamy kolizję
odległość od dwóch punktów obliczmy z Twierdzenia Pitagorasa (a^2 + b^2 = c^2)
DX = abs(x2-x1)
DY = abs(y2-y1)
teraz aby było to ultra szybkie tworzymy tablice z wartością 1 gdy wystąpiła kolizja, a 0 gdy nie było kolizji
Przykładowy program do wyliczenie tablicy:
minimalna_odleglosc = 6
for y = 0 to 127
for x = 0 to 255
d = sqrt(x*x + y*y)
if d < minimalna_odlegosc then
tablica[x+y*256] = 1
else
tablica[x+y*256] = 0
next x
next y
zamiast zapisywać tablice bajtami można zapisać ją bitami, wtedy zamiast 32768 bajtów będziemy mieli tylko 32768/8 = 4096 bajtów
tylko po co to wszystko, przeciez już na podstawie DX i DY jesteśmy w stanie ocenić czy kwadraty nakładają się :) sprawdzamy tylko czy DX i DY zawiera się w z góry określonym zakresie :)
i tak oto nie potrzeba nam już żadnych tablic, a test kolizji niezależnie od wielkości ducha przebiega z tą samą szybkością
śmiem twierdzić, że jest to najszybsza metoda wyznaczenia kolizji dla proporcjonalnych czworokątów, szybsza niż zastosowana w Dynablaster, tam były testowane kolizje przy użyciu bufora, jak w "Engine #3"
przykładem zastosowania w/w metody jest "Engine #4", teraz możecie już pisać nowe gry :) http://g2f.atari8.info/softsprt_gfx_4.zip
możnaby zastosować taką detekcję kolizji w jakimś mordobiciu, dzielimy postać na kwadraciki, czyli wyznaczamy obszary trafień i testujemy je z obszarami uderzeń przeciwnika, w ten sposób moglibyśmy określić trafienia w konkretną część ciała :D
obszary trafień i uderzeń należałoby określić dla każdej klatki animacji postaci
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C