# Quadrat in mehreren Punkten erkennen



## Eratu (22. Jun 2016)

Hallo alle zusammen,

ich bin noch relativ neu auf dem Gebiet programmieren.
Meine Aufgabe ist es aus vielen Punkten ein Quadrat zu erkennen.
Ich speichere die Punkte als Point in einer ArrayList. 
Ich hatte bisher folgenden Ansatz:

Mittelpunkt von vier Punkte berechnen und von diesem dann den Abstand zum ersten Punkt berechnen -> das funktioniert leider nicht, da ich keine ungeraden Punkte(z.B. P(2,5/3) haben kann.

Mein nächster Ansatz wäre, dass ich mit Hilfe zwei for-Schleifen jeden Punkt mit jedem vergleiche (also x1-x2 und y1-y2) und das Ergebnis als Point abstand speichere. Anschließend vergleiche ich, ob es mehrere gleiche Abstandspunkte gibt. Leider passt das auch nicht :/

Ich habe leider nichts passendes im Forum oder generell im Internet gefunden. Meistens wird der Mittelpunkt berechnet und das funktioniert bei mir ja nicht.

Danke im Voraus für alle neuen Ideen und Anregungen


----------



## JStein52 (22. Jun 2016)

Eratu hat gesagt.:


> Meistens wird der Mittelpunkt berechnet und das funktioniert bei mir ja nicht.


Weil du awt-Point verwendest und dieses mit int-Komponenten arbeitet. (klar, ein Point ist da ja auch eine Pixel-Koordinate). Du brauchst eine mathematische Library und könntes mal Apache commons-math googeln. Da gibst was für dich.


----------



## mrBrown (22. Jun 2016)

Point2D.Double sollte aber auch gehen


----------



## Thallius (22. Jun 2016)

Ich würde auch einen anderen Ansatz wählen.

Pseudocode mal so grob hingekritzelt ohne getestet zu haben


```
for (Point p : points)
{
    while( xp = nextPointOnXAxis(p) != NULL)
    {
          int width = xp.x - p.x;
          if(isPointAt(p.x, p.y + width) == true && isPoint(xp.x, xp.y + width) == true)
              // quadrat found
    }
}
```

nextPointOnXAxis holt alle Punkte die auf der gleichen X-Achse leigen wie p und isPointAt() testet ob es einen Punkt an den Koordinaten gibt.

Gruß

Claus


----------

