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.