2011/11/05

1. 转换c#的例子中,发现对vector.dot直接用了ArcCos,如float angle = (float)Math.Acos(Vector3.Dot(toMoveTarget, tank.Direction))

    为什么没用到两个的模?

    答:因为内部把两个向量Normal化了。

2. 发现使用

if (tank.rotationDirection == RotationDirection.Unknown)
   {
    Vector3 cr = Vector3.Cross(toMoveTarget, direction);
    if (cr.Y < 0)
     tank.rotationDirection = RotationDirection.Left;
    else
     tank.rotationDirection = RotationDirection.Right;
   }

   

     来判断坦克左转或者右转。原理是什么?

    答:原来学习时,只知道叉积可以获得同时垂直两个向量的向量。google后才知道。它能帮助判断两个向量的顺逆时针关系。

           可是貌似只用于2-D几何解释,上面的代码就是把Y设为0,这样最后结果就是在X与Z组成的平面上2个向量之间,

           即坦克位置与目标之间形成的向量toMoveTarget, 与坦克朝向向量direction之间是什么顺逆时针关系。

           

           读了英文WiKi后,才发现中文的转载有个小问题!

           而且,什么是伪向量?

    参考:

          http://blog.csdn.net/lichunguang1542/article/details/4618987 

         (经过对比英文原版,

         发现中文对叉积几何解释错误了:

         “则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积”

          WiKi: “The magnitude of the cross product can be interpreted as the positive area of theparallelogram havinga andb as sides ”

          对比之下大家明白了没?是叉积的模代表平行四边形的带符号面积,而不是叉积本身

          http://blog.csdn.net/csmqq/article/details/654787  (问题同上。而且3维向量情况下,我们判断2个向量的顺逆时针关系怎么判断??难道也是把某个坐标设为0??)

          http://en.wikipedia.org/wiki/Cross_product (叉积英文解释,中文的缺了一大堆)

          可惜中文的都是针对2维的,3维的要看英文。 

          http://www.topcoder.com/tc?d1=tutorials&d2=geometry1&module=Static (特别提到叉积判断顺逆时针是2-D情况)

猜你喜欢

转载自blog.csdn.net/Marcus2006/article/details/6939283