Feedback

C++ - Abstand zweier Punkte

Veröffentlicht von am 15.11.2006
(1 Bewertungen)
Längenberechnung von zwei Punkten
#include <iostream>
#include <math.h>
using namespace std;


float laenge(int x1, int y1, int x2, int y2) {
	int distx;
	int disty;
	if (x1>=x2)  distx= x1-x2;
	else  distx= x2-x1;
	if (y1>=y2)  disty= y1-y2;
	else  disty= y2-y1;
	return (sqrt((float) (distx*distx)+(float) (disty*disty)));
}


float test_laenge ( int x1, int y1, int x2, int y2) {
	cout << "X_1 = " << x1 << "   Y_1 = " << y1 << "\n";
	cout << "X_2 = " << x2 << "   Y_2 = " << y2 << "\n";
	cout << "Laenge: " << laenge(x1,y1,x2,y2) << "\n\n";
	return 0;
}


int main () {
	test_laenge (0,0,12,5);
	test_laenge (-12,-2,-1,0);
	test_laenge (-4,3,8,8);
	test_laenge (8,11,-7,-10);
	test_laenge (8,11,8,11);
	return 0;
}

Abgelegt unter Abstand, Punkte.

3 Kommentare zum Snippet

Juergen Geiss schrieb am 01.06.2008:
Das obere scheibt mir Mathematisch sehr unlogisch:
1. Könnte man den Betrag der Differenz nehmen, dann bräuchte man keine if then else Abfrage.
2. Wenn man später quadriert ist es doch egal, ob das Vorzeichen pos. oder neg. war.

Also könne man das ganze vereinfachen:
float laenge(int x1, int y1, int x2, int y2) {
int distx;
int disty;

distx= x2-x1;
disty= y2-y1;

return (sqrt((float) (distx*distx)+(float) (disty*disty)));
}
ActionLuzifer schrieb am 25.05.2009:
Das erscheint vielleicht mathematisch etwas unlogisch, hat aber durchaus seine Berechtigung.
Wenn man sich näher mit der Numerischen Mathematik (Mathematik auf/mit dem Rechner) befasst, dann merkt man schnell, dass man nicht einfach so drauflosrechnen kann wie man es von der Schule aus kennt.

Es treten bei so gut wie jeder Rechnung kleinste "Fehler" auf die sich gegenseitig beeinflussen können und dann das Ergebnis völlig nutzlos oder manche Algorithmen sind einfach schneller als andere, obwohl sie beide mathematisch das gleiche bewirken.

Selbst in dieser Variante sind die Ergebnisse schon nicht wirklich korrekt.
Bsp: P1=(6,5/1) P2=(1/4) und P3=(4,5/2,5)
echte Laengen:
P1-P2 = 6,2650
P1-P3 = 2,5
P2-P3 = 3,8079

Lösungen des Algorithmus:
P1-P2: 5.83095
P1-P3: 2.23607
P2-P3: 3.60555
Max Mayerhofer schrieb am 12.03.2010:
garnicht kommentiert : (
Ich hab noch ein gepost
 

Logge dich ein, um hier zu kommentieren!