簡體   English   中英

坐標簇與沿單位矢量i的點之間的最小距離

[英]Minimum distance between coordinate cluster and a point along unit vector i

我有一組3D坐標Q,這些坐標Q圍繞原點O,單位矢量i和長度d聚集到一個粗球形中。 令p = c * i,其中c是一個正實數。 令M表示p與Q中每個q之間的距離的集合。在M的最小閥大於d的約束下,我需要一種可靠的方法來計算c的最小值。 有沒有一種優雅的方法可以在python中使用scipy / numpy做到這一點? 我懷疑scipy.spatial.KDTree會很有用,但目前尚不清楚如何有效地找到我的約束最小值。

您可以解決以下問題:

對於Q中的一個點q,定義:

C(q) = set of values of c >= 0 s.t. |q - c*i| >= d

然后定義

C = intersection { q in Q } C(q)

然后期望值c為:

c = inf C = minimum element of C

集C(q)只是二次不等式的解決方案,因此將具有以下形式之一:

1) C(q) = [0, +infinity)
2) C(q) = [0, b] union [ e, +infinity )  (for some e > b)
3) C(q) = [e, +infinity )

您可以安全地丟棄第一種形式的集合。

如果所有其余的C(q)集都具有形式#2,則c = 0。

相反,如果它們都具有#3形式,則c為:

c = maximum { q in Q } e(q)

否則情況會變得更加復雜。

對於給定的q,要計算C(q),請注意:

|q - c*i| >= d
  <=> (q - c*i)^2 >= d*d
  <=> (q - c*i).(q - c*i) >= d*d
  <=> q.q + c*c - 2*c*(q.i) >= d*d
  <=> c*c - c*2*(q.i) + q.q - d*d >= 0

如果此二次方程的判別式<0,則C(q)= [0,+無限大]。

否則,讓b和e為根,b <= e,並檢查以下情況:

e < 0    -->  C(q) = [0, +infinity)
b < 0    -->  C(q) = [e, +infinity)
b >= 0   -->  C(q) = [0, b]  union [e, +infinity)

2-d中的示例演示了更復雜的情況:

Q = { q1, q2, q3, q4 }
  = { (1,0), (0,1), (4,4), (0,10) }
i = (1/sqrt 5, 2/sqrt 5)
d = 2

C(q1) = [ 2.236, +infinity )
C(q2) = [ 2.843, +infinity )
C(q3) = [ 0, 4.472 ] union [ 6.261, +infinity )
C(q4) = [ 0, +infinity )

C(q1),C(q2)和C(q3)的交點的最小元素為2.843。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM