2016-06-16 10 views
2

Ich schreibe eine Kollisionserkennung von zwei Kreisen. Aber was ich wirklich will, ist, dass das Hauptobjekt nur mit anderen Objekten auf der Hälfte seiner Oberfläche, wie das Bild unten zeigt kollidieren:Wie Kollision von Halbkreisen in HTML5 Canvas zu erkennen?

enter image description here

Die Halb cricle Oberfläche mit anderen Kreisen aus verschiedenen Richtungen zu kollidieren wird . Wie sollte ich die Funktion schreiben, um dies zu simulieren?

Was ich im Moment für zwei Kreise Erkennung ist wie folgt herausgefunden:

var dx = circle1.x - circle2.x; 
var dy = circle1.y - circle2.y; 
var distance = Math.sqrt(dx * dx + dy * dy); 

if (distance < circle1.radius + circle2.radius) { 
    // collision detected! 
} 

Aber wie wäre es nur die Hälfte des Hauptkreis einlässt? Wie steht es damit, dass nur ein Bruchteil der Kreisfläche in die Kollision verwickelt wird? Sagen nur Math.PI/2 Grad des Kreises wird die Kollision erkennen?

Antwort

0

Angenommen, Ihr Code zur Kollisionserkennung ist korrekt (ich habe ihn nicht getestet), Sie müssen nur bestimmen, welcher Kreis weiter rechts liegt, um zu wissen, welcher kollidiert.

Beachten Sie, dass Ihr Halbkreis im Bild circle1 ist.

if (distance < circle1.radius + circle2.radius) { 
    // collision detected! 
    if(circle1.x < circle2.x){ 
     // Circle collided on the right side of the other circle, 
     // which means it's a real collision.. 
    } 
} 
0

Kann dieser Halbkreis rotieren? Wenn nicht, dann ist es ziemlich einfach: Kollision passiert nur auf der rechten Seite, was bedeutet, dass Sie nur zwischen half_circle_center.x_position und half_circle_center.x_position + half_circle.radius

+0

überprüfen müssen Ja, es bewegt sich in allen möglichen Richtungen. Beachten Sie, dass wir die Kollision des flachen Teils nicht erkennen. – newguy

+0

Dann ist es härter - alles, was ich herausfinden kann, ist, dass Sie die zwei Kantenpunkte bestimmen (die im aktuellen Fall 'centerX, centerY + -radius' sind, aber mit nicht senkrechten Linien knifflig werden) und mit dem Rotationswinkel definieren Sie a gestalten. Sie können dann bestimmen, ob ein zufälliger X, Y-Punkt innerhalb des Halbkreises liegt. –

+0

Aber Kollision ist im Allgemeinen eine schwierige Aufgabe, daher würde ich vorschlagen, nach relevanten Bibliotheken zu suchen, wenn Sie eine zunehmende Komplexität jenseits einfacher Formen wünschen. PhaserJS zum Beispiel hat großartige Physik-Engines. –