Ich habe zunächst versucht, eine rechteckige Kreuzung zu implementieren, was gut funktioniert. Wenn ich jedoch das physikalische System anwenden muss, wie Geschwindigkeits-, Beschleunigungs- und Richtungsvektoren, muss ich einen Weg finden, um zu bestimmen, welche Seite der Rechtecke kollidieren. In meinem System gibt es kein gedrehtes Rechteck, daher wurde das Problem dadurch vereinfacht. Ich konnte jedoch nicht leicht feststellen, welche Rechteckseite kollidierte. Ich habe mich schon einmal mit diesem Problem beschäftigt, bin aber kläglich gescheitert.
Was ich in der Vergangenheit getan habe, ist, den Abstand zwischen den einzelnen parallelen rechteckigen Seiten zu bestimmen und zu überprüfen, ob der Abstand nahe bei 0 liegt (verwenden Sie einen anfänglich definierten Abstandsbereich) oder 0. Für Gleitkomma-Arithmetik erweist sich dies jedoch als instabil, weil unbekannter Zeitspanne. Manchmal überschneiden sich die Rechtecke tatsächlich, bevor sie den definierten Bereich erreichen.
Andererseits habe ich darüber nachgedacht, mehrere Rechtecke zu erzeugen, jedes Rechteck für jede Seite. Nach erneutem Überlegen wäre es jedoch dasselbe wie eine parallele Seite mit Entfernungsbereichsprüfung, nur dass dieser Entfernungsbereich die Breite jedes Mini-Rechtecks ist.
Also irgendeinen Vorschlag zu diesem Problem?
quelle
Antworten:
Angepasst von meiner Antwort auf "Welche Seite wurde getroffen?" :
Ich schlage vor, die Minkowski-Summe von B und A zu berechnen , die ein neues Rechteck ist, und zu prüfen, wo das Zentrum von Rechteck A relativ zu diesem neuen Rechteck liegt (um zu wissen, ob eine Kollision stattfindet) und zu seinen Diagonalen (um zu wissen, wo die Kollision stattfindet) es passiert):
quelle