Finden Sie den nächstgelegenen Konvergenzpunkt einer Gruppe von Vektoren
Posted: 02 Jan 2025, 01:11
Ich versuche den Punkt zu finden, der einer Gruppe von Vektoren am nächsten liegt.
Für den Kontext sind die Vektoren umgekehrte optische Pfade, die von demselben Punkt ausgesandt werden, nachdem sie eine Linse verlassen haben. Ihre Rückprojektionen konvergieren zwar aufgrund der sphärischen Aberration nicht in einem einzigen Punkt, sind aber einer Konvergenz in Richtung eines Punktes ziemlich nahe, wie in der Abbildung unten dargestellt.

(Zur einfacheren Simulation zeigt das positive Z nach unten)
Ich glaube das Wenn ich den nächstgelegenen Punkt finde, würde ich einen Punkt finden, der den kürzesten Abstand zu all diesen Linien hat. Und schrieb die Methode wie folgt:
Für die obige Abbildung und die visuelle Beurteilung hätte ich erwartet, dass der Punkt bei etwa [0, 0, 20] liegt
Dies ist jedoch nicht der Fall. Die Methode ergab ein Ergebnis von [ 0., 188.60107764, 241.13690715], was weit von dem erwarteten Konvergenzpunkt entfernt ist.
Ist mein Algorithmus fehlerhaft oder habe ich etwas übersehen? zur Umsetzung?
Anbei die Daten für die Vektoren:
Für den Kontext sind die Vektoren umgekehrte optische Pfade, die von demselben Punkt ausgesandt werden, nachdem sie eine Linse verlassen haben. Ihre Rückprojektionen konvergieren zwar aufgrund der sphärischen Aberration nicht in einem einzigen Punkt, sind aber einer Konvergenz in Richtung eines Punktes ziemlich nahe, wie in der Abbildung unten dargestellt.

(Zur einfacheren Simulation zeigt das positive Z nach unten)
Ich glaube das Wenn ich den nächstgelegenen Punkt finde, würde ich einen Punkt finden, der den kürzesten Abstand zu all diesen Linien hat. Und schrieb die Methode wie folgt:
Code: Select all
def FindConvergingPoint(position, direction):
A = np.eye(3) * len(direction) - np.dot(direction.T, direction)
b = np.sum(position - np.dot(direction, np.dot(direction.T, position)), axis=0)
return np.linalg.pinv(A).dot(b)
Dies ist jedoch nicht der Fall. Die Methode ergab ein Ergebnis von [ 0., 188.60107764, 241.13690715], was weit von dem erwarteten Konvergenzpunkt entfernt ist.
Ist mein Algorithmus fehlerhaft oder habe ich etwas übersehen? zur Umsetzung?
Anbei die Daten für die Vektoren:
Code: Select all
position = np.array([
[0, 0, 0],
[0, -1.62, 0.0314],
[0, -3.24, 0.1262],
[0, -4.88, 0.2859],
[0, -6.53, 0.5136],
[0, -8.21, 0.8135],
[0, -9.91, 1.1913],
[0, -11.64, 1.6551],
[0, -13.43, 2.2166],
[0, -15.28, 2.8944],
[0, -17.26, 3.7289]
])
direction = np.array([
[0, 0, 1],
[0, 0.0754, 0.9972],
[0, 0.1507, 0.9886],
[0, 0.2258, 0.9742],
[0, 0.3006, 0.9537],
[0, 0.3752, 0.9269],
[0, 0.4494, 0.8933],
[0, 0.5233, 0.8521],
[0, 0.5969, 0.8023],
[0, 0.6707, 0.7417],
[0, 0.7459, 0.6661]
])