Trennachse Satz macht mich verrückt!

9

Ich arbeite an einer Implementierung des Separting Axis Theorems für den Einsatz in 2D-Spielen. Es funktioniert irgendwie, aber nur irgendwie.

Ich benutze es so:

%Vor%

Dabei haben c1 und c2 den Typ Convex , definiert als:

%Vor%

( Point ist eine Struktur von float x , float y )

Die Punkte werden im Uhrzeigersinn eingegeben.

Mein aktueller Code (ignoriere Qt debug):

%Vor%

Was mache ich falsch? Es registriert die Kollision perfekt, ist aber an einer Kante zu empfindlich (in meinem Test mit einem Dreieck und einem Diamanten):

%Vor%

Ich bekomme diesen Mega-Adhd darüber, bitte hilf mir:)

Ссылка

    
Alex 07.12.2010, 10:55
quelle

1 Antwort

5

OK, ich habe mich das erste Mal geirrt. Wenn Sie Ihr Bild eines Fehlerfalls betrachten, ist es offensichtlich, dass eine Trennachse existiert und eine der Normalen ist (die Normale zur langen Kante des Dreiecks). Die Projektion ist korrekt, Ihre Grenzen jedoch nicht.

Ich denke, der Fehler ist hier:

%Vor%

FLT_MIN ist die kleinste positive Zahl , die durch einen Gleitkommawert dargestellt werden kann , nicht die negativste Zahl. In der Tat brauchen Sie:

%Vor%

oder noch besser für C ++

%Vor%

weil Sie wahrscheinlich negative Projektionen auf der Achse sehen.

    
Adam Bowen 08.12.2010, 08:44
quelle

Tags und Links