作者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)
1F:推 LPH66:简短的回答: 1.2.请google 3.请看rd是什麽 4.2π是360度喔 08/18 02:32
2F:→ wa007123456:先谢谢楼上 可是..while条件是大於或小於Pi的值 08/18 02:33
3F:→ wa007123456:-Pi+2Pi=Pi(180度) 这样对吗@@? 08/18 02:34
4F:推 LPH66:你觉得让一个值一直加减到跑到[-180度,180度]之外好吗? 08/18 02:34
5F:→ LPH66:这会让 sin/cos 等式子的精确度下降 08/18 02:35
6F:→ LPH66:所以这里的用意其实是正规化(normalize) 08/18 02:35
7F:→ wa007123456:恩...谢谢你@@ 08/18 02:37
8F:→ wa007123456:那两个用wiki查可以吗? 08/18 02:37
10F:→ huadi73:角度 08/18 02:41
11F:→ wa007123456:谢谢huadi73 :D 08/18 02:42
12F:→ wa007123456:我看懂了...谢谢各位大大... 08/18 02:45
13F:→ wa007123456:还有抱歉...他传回来的是径度对吗@@ 08/18 02:49
14F:推 SDNiceBoat:是径度没错 08/18 08:43