Warum Kreise bei Kollision vibrieren (Canvas)

10

Ich habe einen Klon von agar.io erstellt und ich verstehe nicht, warum die Kreise anfangen zu vibrieren, wenn sie sich berühren. Unten ist mein Code:

%Vor% %Vor% %Vor%
    
halfer 12.05.2017, 15:46
quelle

2 Antworten

3

Kreise trennen

Ihr Trennungscode war nicht korrekt. Verwenden Sie den Vektor zwischen ihnen, um die neue Position zu erhalten.

Der Vektor zwischen ihnen

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

%Vor%

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%

Normalisieren Sie den Vektor

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.

%Vor%

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.

%Vor%

Bewegen Sie Kreise / s, um

zu berühren

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 .

%Vor%

. 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%

DEMO

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)

%Vor% %Vor% %Vor%
    
Blindman67 12.05.2017, 16:00
quelle
0

%Vor% %Vor% %Vor%
    
andrea 13.05.2017 03:46
quelle

Tags und Links