Kollision von zwei Kreisen

Java4win

Aktives Mitglied
Hey Leute,

Habe ein einfaches Programm geschrieben indem zwei Kreise in einem Fenster an den "Wänden" (Fensterrand) abprallen und sich auch gegenseitig treffen können.

Jedoch ist die Kollision der beiden Kreise noch nicht ganz ausgereift. Es passiert schon etwas jedoch überlappen diese sich.

Ich habe die Kollision mit der Vektorrechnung gemacht. Der Radius eines Balls beträgt 25.

Hier der Code:

Java:
double ab1 = (Var.xOval1 + 50) - (Var.xOval2 + 50);
                double ab2 = (Var.yOval1 + 50) - (Var.yOval2 + 50);
               
                double ab3 = Math.sqrt(Math.pow(ab1, 2) + Math.pow(ab2, 2));
               
                if (ab3 <= 50){
                   
                    Var.xOval1dir *= -1;
                    Var.yOval1dir *= -1;
                   
                }

Wie gesagt prallen die schon voneinander ab jedoch zu spät, da der eine Kreis erst einmal unter dem anderen Kreis verschwunden sein muss. Was stimmt hier also nicht ?

Vielen Dank im Voraus:)
 

Java4win

Aktives Mitglied
Vor allem deine Variablennamen... Sorry aber da hab ich direkt die Lust verloren zu verstehen was du da machst.
Evtl kannst du ja trotzdem hilfreich sein. Kennst du einen Artikel wo es um die Formalitäten beim Programmieren geht? Wie am besten Variablen, Klassen etc. benannt werden. Ich möchte mich ja auch dort verbessern.
 

thecain

Top Contributor
Nicht alle static in der Klasse Var haben, wäre mal ein erster Schritt, dann noch anständige Namen suchen die etwas aussagen
 

Java4win

Aktives Mitglied
Überlege dir doch mal wie wir als außenstehende wissen sollen was "ab1", "ab2" oder "ab3" bedeuten soll?
besser ?
Java:
double vektorX = (Var.xKreis1 + 50) - (Var.xKreis2 + 50);
                double vektorY = (Var.yKreis1 + 50) - (Var.yKreis2 + 50);
              
                double vektorLänge = Math.sqrt(Math.pow(vektorX, 2) + Math.pow(vektorY, 2));
              
                if (vektorLänge <= 50){  //50 ist die Summe der zwei Kreisradien
                  
                    Var.xKreis1Richtung*= -1;
                    Var.yKreis1Richtung *= -1;
                  
                }
 

Robat

Top Contributor
Das würde ich dir auch empfehlen.
Mit dieser fragwürdigen Vars Klasse ( und den darin enthaltenen statischen Variablen ) machst du dir das Leben nur sehr viel schwerer.
 

Java4win

Aktives Mitglied
Mit dieser fragwürdigen Vars Klasse ( und den darin enthaltenen statischen Variablen ) machst du dir das Leben nur sehr viel schwerer.
Ja, nur irgendwie fand ich es Übersichtlicher alle wichtigen Variablen in einer Klasse unterzubringen.
Aber es ist ja irgendwie auch unter programmieren schlecht angesehen wenn die Variablen in einer Klasse nicht private sind.

Kennst du eine gute Quelle zum lernen, wo man "richtige" Informationen bekommt?
 

JuKu

Top Contributor
Ich weiß nicht, ob dem Thread Ersteller bereits geholfen wurde, deshalb schreibe ich nochmal was dazu.
Um zu überprüfen, ob 2 Kreise kollidieren, verwendet man den Mittelpunkt & den Radius und berechnet die Entfernung.

Für den Kreis kannst du folgende Klasse verwenden:
Java:
class Circle {

    protected double x = 0;
    protected double y = 0;
    protected double radius = 0;

    //constructor
    public Circle (double x, double y, double radius) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    public double getX () {
        return this.x;
    }

    public double getY () {
        return this.y;
    }

    public double getRadius () {
        return this.radius;
    }

    //check, if this circle collides with another circle
    public boolean collides (Circle c) {
        double radiusSum = this.getRadius() + c.getRadius();

        //substract vectors to calculate distance
        double x1 = c.getX() - this.x;
        double y1 = c.getY() - this.y;

        //calculate length of vector
        double length = Math.sqrt((x1 * x1) + (y1 + y1));

        return length <= radiusSum;
    }

}

Beispiel Code:
Java:
//create 2 circles
Circle c1 = new Circle(0, 0, 10);
Circle c2 = new Circle (2, 2, 5);

//check, if circles collides
boolean collides = c1.collides(c2);
 

Java4win

Aktives Mitglied
Für den Kreis kannst du folgende Klasse verwenden:
Vielen Dank.

Mein Hauptproblem war bisher immer das ich das ganze zeichnen wollte und die Kreise werden leider nicht von der angegebenen x und y Koordinate gezeichnet, sondern die Koordinaten geben einen Punkt an welcher sich etwa oben Links befindet und von dort aus wird gezeichnet.

Es wird ja zuerst ein Viereck gezeichnet und darein der Kreis.

Ich hoffe man konnte das irgendwie verstehen.
 

JuKu

Top Contributor
Dann musst du eben die Koordinaten umrechnen.

Java:
double middleX = x + (width / 2);
double middleY = y + (height / 2);

Je nachdem, wie dein Koordinatensystem aussieht, musst du das eben anpassen.
Ich ging gerade davon aus, dass sich der Koordinatenursprung (0, 0) unten links befindet.

Wieso wird erst ein Rechteck gezeichnet?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Kollision zwischen ImageIcon und Rechteck Allgemeine Java-Themen 1
B Kollision zweier Kugeln im R² Allgemeine Java-Themen 2
R Dreieck-Dreieck Kollision (triangle-triangle intersection) Allgemeine Java-Themen 11
L Kollision mit Wand Allgemeine Java-Themen 4
K Kollision im 3D Raum Allgemeine Java-Themen 3
V 2D Kollision -> Abstossung Allgemeine Java-Themen 5
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
D Zwei Listen vergleichen Allgemeine Java-Themen 7
Tobero Wie berechnet man ob zwei Linien sich schneiden? Allgemeine Java-Themen 2
kodela Zwei gleichzeitig gedrückte Steuertasten Allgemeine Java-Themen 10
X Bedingung zwei mal überprüfen Allgemeine Java-Themen 4
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
VfL_Freak Double mit zwei festen NK-Stellen ausgeben Allgemeine Java-Themen 9
Neoline Methoden Zwei Arrays abwechselnd zusammenführen Allgemeine Java-Themen 15
J Zwei Wavdateien gleichzeitig mit SourceDataLine abspielen Allgemeine Java-Themen 0
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
J Fahrroute zwischen zwei Punkten finden Allgemeine Java-Themen 1
J Transfer von Integer zwischen zwei Clients - RMI Allgemeine Java-Themen 4
S Variablen split-Funkton mit zwei Variabeln verwenden? Allgemeine Java-Themen 4
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
AssELAss Zwei Arrays / ArrayLists inhaltlich vergleichen Allgemeine Java-Themen 2
H RegularExpression zwischen zwei Strings Allgemeine Java-Themen 2
P Zwei Applikationen mit einem Job Allgemeine Java-Themen 0
A Lineare Interpolation mit zwei Arrays Allgemeine Java-Themen 4
E Berechnung des Schnittpunktes von zwei Geraden Allgemeine Java-Themen 1
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Dechasa Vergleichen von zwei Arrays Allgemeine Java-Themen 4
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
S Anwendung zum ausrechnen der Differenz von zwei Tagen Allgemeine Java-Themen 9
F Zwei LinkedHashMaps iterieren und vergleichen Allgemeine Java-Themen 2
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
L Zwei Files miteinander vergleichen und Grafisch darstellen Allgemeine Java-Themen 1
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
F Webstart zwei Java Versionen / aktivieren bzw deaktivieren Allgemeine Java-Themen 2
S Zwei Comparable (compareTo) vergleichen Allgemeine Java-Themen 6
E zwei Gleitkommazahlen durcheinander dividieren Allgemeine Java-Themen 2
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
C Threads Zwei Threads greifen auf LinkedList zu. Allgemeine Java-Themen 12
T Wie heißt ein Binärbaum, dessen Knoten immer zwei Kinder haben müssen? Allgemeine Java-Themen 2
C ActionListener zwei Buttons zuweisen Allgemeine Java-Themen 11
M Eclipse drei slashs durch zwei ersetzen? Allgemeine Java-Themen 3
1 zwei Strings vergleichen Allgemeine Java-Themen 16
C Buchstaben, die in zwei Wörtern vorkommen Allgemeine Java-Themen 13
J Gleiche Packagestruktur in zwei *.jar Dateien Allgemeine Java-Themen 4
G Zwei bytes vergleichen Allgemeine Java-Themen 2
B zwei-dimensionale Collections bzw. Array mit Indizes Allgemeine Java-Themen 3
C Zwei Arrays vereinen Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
N hashCode() für zwei ints Allgemeine Java-Themen 5
turmaline Gleichheit von zwei Maps Map <String, Map <String, String>> Allgemeine Java-Themen 30
N Wie Listenabgleich auf zwei CPU Cores auslagern? Allgemeine Java-Themen 6
D Zufall wahr bzw. falsch mit zwei Faktoren Allgemeine Java-Themen 10
H Datenaustausch zwischen zwei Java-Programmen Allgemeine Java-Themen 5
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
H Zwei unabhängige Threads miteinander kommunizieren lassen Allgemeine Java-Themen 3
G zwei mal synchronized Allgemeine Java-Themen 5
Z zwei Daten vergleichen Allgemeine Java-Themen 4
C ArrayList anhand von zwei Attributen sortieren Allgemeine Java-Themen 4
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
T IText: Zwei A4 PDF´s auf ein A3 PDF´s Allgemeine Java-Themen 2
J Verschachtelte ListIteratoren um in zwei Listen hin und herzugehen Allgemeine Java-Themen 5
A Differenz zwischen zwei Uhrzeiten Allgemeine Java-Themen 7
H Shortcut ruft zwei Menu-punkte auf Allgemeine Java-Themen 5
J Zwei konstruktoren? Allgemeine Java-Themen 8
A zwei listen vergleichen und unterschiede anzeigen Allgemeine Java-Themen 3
J Zwei sortierte Listen zusammenfassen Allgemeine Java-Themen 8
G Linked List zwischen zwei Threds übergeben Allgemeine Java-Themen 11
J zwei HashMaps vereinen Allgemeine Java-Themen 3
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
G Jfreechart zwei charts Allgemeine Java-Themen 2
S Zwei Anwendungen unter Tomcat Allgemeine Java-Themen 4
T Anzahl Tage zwischen zwei Daten - Stunde fehlt? Allgemeine Java-Themen 2
V Zwei ArrayList(s) vergleichen Allgemeine Java-Themen 6
T Überprüfen ob zwei Farben ähnlich sind Allgemeine Java-Themen 14
M zwei main-Methoden Allgemeine Java-Themen 7
P zwei JFrames zusammenhängen Allgemeine Java-Themen 4
A Summe und Produkt von zwei Feldern ( arrays) Allgemeine Java-Themen 9
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
2 Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 2
G Tage zwischen zwei Datumsdaten zählen Allgemeine Java-Themen 3
J Zwei String auf ähnlichkeiten untersuchen? Allgemeine Java-Themen 3
C kürzester weg zwischen zwei Punkten, Koordinaten finden Allgemeine Java-Themen 15
B zwei Bilder miteinander vergleichen Allgemeine Java-Themen 25
L Anzahl Tage zwischen zwei Kalenderdaten Allgemeine Java-Themen 5
P Threadprogrammierung - zwei Threads parallel - einer beendet Allgemeine Java-Themen 3
G Kommunikation von zwei Java-Programmen Allgemeine Java-Themen 3
A Zusammenfassen von zwei Dateien (wie beim DOS-Befehl copy) Allgemeine Java-Themen 6
S zwei Arrays zusammenfassen Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben