2010-11-27 108 views
0

可以說我有一個3D笛卡爾網格讓我們也假設有從原點在水平面上發出的一個或多個日誌螺旋數螺旋 - 被點上螺旋(笛卡爾座標

如果我再有。我想測試一個點,如果這個點是在一個螺旋線上,我很想測試它是否在一定範圍內的螺旋線上,但是確定它是否在這個點上是一個好的開始。所以我想這個問題有幾個部分。

  1. 如何從參數武器(方向,密封性)

  2. 如何判斷是否在網格中的一個點是在旋臂

任何想法的呢?我一整天都在用Google,並且覺得我比起初開始時更接近解決方案。

這裏有更多的信息,可以幫助:

我實際上並不需要渲染的螺旋。我想設置音高和旋轉角度,然後將一個點傳遞給一個方法,該方法可以告訴我我傳遞的點是否在螺旋線內(螺旋線上任意點的給定範圍內)。根據返回的值(true或false),我的程序將決定是否在太空中存在某物。

  1. 如果一個點(x,Y,Z)被withing在螺旋的任何點的給定範圍如何以參數定義日誌螺旋(俯仰和轉動和??)

  2. 測試。

注:上述兩種將只是在水平面上

+0

這是用圖形完成的,所以有人可以點擊一個3D圖像,你想看看它是否落在螺旋?或者,你只是有點矩陣和有人給你座標?基本上,你如何顯示它以及某人如何給出座標? – 2010-11-27 00:46:55

+0

最終它將是圖形化的,但現在我有一個方法,想要確定是否存在某個點在笛卡爾網格中。該點是否位於水平面上的一個對數螺旋上或附近是該決定的一部分。我希望這是有道理的。 – pglaspey 2010-11-27 01:32:16

+0

謝謝。我會記住這些事情。欣賞幫助 – pglaspey 2010-11-27 06:23:54

回答

0

不知道這是你想要的,但你可以扭轉日誌功能(或「任何」其他爲此事)。 假設你有A = B,爲了從B得到A,你做e^B = A。

所以你明白了你的觀點並將它作爲B傳遞給你,那麼你將得到A.然後你只需要檢查是否A(具有一定的+範圍)在你首先傳遞給ln的值中以產生螺旋。

我認爲這可能工作...

1

這些是兩個函數限定逆時針螺旋:

PolarPlot[{ 

    Exp[(t + 10)/100], 
    Exp[t/100]}, 

{t, 0, 100 Pi}] 

輸出:

alt text

這些是限定順時針螺旋形兩種功能:

PolarPlot[{ 

- Exp[(t + 10)/100], 
- Exp[t/100]}, 

{t, 0, 100 Pi}] 

輸出:

alt text

笛卡爾座標

轉換笛卡爾< - >極地是

(1) Ro = Sqrt[x^2+y^2] 
     t = ArcTan[y/x] 

    (2) x = Ro Cos[t] 
     y = Ro Sin[t] 

所以,如果你在笛卡爾COORDS(X,Y)的點,你把它轉換爲使用(1)的等價極座標。然後,你使用螺旋函數的原型(任何四個mentinoned在地塊上面,或類似的)在那裏把t的值,並獲得Ro。最後一步是將這個Ro與我們從座標收斂中得到的一個進行比較。如果他們是平等的,這一點就是螺旋式的。

編輯回答您的評論

對於數螺旋線幾乎是相同的,但有多個螺旋你需要採取的日誌不會爲負值的照顧。這就是爲什麼我用指數...

例子:

PolarPlot[{ 

    Log[t], 
    If[t > 3, Log[ t - 2], 0], 
    If[t > 5, Log[ t - 4], 0] 

}, {t, 1, 10}] 

輸出:

alt text

0

不幸的是,你將需要反正知道一些數學符號 - 這是關於一個良好的閱讀對數螺線。

http://en.wikipedia.org/wiki/Logarithmic_spiral

,我們只需要前4方程。

對於您的問題1 - 爲了控制氣密性,您可以像維基頁面一樣調整參數'a'。 - 控制方向,你抵消了一定的金額。

對於你的問題2

在浮點運算,你將永遠不會得到絕對的精確度,這意味着不會有一點正好落在sprial。然而,在屏幕上,您將知道渲染哪個像素,並且您可以測試是否正在渲染渲染的點。

要渲染曲線,通常會將其渲染爲一系列線段,足夠短以使其整體看起來像曲線。如果您想知道點是否位於螺旋線的某個距離內,則可以使用較粗的線渲染曲線(如果需要,可在屏幕外緩衝區中)。

0

這裏一個C++代碼繪製傳遞任何螺旋其中這裏鼠標 (爲我的英語對不起)

int cx = pWin->vue.right/2; 
int cy = pWin->vue.bottom/2; 


double theta_mouse = atan2((double)(pWin->y_mouse - cy),(double)(pWin->x_mouse - cx)); 
double square_d_mouse = (double)(pWin->y_mouse - cy)*(double)(pWin->y_mouse - cy)+ 
         (double)(pWin->x_mouse - cx)*(double)(pWin->x_mouse - cx); 
double d_mouse = sqrt(square_d_mouse); 
double theta_t = log(d_mouse/3.0)/log(1.19); 
int x = cx + (3 * cos(theta_mouse)); 
int y = cy + (3 * sin(theta_mouse)); 

MoveToEx(hdc,x,y,NULL); 
for(double theta=0.0;theta < PI2*5.0;theta+=0.1) 
{ 
    double d = pow(1.19 , theta) * 3.0; 

    x = cx + (d * cos(theta-theta_t+theta_mouse)); 
    y = cy + (d * sin(theta-theta_t+theta_mouse)); 

    LineTo(hdc,x,y); 
} 

OK現在螺旋的參數是1.19(斜率)和3.0(在中心半徑) 剛比較其中θ是2的多發PI = PI2 = 6,283185307179586476925286766559 的點,如果任何點就像是

x = cx + (d * cos(theta)); 
y = cy + (d * sin(theta)); 

那麼你的鼠標是在螺旋非旋轉的螺旋靠近......我搜索ŧ他今晚和我GOOGLE了你的過去的問題