【问题标题】:Want to find intersecting angle (3D position) of two 3D points or Y distance想要找到两个 3D 点或 Y 距离的相交角度(3D 位置)
【发布时间】:2021-06-18 07:59:17
【问题描述】:

我在 ARWorld 中有点 A (x,y,z) 和点 B (x, y, z)。我想保持 A 点与 B 水平平行,或者假设两者都应该在表面上。 查看图片以获得更好的想法。

我打算从A到B获得Y方向高度或垂直高度,然后我将A向下推高。但是如何找到高度。

我想保持 A 的 x 和 z 不变。

不确定如何表达这个问题,但是 aY - By 不起作用。 注意:A 和 B 在 ARKit 中都是不同的 Anchor。盒子/网格在锚上。好像我需要全球绝对世界位置。 有没有其他方法可以在图像中获得圆角位置?

【问题讨论】:

  • 我有点困惑....如果你只有A和B那么垂直线和水平线到底是什么? ..您能解释一下I want to keep point A horizontally parallel 的确切含义吗...您的意思是您只是希望他们的全局Y 是平等的?就这么简单pointA.y = pointB.y?
  • 这条线是为了理解,我想让A平行于B(水平)。所以在图像中,我希望圆的位置从它的位置移动 A。
  • 所以如果你的意思是全局 Y 轴,那么pointA.y = pointB.y; 不会已经这样做了吗?距离(如果你需要的话)只是pointB.y - pointA.y
  • 我想保持 X 和 Z 位置不变。如果我只更改 Y,那么我会在其他地方获得新职位。
  • @joreldraw close but no ;) 移动 A 的距离是 b.y - a.y 例如b.y = 3a.y=10 => 将 a.y 移动到 3 - 10 = -7 ;) 所以向下移动 7 ......但正如所说,你也可以直接分配它们 a.y = b.y .. 根本不需要计算距离

标签: swift augmented-reality arkit realitykit


【解决方案1】:

您说您希望将positionA 映射到与positionB 相同的“高度”(Y 轴)级别

positionA.y = positionB.y;

就这么简单。

请注意,我说的是绝对的世界空间位置 ...在检查器中的值当然会有所不同,因为在那里您只能看到 本地位置 相对给父母。

所以当我们谈论GameObjects 你想要做的是

var positionA = objectA.transform.position;
var positionB = objectB.transform.position;

positionA.y = positionB.y;

objectA.transform.position = positionA;

【讨论】:

  • ibb.co/K59PDQB 它没有给我想要的,
  • 最简单的方法是找到两个物体的距离然后移动它。
  • @indrajit 好吧,您确定黄板不只是由于透视而显得更高吗?我们也很难弄清楚你到底在做什么......你能展示你正在使用的代码吗?
  • 是的,我确定。蓝色是我被 ARKit 检测到的水平面。黄色是我的。
  • @indrajit 是的,但它可能只是在 AR 飞机的“后面”......并不是真的在它上面。由于视角的原因,它可能只是这样出现......正如所说,很难说出在你的具体情况下什么不起作用......你确定 ARKit 的平面是 Unity 世界对齐 XZ 平行吗?或者它有可能带来自己的轮换?
【解决方案2】:

我会在B 中创建一个水平平面,找到该平面中最接近A 的点,然后将A 移动到该点。

创建水平plane: 考虑到构造函数Plane(Vector3 inNormal, Vector3 inPoint);

Plane myPlane = new Plane(Vector3.up, <Bpositon>)

然后使用Plane.ClosestPointOnPlane,您可以在水平面上找到离 A 最近的点。

Vector3 closestPoint = myPlane.ClosestPointOnPlane(<APosition>);

然后您可以将A 移动到该点。

APosition = closesPoint;

在平面上最接近一点的点是垂直于平面的点,所以我相信你在追求“水平平行”的点。

【讨论】:

  • 我正在使用 Swift - ARKit。有什么方法可以得到计算或公式吗?
  • 那为什么是unity3d标签呢?
  • 所以我可以得到一个公式或计算。没有 unity3d,我得到的关注太少
  • 标签不是为了引起注意,是为了定义问题。当标签被滥用时,这会导致乐于提供帮助的人们浪费时间和精力。您需要在适当的堆栈交换站点中设置正确应用于您的问题的标签,如果您的问题没有引起预期的注意,您可以设置赏金。
  • @rustyBucketBay 这与仅仅做 positionA.y = positionB.y; 有什么不同? ^^ 如果您无论如何使用Vector3.Up 为您的飞机使用ClosestPointOnPlane 是完全多余的
猜你喜欢
  • 1970-01-01
  • 2015-05-27
  • 2023-03-17
  • 2019-03-28
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
相关资源
最近更新 更多