2016-12-01 21 views
1

Ich möchte den Abstand zwischen einem Bogen und einem Punkt in einem 3D-Raum berechnen. Ich fand alles ist der Abstand zwischen einem Kreis und einem Punkt link (die entweder falsch ist oder wo ich einen Fehler gemacht, als ich falsche Werte erhalten):Abstand zwischen Punkt und Bogen in 3D

P = np.array([1,0,1]) 
center = np.array([0,0,0]) 
radius = 1 
n2 = np.array([0,0,1]) 

Delta = P-center 
dist_tmp = np.sqrt((n2*Delta)**2 + (np.abs(np.cross(n2, Delta))-radius)**2) 
dist = np.linalg.norm(dist_tmp) 

Ich habe einen Kreis in der xy-Ebene mit Ursprung bei xyz = 0 und Radius = 1. Der Punkt von Interesse ist in der Entfernung 1 über dem Kreis. Das Ergebnis der Entfernung vom Code ist 1.73 .. und nicht 1.

  1. Was ist die richtige Gleichung für Punkt-Kreis-Abstand?
  2. Wie kann ich es auf Punkt-Bogen-Abstand erweitern?
+0

Woher wissen Sie, dass Sie "falsche Werte bekommen"? I.e. Bitte teilen Sie uns die von Ihnen verwendeten Daten, das Ergebnis und das von Ihnen erwartete Ergebnis mit. Siehe [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). Vergessen Sie nicht, uns die Datentypen 'P' und' center' und 'radius' mitzuteilen. –

+0

Sorry, mein Schlechter. Das Beispiel/test-input sieht wie folgt aus. Ich habe einen Kreis in der x-y-Ebene mit Ursprung bei x-y-z = 0 und Radius = 1. Der Punkt von Interesse ist im Abstand 1 über dem Kreis. __ import numpy als np __ P = np.array ([1,0,1]) __ center = np.array ([0,0,0]) __ radius = 1 __ n2 = np. Array ([0,0,1]) __ Von dem ich eine Entfernung vom Kreis von 1 erwarten würde - die Ergebnisse sind 1,73. – user56574

+0

Danke für die zusätzlichen Informationen für Ihre erste Frage. Ich habe darauf eine Antwort gegeben. Für Ihre zweite Frage, wie ist der Lichtbogen definiert? Natürlich ist es ein Teil des Kreises, aber wie sagt man welchen Teil? –

Antwort

2

Sie haben mehrere Fehler in Ihrem Code. Hier ist die Antwort auf Ihre erste Frage.

Zuerst versuchen Sie, das Skalarprodukt n2 und Delta als n2*Delta zu implementieren, aber das ist nicht, was die Multiplikation von 2 NP-Arrays tut. Verwenden Sie stattdessen np.dot(). Als nächstes versuchen Sie, den "absoluten Wert" (Betrag) eines Vektors mit np.abs zu nehmen, aber dieser letztere ist nur für reelle und komplexe Zahlen. Eine Möglichkeit, die Vektorgröße zu erhalten, ist np.linalg.norm(). Wenn Sie diese ändern, erhalten Sie die richtige Antwort, und Sie benötigen nicht die Berechnung, die Sie für die Variable dist verwendet haben. So verwenden

Delta = P-center 
dist = np.sqrt(np.dot(n2, Delta)**2 + (np.linalg.norm(np.cross(n2, Delta))- radius)**2) 

Das ist für dist die richtige Antwort gibt, 1.0.

+0

Vielen Dank, es funktioniert wirklich sehr gut. – user56574

Verwandte Themen