Distanzen zwischen Punkten

 

Diese Gruppe von Aufgaben behandelt die Berechnung von Distanzen zwischen Punkten in einem n-dimensionalen Koordinatensystem. In einem zweidimensionalen Koordinatensystem kann man den Satz des Pythagoras benutzen, um die Entfernung zwischen zwei Punkten zu berechnen. Bei mehr als zwei Dimensionen  wird meist die euklidische Distanz verwendet, welche eine Verallgemeinerung des Satzes von Pythagoras ist.

 

 

Um die euklidische Distanz zwischen zwei Punkten in einem n-dimensionalen Koordinatensystem zu errechnen, ermittelt man zunächst die Differenzen ihrer Werte bei den einzelnen Koordinaten. Diese Differenzen werden dann quadriert, damit alle negativen Vorzeichen verschwinden. Die Quadrate werden anschließend summiert. Zum Schluss wird aus der Summe die Quadratwurzel gezogen.

 

 

 

Aufgabe 1: die euklidische Distanz zwischen zwei Punkten

 

Die Funktion soll die Kopfzeile

 

Public  Function  euDist (ByRef p1() as Double, ByRef p2() as Double) as Double

 

haben. Da sie zwei Array-Parameter hat, ist sie nicht als UDF zugelassen. Sie müssen daher eine kleine Prozedur schreiben, um sie zu testen.

 

 

 

 

Aufgabe 2: Funktion, welche eine Distanzmatrix liefert

 

Angenommen, in ein n-dimensionales Koordinatensystem sind m Punkte eingezeichnet. Wir können die Koordinatenwerte dieser  Punkte tabellarisch darstellen. Das folgende Bild zeigt eine solche Tabelle für n = 4 und m= 5.

 

 

Wir wollen weiterhin annehmen, dass wir die euklidischen Distanzen zwischen allen Punkten wissen möchten. Man könnte diese Information übersichtlich in einer Matrix der folgenden Art zusammenfassen:

 

 

In der ersten Spalte und in der ersten Zeile sind die Nummern (ID) der Punkte eingetragen. Im Inneren der Matrix befinden sich die euklidischen Distanzen. Die Distanz zwischen dem Punkt i und dem Punkt j befindet sich zweimal in der Matrix: am Schnittpunkt zwischen der mit i beschrifteten Zeile und der mit j beschrifteten Spalte und am Schnittpunkt zwischen der mit j beschrifteten Zeile und der mit i beschrifteten Spalte.

 

Schreiben Sie eine Funktion, welche diese Matrix  ohne die Beschriftungen liefert, also nur den inneren Teil mit den Distanzen. Die Kopfzeile der Funktion soll lauten

 

Public Function euDistMatr (ByRef p() as Double) as Double()

 

Das Parameter-Array p entspricht dem inneren Teil der obigen Wertetabelle, ohne die erste Spalte und die Überschrift. Die erste Spalte mit den Punktenummern ist offensichtlich nicht nötig, wenn wir davon ausgehen, dass die Punkte von 1 bis m durchnummeriert und in p in dieser Reihenfolge enthalten sind.

 

Wenden Sie beim Programmieren das Prinzip der Delegation an, indem Sie aus der Funktion heraus die bereits fertiggestellte Funktion euDist aufrufen.

 

Weil auch diese Funktion keine UDF ist, müssen Sie mit Hilfe einer kleinen Prozedur testen.

 

 

 

 

Aufgabe 3: eine benutzerdefinierte Funktion (UDF) für die Distanzmatrix

 

Schreiben Sie nun eine benutzerdefinierte Funktion für die Aufgabenstellung aus Aufgabe 2, also eine Funktion, die aus einem Arbeitsblatt heraus mit dem Funktionsassistenten benutzt werden kann. Verwenden Sie hierfür folgende Kopfzeile

 

Public Function euDistMatrUDF(ByVal rng as Range) As Double()

 

Wenn Sie die Einwickeltechnik (s. Skript) anwenden, haben Sie diese Funktion schnell geschrieben.