如何计算倾斜表面上一个点的高度?

我有一个在X轴和Z轴上倾斜的平面(y +是法线)。

给定一个X和Z坐标以及飞机的X和Z旋转,我怎么知道那个点的高度(Y)?

我认为这是一个三角问题…我可以使用简单的sin和cos来解决,如果它只是在X或Z轴上移动,但是如果它在3,8(x,z)呢? 也许平均的罪恶/ cos高度?!

假设你的平面经过原点,那么它可以用它的法向量定义为垂直于法线的所有点的集合。

dot(position, normal) = 0 

这里你的法线是对象的本地y轴, transform.up

所以你想find一个垂直于transform.up的坐标三元组(x, y, z) 。 我们可以解决:

 dot((x, y, z), transform.up) = 0 y * transform.up.y + dot((x, 0, z), transform.up) = 0 y * transform.up.y = -dot((x, 0, z), transform.up) y = (-x * transform.up.x - z * transform.up.z)/transform.up.y 

现在我们用xz表示y ,而不使用任何超越函数,只是普通的乘法减法和除法。 🙂

啊 – 看起来你只是把它们加在一起!

 float angX = Mathf.Sin(Mathf.Deg2Rad * transform.eulerAngles.z); float angZ = Mathf.Sin(Mathf.Deg2Rad * transform.eulerAngles.x); foreach(GameObject item in GameObject.FindGameObjectsWithTag("Fart")) { float yx = fart.transform.position.x * angX; float yz = fart.transform.position.z * -angZ; item.transform.position = new Vector3(item.transform.position.x, (yx + yz), item.transform.position.z); }