C# 矢量/角度数学

C# 矢量/角度数学,c#,math,vector,unity3d,angle,C#,Math,Vector,Unity3d,Angle,我在一个游戏中有两个对象,出于这个目的,可以将其视为2d平面上的点,但我使用矢量3,因为游戏本身是3d的 我有一个游戏摄像机,我想垂直(也在平面上)对准两个物体,这样它们都可以在摄像机的视野内。由于游戏的性质,对象可以处于任何可想象的位置配置中,因此它们之间的方向向量可以具有任何方向 第1部分:如何从两个位置向量获得垂直角度 我有: Vector3 object1Position; // x and z are relevant Vector3 object2Position; 我需要: fl

我在一个游戏中有两个对象,出于这个目的,可以将其视为2d平面上的点,但我使用矢量3,因为游戏本身是3d的

我有一个游戏摄像机,我想垂直(也在平面上)对准两个物体,这样它们都可以在摄像机的视野内。由于游戏的性质,对象可以处于任何可想象的位置配置中,因此它们之间的方向向量可以具有任何方向

第1部分:如何从两个位置向量获得垂直角度

我有:

Vector3 object1Position; // x and z are relevant
Vector3 object2Position;
我需要:

float cameraEulerAngleY;
第二部分:现在,由于游戏资产的建模方式,我只想让相机在180度的“圆锥体”内观看。因此,如果相机经过某个点,它应该使用上述数学可能产生的完全相反的位置

我需要的是一张图片,圆圈是物体,盒子是相机

我希望这篇文章是清楚的,你们不会因为我在向量数学课上完全是垃圾而活活烧死我:p

您好,
Draknir

好的,对于第一位,如果你有点(x1,y1)和(x2,y2)来描述你的物体的位置,就用三角形来考虑它。你要找的角度应该是

arctan((y2-y1)/(x2-x1))+90

但是,我不完全理解您想对第二部分做什么。

您需要指定距离对象线的
距离,以及
向上的
向量:

Vector3 center = 0.5 * (object2position + object2position)
Vector3 vec12 = object2position - object1position

Vector3 normal = Cross(vec12, up)
normal.Normalize()
Vector3 offset = distance * normal

Vector3 cameraA = center + offset
Vector3 cameraB = center - offset
< choose which camera position you want >
Vector3中心=0.5*(object2position+object2position)
Vector3 vec12=object2position-object1position
向量3法线=交叉(向量12,向上)
normal.Normalize()
矢量3偏移=距离*法线
Vector3摄像机A=中心+偏移
Vector3摄像机=中心-偏移
<选择您想要的摄像机位置>
不要使用Euler角度,您可能应该使用类似于
LookAt()
的东西来确定相机的方向。

假设Y始终为0(您提到的“X和Z”是相关组件),那么您可以使用一些二维数学:

1.找到任何垂直向量(有两个)。您可以通过计算两个向量之间的差、交换组件并对其中一个求反来实现这一点

Vector3 difference = (object1Position - object2Position);
Vector3 perpendicular = new Vector3(difference.z, 0, -difference.x);
2.使用分离平面的法线,如果新向量指向的方向与预期方向相反,则翻转新向量的方向

Vector3 separatingPlaneNormal = ...; // down?
if(Vector3.Dot(separatingPlaneNormal, perpendicular ) < 0)
{
    perpendicular = -perpendicular ;
}

// done.
Vector3分离平面法线=…;//下来?
if(矢量3.点(分离平面法线,垂直)<0)
{
垂直=-垂直;
}
//完成了。

这个问题在这里可能没问题,但实际上你可能会在数学方面取得更好的成绩。所以我可以帮你解决第一个问题part@PhillipSchmidt我会试试看,有没有办法把这篇文章移过去,或者我需要重新发布?@Draknir据我所知,只有版主才能移动帖子。我可能错了,但我也会在那里发布一份副本(没有禁止在不同SO服务器上重复发布的规则)不允许在math SO上使用图像。。希望这个能得到答案!