Distanz zwischen zwei Koordinaten berechnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
julianibus
User
Beiträge: 16
Registriert: Montag 21. Juni 2010, 13:04
Wohnort: Aschaffenburg
Kontaktdaten:

Hi,
ich bin neu hier und habe ein Problem:
für ein Spiel muss ich die Distanz zwischen zwei xy-Koordinaten ausrechnen.
Das hab ich erstmal über die Hypothenuse versucht, was irgendwie nich richtig funktioniert.
Gibt es eine andere Möglichkeit dies zu lösen?
Wichtig ist, das am Ende ein positiver Wert rauskommt, den ich weiterverwenden kann.

lg
julianibus
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

julianibus hat geschrieben: Das hab ich erstmal über die Hypothenuse versucht, was irgendwie nich richtig funktioniert.
Schreib doch mal auf, was da nicht funktioniert hat.
julianibus
User
Beiträge: 16
Registriert: Montag 21. Juni 2010, 13:04
Wohnort: Aschaffenburg
Kontaktdaten:

Das ganze hat mit einer Kreiskollisionserkennung zu tun.

Code: Alles auswählen

	def iscollision(self, x1, y1, x2, y2):
		xdis = x1 - x2
		ydis = y1 - y2
		realdis = math.hypot(xdis, ydis)
		
		if (realdis >= self.dis):
			return False
		elif (realdis < self.dis):
			return True
self.dis ist die Distanz, ab der es keine Kollision mehr ist.

Mit den Differenzen der x und y Koordinaten berechne ich die Hypothenuse und sollte so eig den Abtsand erhalten.
Ich denke mal das da ein Denkfehler drin ist, auf den ich nicht komme.
Zuletzt geändert von julianibus am Montag 21. Juni 2010, 14:05, insgesamt 1-mal geändert.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

ydis ist wohl nicht richtig. Mal genau hingucken!
julianibus
User
Beiträge: 16
Registriert: Montag 21. Juni 2010, 13:04
Wohnort: Aschaffenburg
Kontaktdaten:

ok, ich hab den code mindestens 20 mal durchgelesen und hab es nich bemerkt...
man komm ich mir jetz blöd vor. :mrgreen:
Aber es macht immer noch nicht das was ich will :(
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

An Stelle der letzten 4 Zeilen würde man schreiben:

Code: Alles auswählen

return realdis < self.dis
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

ydis = y1 - x2

...und nochmal genau hingucken. Manchmal sieht man ja den Wald vor lauter Bäumen nicht.
julianibus
User
Beiträge: 16
Registriert: Montag 21. Juni 2010, 13:04
Wohnort: Aschaffenburg
Kontaktdaten:

hendrikS hat geschrieben:ydis = y1 - x2

...und nochmal genau hingucken. Manchmal sieht man ja den Wald vor lauter Bäumen nicht.
ja das hab ich schon abgeändert gehabt.
Mein jetziger Code:

Code: Alles auswählen

	def iscollision(self, x1, y1, x2, y2):
		xdis = x1 - x2
		ydis = y1 - y2
		realdis = math.hypot(xdis, ydis)

		return realdis < self.dis
funktioniert aber nicht. Es gibt keine Fehlermeldungen.
Gibtes vllt eine andere Möglichkeit die Distanz zwischen zwei Punkten zu ermitteln?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dann dürfte der Fehler außerhalb liegen. Was für eine "Fehlermeldung" soll denn kommen?
Den Funktionsrumpf kannst du übrigens auf 1 Zeile reduzieren:

Code: Alles auswählen

def iscollision(self, x1, y1, x2, y2):
    return math.hypot(x1-x2,y1-y2) < self.dis
julianibus
User
Beiträge: 16
Registriert: Montag 21. Juni 2010, 13:04
Wohnort: Aschaffenburg
Kontaktdaten:

ok, ich hab das problem gefunden, was wie schon vermutet außerhalb liegt.
Danke fürs Helfen! :mrgreen:
nono191
User
Beiträge: 38
Registriert: Dienstag 6. Oktober 2015, 13:01

Ich weiss nicht ob es noch relevant ist aber das könnte man mit

Code: Alles auswählen

numpy.linalg.norm()
lösen.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

8 Jahre später? Ich glaube kaum :wink:
Antworten