Punktabstand mit Euklid

Status
Nicht offen für weitere Antworten.

kwonilchang

Aktives Mitglied
Hallo!

Habe folgendes Problem: Habe eine ArrayList mit Punkten. Nun möchte ich mittels der euklidischen Formel für Distanzberechnung alle Punktabstände berechnen.

Habe hierzu folgendes gemacht:

Code:
for (int i = 0; i < points.size(); i++){
			for (int j = 1; j < points.size()-i; j++){
				double distance = Math.sqrt(((((points.get(i)).x)-((points.get(j)).x))^2)+((((points.get(i)).y)-((points.get(j)).y))^2));
				System.out.println (distance);
				//System.out.println (points.get(i));
			}	
		}

Die Berechnung ergibt z. B. bei den Punkten (1,2) und (2,3) 0. Müsste aber 1.4 sein. Auch die anderen Distanzberechnungen stimmen nicht. Weiß jemand, wo da der Fehler liegt?
 

quippy

Bekanntes Mitglied
Bei den vielen Klammern verliert man schnell den Überblick. Ich empfehle Dir, das in Teilergebnisse zu spalten.

Code:
double distance = Math.sqrt(((((points.get(i)).x)-((points.get(j)).x))^2)+((((points.get(i)).y)-((points.get(j)).y))^2));

==>
Point p1 = points.get(i);
Point p2 = points.get(j);

double x1 = p1.x;
double x2 = p2.x;
double d1 = (x1-x2)^2;

double y1 = p1.y;
double y2 = p2.y;
double d2 = (y1-y2)^2;

double distance = Math.sqrt(d1+d2);

wenn das läuft, kannst Du das von mir aus wieder zusammenführen...
 

LordLuzifer

Aktives Mitglied
Soweit ich das sehe, ergibt ^2 _nicht_ das Quadrat, sondern addiert 2!

EDIT: Das macht es auch bei negativen Zahlen ^^
 
S

SlaterB

Gast
und dann schaue dir auch mal das Ergebnis aus

Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {

        int d = 4;
        double k = d ^ 2;

        System.out.println(k);

    }

}
an

edit: naja, irgendjemand verrät es dann auch einfach ;)
(bei negativen Zahlen wird nicht 2 addiert)
 

kwonilchang

Aktives Mitglied
Hat schonmal was gebracht. Berechnet bei Eingabe von 3 Punkten die ersten beiden Abstände korrekt. Nur den letzten Abstand (2. und 3. Punkt) setzt das Programm auf 0.0.
 
S

SlaterB

Gast
wenn das eine Frage ist, dann poste Code dazu,

hast du die Postings zu ^ gesehen?
wenn du Zwischenvariablen verwendest kannst du relativ einfach
double d1 = (x1-x2)*(x1-x2);
verwenden,
ansonsten Math.pow(irgendwas,2)
 

quippy

Bekanntes Mitglied
:oops: Argh... Mir kam "^" für pow schon bei meinem Posting komisch vor - tja, das XOR nicht wirklich das erwartete Ergebnis bringt...

Ich brauche mehr Kaffee...

:meld:
PS: Zu meiner Ehrenrettung und da es offensichtlich noch kein Poster erklärt hat:
Das 4^2 als Ergebnis 6 hat, bedeutet nicht, daß hier 2 addiert wurde. Es wurden nur das 1. Bit gesetzt.
6^2 ergibt dann wieder 4, da das 1. Bit gesetzt war und somit wieder gelöscht wird.

1010
^ 0101
--------
= 1111
^ 0101
--------
= 1010
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben