Unity3d:两点之间的角度不一致
Unity3d: Angle between two points not consistent
所以,我有两个游戏对象P1
和P2
,这两个游戏对象分别与我左腿和右腿上的跟踪器相关联。
所以,我需要找到它们之间的角度。
所以,这就是我的 P1
和 P2
如果我面向前方并将右腿放在前面时的样子。
private double calculateAngle(double P1X, double P1Y, double P2X, double P2Y,
double P3X, double P3Y)
{
double numerator = P2Y * (P1X - P3X) + P1Y * (P3X - P2X) + P3Y * (P2X - P1X);
double denominator = (P2X - P1X) * (P1X - P3X) + (P2Y - P1Y) * (P1Y - P3Y);
double ratio = numerator / denominator;
double angleRad = Math.Atan(ratio);
double angleDeg = (angleRad * 180) / Math.PI;
if (angleDeg < 0)
{
angleDeg = 180 + angleDeg;
}
return angleDeg;
}
calculateAngle(LeftLegController.position.x, LeftLegController.position.z,
RightLegController.position.x, RightLegController.position.z,
LeftLegController.position.x, RightLegController.position.z))
因此,它应该始终是直角三角形。
所以,这是我用来计算 P1
和 P2
、
之间角度的代码
当我面向前方时,我的两个游戏对象之间的角度不同,当我面向左侧并将右腿向前移动时(看起来像这样)
我的 Angle 1
和 Angle 2
完全不同。那么,找到角度的更好方法是什么(忽略 y 轴,就好像这些点投影在地面上一样)
记住两个向量A和B的点积是|A| |乙|余弦θ。所以用你的点积,除以每个向量的大小,然后用反余弦得到你的角度。 (事实上 ,您可能无论如何都想要cos!)
我相信您正在寻找的方法是 Vector3.SignedAngle()
。
var A = Vector3.ProjectOnPlane(P3.position - P1.position, Vector3.up);
var B = Vector3.ProjectOnPlane(P2.position - P1.position, Vector3.up);
print(Vector3.SignedAngle(A, B, Vector3.up));
所以,我有两个游戏对象P1
和P2
,这两个游戏对象分别与我左腿和右腿上的跟踪器相关联。
所以,我需要找到它们之间的角度。
所以,这就是我的 P1
和 P2
如果我面向前方并将右腿放在前面时的样子。
private double calculateAngle(double P1X, double P1Y, double P2X, double P2Y,
double P3X, double P3Y)
{
double numerator = P2Y * (P1X - P3X) + P1Y * (P3X - P2X) + P3Y * (P2X - P1X);
double denominator = (P2X - P1X) * (P1X - P3X) + (P2Y - P1Y) * (P1Y - P3Y);
double ratio = numerator / denominator;
double angleRad = Math.Atan(ratio);
double angleDeg = (angleRad * 180) / Math.PI;
if (angleDeg < 0)
{
angleDeg = 180 + angleDeg;
}
return angleDeg;
}
calculateAngle(LeftLegController.position.x, LeftLegController.position.z,
RightLegController.position.x, RightLegController.position.z,
LeftLegController.position.x, RightLegController.position.z))
因此,它应该始终是直角三角形。
所以,这是我用来计算 P1
和 P2
、
当我面向前方时,我的两个游戏对象之间的角度不同,当我面向左侧并将右腿向前移动时(看起来像这样)
我的 Angle 1
和 Angle 2
完全不同。那么,找到角度的更好方法是什么(忽略 y 轴,就好像这些点投影在地面上一样)
记住两个向量A和B的点积是|A| |乙|余弦θ。所以用你的点积,除以每个向量的大小,然后用反余弦得到你的角度。 (事实上 ,您可能无论如何都想要cos!)
我相信您正在寻找的方法是 Vector3.SignedAngle()
。
var A = Vector3.ProjectOnPlane(P3.position - P1.position, Vector3.up);
var B = Vector3.ProjectOnPlane(P2.position - P1.position, Vector3.up);
print(Vector3.SignedAngle(A, B, Vector3.up));