假設我們在二維空間有兩個點。A(藍色方形的中心)和B(橙色方形的中心)。 我們還得到了幾條固定大小的線以及一條具有最小長度的無限線(像一條射線)。 此外,我們還有一個A的起始角α。
現在,我們如何連續安排從A開始的固定長度的線,然后是無限線,以使第一條線的角度是α,并且無限線正好穿過B? 此外還有一個限制條件:
- 兩條線之間的角度應該是相同的(這意味著許多星座的值使解決方案不可能,但只考慮有可能解決方案的星座)
結果可以是這樣的(在這個例子中,所有的線段都是等長的)。想象一下,從最后一個線段(代表最小長度的射線)延伸出來的線段擊中了B。
現在我找到了一個程式性的解決方案,從A開始,各段之間的角度為180°,并檢查最后一段的射線是否擊中B。根據這條射線的哪一邊,B位于哪一邊,它從A重新開始,角度減少或增加,直到超過目標。然后,它將步長減半并以相反的方向繼續,直到下一次過沖。最終,當步長下降到閾值以下時,這個程序就結束了。
這張圖片顯示了尋找半精確角度的所有嘗試。
。
黃色的線段是有限長度的線段,其他顏色的線段是無限長度的線段(其中藍色是解決方案)。
不幸的是,當需要高精確度時,這很快就會變得計算量很大。
這一定有一個數學方法來解決這個問題,或者沒有?
我已經意識到這一問題的重要性。
我已經意識到,這條弧線顯然是一個圓的一段,而且該圓的原點必須是在與A成α /-90°角的直線上的某處(因此,起始線是圓的切線,并且正好有α角)。 現在的問題是,如何計算這個圓的半徑,以使沿圓周上的各點所取的線段正好具有所需的長度?
希望有人能有個主意。 非常感謝!
如果有人感興趣的話,可以了解一下背景。這是為物理模擬中的一種特殊型別的 "關節 "準備的,例如,用于使網格影片物件具有靈活性和真實的可彎曲性,但不是可拉伸的。想象一下,比如說人類的脊柱。
這就是為什么段有一個強制的、固定的長度,并且在實踐中,B被強制放在射線段的最小長度的末端,然而物理影響可能會將它稍稍拉開,因此它必須被持續糾正。 這種解決方案將產生更好的結果,而不是分段之間的單獨連接,后者可能以丑陋的方式呈 "之 "字形崩潰。 如果精度足夠高的話,程式性計算方案看起來已經很有希望了,但它的性能并不像人們所期望的那樣,可以通過實時模擬來實作......
。
uj5u.com熱心網友回復:
如果我對這個問題的理解是正確的,解決方案似乎是可以在一個時間內計算出來的,而不需要像你所實作的那樣進行迭代逼近。
<uj5u.com熱心網友回復:
所以你正在尋找與兩個端點相交的圓,并確定切線。因此,簡單的2個軸之間的O(1)交點就可以了:
我們的目標是,在我們的作業中,我們要把我們的作業做得更好。
從每個端點垂直于切線的方向投射射線/軸
<因此,在2D中,要么使用引數圓方程,以引數作為切線
/- 90度,或者如果你有方向矢量,交換x,y并否定其中之一
找到射線/軸的交點(圓心(x0,y0) )
只要谷歌一下這個方程,或者自己從這里提取一下:
計算每個端點的起始端角度
a = atan2(ay-y0,ax-x0); b = atan2(by-y0,bx-x0)。計算缺失的點
c = a (b-a)*(i/(n-1)) x(i) = x0 r*cos(c) y(i) = y0 r*sin(c) i = 0,1,2,3,...,n-1注意
a,b可能需要進行小的調整,以便覆寫圓的正確部分(匹配切線并避免跨越0/360度)。通常的補救措施是交換a,b,或在其中一個上增加/減少360度。基于切線的纏繞和a<b的結果...
uj5u.com熱心網友回復:
無論是通過幾何方法還是通過分析方法,都有可能稍微簡化要在迭代中解決的方程。 然而,可能無法避免以任何方式求助于數值計算。
最初的問題
。根據我的理解,原始問題總結如下:
分析性解決方案
雖然有一個geometry標簽,但我想在下面展示我的analytical方法。
注意:tan^(-1)[y, x] = atan2(y, x)
雖然我們可以消除方程(2)中昂貴的求和,但是最后的方程(3)不能用分析法解決。因此,我們仍然需要使用剖析法或適當范圍內的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319990.html
標籤:
上一篇:嘗試得到一個具有不同X軸的多圖












