Ich bin in diesem course eingeschrieben und sie haben diese Funktion von ihrem Code example und ich verstehe nicht, wie diese besondere funktioniert.JavaScript - Ich verstehe nicht, wie diese Kollisionserkennung Funktion funktioniert
function circRectsOverlap(x0, y0, w0, h0, cx, cy, r) {
var testX=cx;
var testY=cy;
if (testX < x0) testX=x0;
if (testX > (x0+w0)) testX=(x0+w0);
if (testY < y0) testY=y0;
if (testY > (y0+h0)) testY=(y0+h0);
return (((cx-testX)*(cx-testX)+(cy-testY)*(cy-testY))< r*r);
}
Die ersten vier Argumente sind die x- und y-Position, Breite und Höhe des Rechtecks, während die letzten drei die X- und Y-Position und der Radius des Kreises, in der Leinwand sind.
Wenn sich das Rechteck und der Kreis berühren, gibt die Funktion true
zurück, daher kommt es zu einer Kollision.
Ich verstehe etwas, aber nicht vollständig. Warum überprüft es, ob die Hypotenuse kleiner ist als r * r? –
Wenn der nächstgelegene Punkt des Rechtecks näher am Mittelpunkt des Kreises liegt als sein Radius, überlappen sie sich irgendwo. Der Abstand zwischen dem nächsten Punkt auf dem Rechteck und dem Mittelpunkt des Kreises beträgt (cx-testX) * (cx-testX) + (cy-testY) * (cy-testY), das Radius-Quadrat ist r * r . Der Autor war wahrscheinlich einfacher zu schreiben als die JavaScript-Funktion Math.sqrt() auf der linken Seite zu verwenden und sie kleiner als r zu machen (was völlig äquivalent ist). –