【发布时间】:2018-09-21 13:48:08
【问题描述】:
我有一个对象 (A),旁边有另一个对象 (B)。我正在尝试计算对象 B 的“高度”,以便我可以将另一个对象定位在相对于对象 A 的位置的那个高度。我知道这听起来像胡言乱语(我有点累)所以我放了图表试着解释一下。
所以在左图中,黄线代表我要计算的内容。我在圆柱体(灰色)的表面上有一个位置(橙色)(使用网格数据计算的位置),我试图用它来计算物体的半径(黑线)。为此,我需要在对象中心(灰色)处于相同高度(红点)的位置,这样我就可以计算从一个到另一个的方向并使用长度(.magnitude)作为半径。
我的问题是我无法解决,我如何计算高度(黄线)而不旋转有任何影响。
我目前使用 projectOnPlane,但是如果我旋转第二张图片中看到的对象,半径会显着减小,因为对象没有改变大小。
Vector3 RadDirection = (Vector3.ProjectOnPlane(orangePoint, grey.transform.up) - Vector3.ProjectOnPlane(grey.transform.position, grey.transform.up));
float radius = RadDirection.magnitude;
任何帮助将不胜感激,谢谢。
**更新:图中的灰色块是vector3位置而不是游戏对象。我尝试进行的半径计算发生在运行时,因此我无法将对象作为灰色对象并查看检查器。
**更新 2:对不起,我应该提到的。我正在做的对象并不总是一个完美的圆柱体,它可能是诸如酒杯之类的东西,我需要计算玻璃的半径而不是茎。另一个例子可能是一个化学烧杯,它通常逐渐变细到一个点,所以我需要计算橙色点高度处的半径。对不起,我应该把它放在问题中。
这是一个图表来说明我在更新 2 中的意思。橙色点再次作为对象(在本例中为烧杯)网格表面上的 Vector3 位置的视觉表示。
**更新 3:我似乎已经解决了这个问题,所以我在下面发布了我的答案,但在撰写本文时我无法接受(必须等待 2 天),因此无法关闭/回答问题.我要感谢所有做出贡献并试图帮助我解决这个问题的人。希望有一天能帮到大家:)
【问题讨论】:
-
图表很好,但没有代码我们看不出有什么问题。虽然这听起来对我来说,如果你只是得到一条直线的测量值,你应该使用从中心向外的射线。我假设正在谈论3d?不是二维的?
-
@Vanethrane 我已经添加了我当前使用的受旋转影响的代码
-
是
b的子a? -
@Vanethrane no B 只是对象 A 网格表面上的 vector3 位置。我使用顶点数据和 KdTree 计算它。
-
transform.localscale.z/2 将更有效地为您提供半径...给我第二个我快速将一些东西放在一起
标签: unity3d rotation trigonometry