Die Frage ist, wie aus den x- und y-Koordinaten der Endpunkte von einer Geraden die nodes-Positionen ausgerechnet werden können. Hier ein Beispiel für 2 nodes:
Ergänzend zur Antwort von @Henri ist hier mal noch eine Variante bei der unter Verwendung von foreach mehr als zwei Nodes auf der Gerade platziert werden.
Und noch eine weitere Variante mit der decorations.markings Bibliothek, bei der man auch die Anzahl der Nodes einfach variieren kann. Im Gegensatz zu meinem obigen Beispiel funktioniert das auch mit gebogenen Kurven.
Wenn es nur darum geht die Punkte zu referenzieren ohne unbedingt die Koordinaten zu kennen kann ich nur empfehlen die Nodes einfach auf der Linie zu platzieren und mittels pos=<Bruchteil> beim gewünschten Bruchteil der Gerade zu platzieren. Am Ende befindet sich ein Beispielschnipsel, der einen Pfeil zwischen den beiden Nodes zeichnet. Im Übrigen habe ich alle Pakete entfernt, die nicht benötigt werden (Minimalbeispiel) und habe amsmath durch seinen Nachfolger mathtools ersetzt.
Mit Hilfe der Bibliothek calc und der let Operation kann man den Abstand und die damit verbundenen Positionen auch von Hand berechnen. Hier ist ziemlich einfach, da der eine der beiden Punkte einfach (0,0) ist und man daher keinen Offset einführen muss. Die Ausgabe ist ähnlich wie oben nur, dass der Pfeil fehlt.
Die decorations.markings Bibliothek bietet die Option mark=at position <pos> with <code> wobei <pos> verschiedene Bedeutungen haben kann, z.B. eine explizite Länge mit Einheit oder auch wie im Beispiel unten ein Bruchteil der Länge des Pfades. Der Parameter <code> setzt wieder die Nodes. Bild analog zu oben.