Ihr Trennungscode war nicht korrekt. Verwenden Sie den Vektor zwischen ihnen, um die neue Position zu erhalten.
Um zu ermitteln, ob zwei Kreise abgefangen werden, finden Sie die Länge des Vektors von einem zum nächsten
Die zwei Kreise.
%Vor% Der Vektor von cir2
bis cir1
Die Länge des Vektors
%Vor%Die Kreise überschneiden sich, wenn die Summe der Radien größer ist als die Länge des Vektors zwischen ihnen
%Vor%Wenn sie sich überlappen, müssen Sie sich von einander entfernen. Es gibt viele Möglichkeiten, dies zu tun, am einfachsten ist es, einen Kreis entlang der Linie zwischen ihnen zu bewegen.
Zuerst normalisieren Sie den Vektor von cir1
auf cir2
, indem Sie ihn durch seine (Vektor-) Länge dividieren.
Beachten Sie, dass die Länge Null sein könnte. Wenn dies passiert, erhalten Sie NaN
in weiteren Berechnungen. Wenn Sie vermuten, dass Sie einen Kreis an der gleichen Stelle wie an einem anderen bekommen können, bewegen Sie sich am einfachsten mit der Null und bewegen Sie einen Kreis ein wenig.
Nun haben Sie den normalisierten Vektor, der 1 Einheit lang ist. Sie können ihn beliebig lang machen, indem Sie die beiden Skalare vx
, vy
mit der gewünschten Länge multiplizieren, die in diesem Fall die Summe der beiden Kreisradien ist .
. Verwenden Sie nur eine der folgenden Methoden .
Sie können nun einen der Kreise auf die richtige Entfernung positionieren, so dass sie
berühren %Vor%Oder verschieben Sie den zweiten Kreis
%Vor%Oder verschiebt beide Kreise, aber Sie müssen zuerst das proportionale Zentrum zwischen den beiden finden.
%Vor%Dann bewegen Sie beide Kreise von diesem Punkt weg um ihre Radien
%Vor% Kopieren Sie das OP-Snippet mit Mods, um das Problem zu beheben, indem Sie den ersten Kreis blob1
von der zweiten blob2
wegbewegen und davon ausgehen, dass sie sich nie an derselben Stelle befinden (keine Division durch Null)
Tags und Links javascript canvas