作者wa007123456 (大笨羊)
看板GameDesign
標題[程式] 看不懂一段程式碼(漫遊) XNA
時間Wed Aug 18 02:13:37 2010
大家好@@
最近對寫程式不知道為什麼有莫名的熱情
所以在GameDesign版面上面Po了這麼多...
造成洗板 先在這裡跟大家道歉
只是有一段程式碼我看不懂
小弟我學的是C# 遊戲開發平台是XNA
不過小弟只是高一升高二的一位學生而已
數學的觀念不是很好 程式碼如下:
==============================================================================
if (len > Wander_Radius)
{
float Yaw2 = (float)Math.Atan2(vector_to_center.X,vector_to_center.Z);
float diff = Yaw2 - Yaw;
float r = 0.01f * MathHelper.Pi*len;
diff = MathHelper.Clamp(diff, -r, r);
Yaw = Yaw + diff;
}
else
{
Yaw += MathHelper.Lerp(-0.05f, 0.05f, (float)rd.NextDouble());
}
while (Yaw < -MathHelper.Pi) Yaw += MathHelper.TwoPi;
while (Yaw > MathHelper.Pi) Yaw -= MathHelper.TwoPi;
Vector3 step = new Vector3(0, 0, 0.01f);
Position += Vector3.Transform(step, Matrix.CreateRotationY(Yaw));
==============================================================================
希望大家看到變數名稱就知道他是做甚麼的@@
我想問的問題有:
1.Atan2()是甚麼?為什麼可以求出反轉需要的角度呢?Atan是反三角函數嗎@@?
離X軸和離Z軸的值不是向量嗎?我大概知道三角函數是邊與邊的關係!
而反三角函數好像是利用某個數值換回原來的角度!但是有兩個向量是
怎麼一回事?
2.Clamp()是做啥的?是把數字壓縮變小在某個範圍嗎?
3.Lerp()取兩數之間的推估值 但是 .NextDouble() 是跑出0.1~1.0之間的數字嗎?
4.後面兩個while 看到旋轉超過正負Pi值會加上或減上兩個Pi 那不是會突然旋轉
180度嗎?還是我會錯意了?
感謝各位大大的回答:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.228.238.218
※ 編輯: wa007123456 來自: 125.228.238.218 (08/18 02:20)
推 LPH66:簡短的回答: 1.2.請google 3.請看rd是什麼 4.2π是360度喔 08/18 02:32
→ wa007123456:先謝謝樓上 可是..while條件是大於或小於Pi的值 08/18 02:33
→ wa007123456:-Pi+2Pi=Pi(180度) 這樣對嗎@@? 08/18 02:34
推 LPH66:你覺得讓一個值一直加減到跑到[-180度,180度]之外好嗎? 08/18 02:34
→ LPH66:這會讓 sin/cos 等式子的精確度下降 08/18 02:35
→ LPH66:所以這裡的用意其實是正規化(normalize) 08/18 02:35
→ wa007123456:恩...謝謝你@@ 08/18 02:37
→ wa007123456:那兩個用wiki查可以嗎? 08/18 02:37
→ huadi73:角度 08/18 02:41
→ wa007123456:謝謝huadi73 :D 08/18 02:42
→ wa007123456:我看懂了...謝謝各位大大... 08/18 02:45
→ wa007123456:還有抱歉...他傳回來的是徑度對嗎@@ 08/18 02:49
推 SDNiceBoat:是徑度沒錯 08/18 08:43