點乘判斷角度
叉乘獲得方向
[ContextMenu("Test")]
public void Test()
{
//---點乘臼婆。判斷角度------------------------------------
Debug.Log("點乘");
Debug.Log(Vector3.Dot(_A.right, (_B.position - _A.position)));//正缸沃,在前恰起,負,在后
Debug.Log(Vector3.Angle(_A.right, (_B.position - _A.position)));//角度
Debug.Log(Mathf.Acos(Vector3.Dot(_A.right.normalized, (_B.position - _A.position).normalized)) * Mathf.Rad2Deg);//角度
//----叉乘趾牧。判斷方向----------------------
//叉乘:兩個向量相乘 检盼,得到一個新的向量,新向量垂直于之外的兩個向量
Debug.Log("叉乘");
Debug.Log(Vector3.Cross(_A.right, (_B.position - _A.position)));
//角度
Debug.Log( Vector3.Cross(_A.right, (_B.position.normalized - _A.position).normalized));
Debug.Log(Vector3.Distance(Vector3.zero, Vector3.Cross(_A.right, (_B.position.normalized - _A.position).normalized)));
Debug.Log(Mathf.Asin( Vector3.Distance(Vector3.zero, Vector3.Cross(_A.right, (_B.position.normalized - _A.position).normalized))));
Debug.Log((Mathf.Asin(Vector3.Distance(Vector3.zero, Vector3.Cross(_A.right, (_B.position.normalized - _A.position).normalized))))*Mathf.Rad2Deg);
//方向
if(Vector3.Cross(_A.right, (_B.position - _A.position)).y > 0)
{
//順時針
}
if (Vector3.Cross(_A.right, (_B.position - _A.position)).y == 0)
{
//正方向平行
}
if (Vector3.Cross(_A.right, (_B.position - _A.position)).y < 0)
{
//逆時針
}
//角度
Vector3 c = Vector3.Cross(_A.right, (_B.position - _A.position));
float angle = Vector3.Angle(_A.right, (_B.position - _A.position));
//b-a的夾角
float basign = Mathf.Sign(Vector3.Dot(c.normalized,Vector3.Cross(_A.right.normalized, (_B.position - _A.position).normalized)));
Debug.Log("b--a"+ basign * angle);
float absign = Mathf.Sign(Vector3.Dot(c.normalized, Vector3.Cross(_A.right.normalized, (_A.position - _B.position).normalized)));
Debug.Log("a--b" + absign * angle);
}