Methoden Distanz von 2 Punkten im 2D-Raum

Kel

Aktives Mitglied
Ich hab 2 Point-Objekte, von denen ich nun die Distanz berechnen soll.
Ich finde keine Möglichkeit, die Point-Objekte direkt zu vergleichen .... ?

Code:
Point(int x, int y)
und
Code:
Point(int a, int b)
.

Die Point/Point2D-Klasse hat keine Methode, die mir da hilft (Point2D.distance() will double-Werte).

Wieso hab ich ein Point-Objekt mit 2 Intwerten, während alle Methoden von Point/Point2D double-Werte wollen? Das ist unlogisch :noe:.
Theoretisch kann ichs mit dem Satz des Phytagoras machen (Satz des Pythagoras ? Wikipedia), sieht mir aber umständlich aus, wenn ich die einzelnen Koordinaten erst deklarieren und initialisieren muss.

Point2D (Java 2 Platform SE v1.4.2)
 

Volvagia

Top Contributor
Point speichert intern int. Schau doch einfach im Source. Point definiert nur eine Methode die double will, das ist setLocation für die es auch eine int-Alternative gibt.

Definieren musst du es doch sowieso, irgendwie musst du ihm ja sagen was du willst. Machs doch einfach so:

Java:
private double pythagoras(int x1, int y1, int x2, int y2)
{
	double oppositeCathetusLenght = (x2 - x1);
	double cathetusLenght = (y2 - y1);
	
	double oppositeCathetusSquare = Math.pow(oppositeCathetusLenght, 2);
	double cathetusSquare = Math.pow(cathetusLenght, 2);
	
	return(Math.abs(Math.sqrt(oppositeCathetusSquare + cathetusSquare)));
}
private double pythagoras(Point p1, Point p2)
{
	return(pythagoras(p1.x, p1.y, p2.x, p2.y));
}

Aus nen alten Projekt von mir rausgesucht, nie getestet, hab mich darauf verlassen dass ich mal was richtig gemacht habe.

Äh, distance macht doch offenbar eh das Selbe:

Java:
public static double distance(double x1, double y1, double x2, double y2)
{
	x1 -= x2;
	y1 -= y2;
	return Math.sqrt(x1 * x1 + y1 * y1);
}
 
Zuletzt bearbeitet:

Kel

Aktives Mitglied
Ich muss es aber mit Point-Objekten machen bzw. mit den Koordinaten der Point-Objekte. Und die sind nunmal int und nicht double (oder hab ich was bei dir falsch verstanden?).

Mir kam grad die Erleuchtung - getX() und getY() liefert mir double.

Java:
double laenge = Point2D.distance(punktA.getX(), punktA.getY(), punktB.getX(), punktB.getY());
 

Volvagia

Top Contributor
Du weißt schon, dass alle Ganzzahlen automatisch in double gecastet werden können? Allererste Basic, sollte man wissen bevor man überhaupt seine erste Instanz erzeugt.
 

Kel

Aktives Mitglied
Ja das weiss ich, aber ich wollte nicht dauernd umcasten, wenn es eine fertige Methode dazu gibt, nutz ich die auch, anstatt mir die Finger schmutzig zu machen ;).
 

Volvagia

Top Contributor
Ob die Methode jetzt mit dem zurückgeben eines int-Wertes in einer double-Methode castet oder du mit dem übergeben eines int-Wertes als double-Parameter spielt doch keine Rolle. ???:L
Da hätte noch gefehlt, dass du Point überschreibst damit double gespeichert werden. :lol:
 

Kel

Aktives Mitglied
Ob die Methode jetzt mit dem zurückgeben eines int-Wertes in einer double-Methode castet oder du mit dem übergeben eines int-Wertes als double-Parameter spielt doch keine Rolle. ???:L
Ich finds übersichtlicher, wenn ich in der Methode nur double als Parameter habe, als in der Methode int zu double zu casten, wenn es das ist was du meinst.

Da hätte noch gefehlt, dass du Point überschreibst damit double gespeichert werden. :lol:
Ist Point nicht final? :D
Ansonsten, warum nicht .... ;).
 
S

Spacerat

Gast
Tja... what can I say... eine Distanz zwischen zwei Punkten mit Integern zu berechnen macht wenig Sinn. Sehen Sie selbst:
Java:
public class MyPointImpl
extends Point
{
  public MyPointImpl(int x, int y)
  {
    super(x, y);
  }

  public int distanceTo(Point p)
  {
    int x = p.x - this.x;
    int y = p.y - this.y;
    return (int) Math.round(Math.pow(x * x + y * y, 0.5));
    // das lässt sich recht einfach auf ein Minimum reduzieren...
    // return (int) distance(p.x, p.y);
  }
}
Daraus lernen wir 3 Dinge:
1. eine Distanz in Integerwerten (byte, short, int, long) zurück geben zu wollen ist viel zu ungenau und daher nicht sehr sinnvoll.
2. "Point2D.distance(double x, double y)" macht ungefähr das selbe wie "MyPointImpl.distanceTo(Point p)". Der einzige Unterschied: Man muß den Methodenaufruf nich immer explizit auf "int" casten.
Fazit: "Point.distance(double x, double y)" lässt sich sehrwohl für die Berechnung heranziehen.
@Edit: Nein... Point ist nicht final... der Code oben funktioniert ;)... allerdings hab' ich für das Testen nun so lange gebraucht, dass das Thema nun schon fast erledigt ist...
 
Zuletzt bearbeitet von einem Moderator:

Volvagia

Top Contributor
Klar, es ging eigendlich darum, warum er umbedingt die Eingangsparameter als double haben wollte, wenn es ja eigendlich keinen Unterschied macht. Aber sorry, die Nacht hat irgendwie komische Einflüsse auf mich. :oops::autsch:
btw. "^0.5" habe ich als Wurzelrechnung noch nie gesehen. ^^
 
S

Spacerat

Gast
btw. "^0.5" habe ich als Wurzelrechnung noch nie gesehen. ^^
Dann hat dieser Thread ja noch einen Lerninhalt...
Ein Rechner kann nicht wirklich radizieren, potenzieren funktioniert aber. Radizieren heisst glücklicherweise nichts anderes, als mit dem Kehrwert des Wurzelexponenten zu potenzieren. Bei der Quadratwurzel ist der Wurzelexponent 2 und der Kehrwert dem entsprechend 0.5.
dieses "pow(x, 0.5)" ist nun mehr Macht der Gewohnheit, weil es in jedweder API kaum noch auffällt, dass eine "sqrt(x)"-Methode letzendlich immer in einer solchen "pow()"-Methode landet, weil Rechner zwar schneller geworden sind, aber immer noch nicht radizieren können. Naja, ob sie es irgendwann noch lernen ist völlig belanglos. Es geht ja auch anders. Als ich mit coden angefangen habe, konnte man damit jedenfalls noch ein wenig Performance rauskitzeln und auch mit anderen Wurzelexponenten arbeiten. Letzteres gilt natürlich auch heute noch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Distanz zwischen zwei Punkten Java Basics - Anfänger-Themen 4
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
P Erste Schritte Orte mit Distanz > x km in einer Map speichern Java Basics - Anfänger-Themen 2
B Vererbung Zugriff auf in der main erzeugten Distanz aus dritter Klasse Java Basics - Anfänger-Themen 5
O Fehler in der String-Distanz-Berechnung Java Basics - Anfänger-Themen 5
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
D Suche nach der Anzahl von Zonen zwischen zwei Punkten Java Basics - Anfänger-Themen 2
A if-Anweisung zwischen zwei Punkten Java Basics - Anfänger-Themen 1
E Berechnung von Punkten Java Basics - Anfänger-Themen 4
D Berechnung des Abstandes von zwei Punkten in einem Koordinatensystem Java Basics - Anfänger-Themen 14
M Länge der Strecke zwischen zwei Punkten Java Basics - Anfänger-Themen 10
H Methoden Array aus Punkten erzeugen, mittels Punkt-Klasse Java Basics - Anfänger-Themen 5
N Winckel zwischen zwei Punkten Java Basics - Anfänger-Themen 9
Mikescher Winkel zwischen 2 Punkten und der X-Achse Java Basics - Anfänger-Themen 11
B Anzahl von gerundeten Punkten bestimmen Java Basics - Anfänger-Themen 9
B Kürzesten Weg zwischen mehreren Punkten finden (rekursiv) Java Basics - Anfänger-Themen 5
P Abstand zwischen zwei Punkten Java Basics - Anfänger-Themen 4
M spalten in punkten ausfüllen Java Basics - Anfänger-Themen 18
G Kommata in Punkten konvertieren Java Basics - Anfänger-Themen 5
C Koordinaten von Punkten übergeben und zeichnen lassen Java Basics - Anfänger-Themen 8
L Koordinate mit meisten Überlappungen in 3D-Raum finden Java Basics - Anfänger-Themen 9
G Interpolation von Werten im 3D-Raum Java Basics - Anfänger-Themen 3
P OOP Eingabevariablen der Klasse Raum in der Methode addEvent ans Ende einer ArrayList einfügen Java Basics - Anfänger-Themen 3
J Kollision eines Kreises mit einem 270° Winkel im 2D-Raum Java Basics - Anfänger-Themen 29
G Wo kann ich eine kostenlos Websever Raum finden? Java Basics - Anfänger-Themen 2
S kartesischer Vektor im n-dimensionalen Raum. Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben