2013-10-15 17 views
0

我在學習Unity3d +一些基本的數學知識,我忘記了通過搞亂。
我現在正在做什麼的繼承人..數學編程。在拋物線上獲取角度

正如你可能會說這種形狀的兩側形成拋物線。 它們是從中心向外的距離爲基圓半徑+(該圖像中0.05)的平方的高度*由恆定

的代碼生成,這是非常簡單..

for (int changer = 1; changer > -2; changer-=2) { 

     Vector3 newPos = new Vector3(
      transform.position.x 
      ,transform.position.y + currentheight*changer 
      ,transform.position.z - RadiusAtZero -(Mathf.Pow(currentheight,2)*CurveMultiplier) 
      ); 

     var newFleck = Instantiate(Fleck, newPos, Quaternion.identity)as GameObject; 
     newFleck.transform.RotateAround(transform.position,Vector3.up,angle*changer); 

     FleckList.Add(newFleck); 

     } 

順便說一句的用於循環和'換器'反映了一切,所以「當前高度」實際上就是距離拋物線中心線的距離。

無論如何,我想使立方體(或稱爲它們的斑點)成角度,以便它們與我製作的拋物線相吻合。
我需要確定在特定點上拋物線切線的角度。
我發現this

找到切線Y = X^2 -3在(1,-2),我們可以同時解決 Y = X^2 -3和y + 2 = M( x-1)並設置判別等於零

但我不知道如何實現這一點。另外我認爲我的'CurveMultiplier'常數使得我的拋物線方程與那個不同。
有人可以寫一些代碼來確定角度嗎? (也可以解釋一下)

更新。 這裏是固定版本使用方程的導數。 (另外我已經從盒子變成四面體和其他一些表面的東西) enter image description here

+1

該鏈接指向一種找到切線而不使用微積分的方法。但在這種情況下,爲什麼不使用拋物線函數的導數呢?導數'y'= 2 * x'給出了'x'處的斜率。 – lurker

+0

Aaaahh什麼是衍生物!!? SOZ。你能解釋一下嗎?最後的撇號是什麼? –

+2

對不起,我不確定你是否熟悉微積分。導數是給定點上函數的無窮小變化率。這與當時函數的斜率是一樣的。 「撇號」是表示「y = f(x)」(寫爲「y''或」f'(x)「或」dy/dx「等)的函數的導數的一種表示法。給定'x'或'f'(x)'處的'y''的值是該點處'f(x)'的斜率。 – lurker

回答

2

最簡單的解決方案是使用拋物線方程的導數。

在你的圖片中,我假設Y是垂直的,X水平的,Z是進出屏幕。然後,拋物線旋轉時,基於你的描述,是:

f(h) = 0.05*h^2 + R 

h是高度,R是基圓半徑)。如果想象一個包含Y軸的平面,則可以以任意角度圍繞Y軸旋轉平面,並且雙拋物線看起來相同。

形式爲f(x) = C*h^2 + R的拋物線方程的導數爲f'(x) = 2*C*h,它是h處切線的斜率。在這種具體情況下,這將是:

f'(h) = 0.1*h 

由於橫截面平面具有角度相對於X軸和Z軸的,則該切線也將具有相同的角成分(你有一個旋轉的拋物線)。

根據爲f(h)中的常數給出的單位,特別是0.05的值,您可能需要調整此值以獲得正確的結果。

+0

行!我實際上被這個混淆了的年齡!我認爲你的解決方案會給我切線的*角*(如弧度),但它實際上給了我*斜率*(比例)哦! –

+0

其實這看起來不錯。我得到的價值 –

+0

實際上,這也不工作。我得到的h *常數* 2的數值從拋物線中心的1.2開始,在你出去時增加到12。 –