|
|
对会一点数学的人应该很简单。我是在制作战棋游戏的人物攻击时遇到的这个问题,弓箭手射击的目标在自己周围的任何方向,然后我想确定它与目标之间的角度。虽然我的人物是3D的,但是这是个2D的问题。因为我有一个人物指向北方(上方)的方向,只要改变这个方向的偏航角,可以得到人物正确的方向。
所以这个问题是这样的,平面上有两个点,p0和p1,知道他们的x,y坐标,如何求出这两点间的直线和正北方(应该是Y轴)的夹角呢?这应该是一个很简单的问题吧?我的数学很差,希望各位帮忙解决一下,谢谢。
void AlphaObject::SetDirection(int x, int y)
{
D3DXVECTOR3 look, up, right; // 物体的方向
// 正北方
look = D3DXVECTOR3(0.0f,0.0f,1.0f);
up = D3DXVECTOR3(0.0f,1.0f,0.0f);
right = D3DXVECTOR3(1.0f,0.0f,0.0f);
// 请问在这里怎么求出自身坐标与目标坐标的弧度。
float redain;
D3DXMATRIX mat_yaw;
// 围绕up向量旋转look和right向量(改变偏航角)
D3DXMatrixRotationAxis(&mat_yaw, &up, redian);
D3DXVec3TransformCoord(&look, &look, &mat_yaw);
D3DXVec3TransformCoord(&right, &right, &mat_yaw);
// 设置变换矩阵
D3DXMatrixIdentity(&mat_trans);
mat_trans._11 = right.x;
mat_trans._12 = right.y;
mat_trans._13 = right.z;
mat_trans._21 = up.x;
mat_trans._22 = up.y;
mat_trans._23 = up.z;
mat_trans._31 = look.x;
mat_trans._32 = look.y;
mat_trans._33 = look.z;
} |
|