【问题标题】:Define coordinates of bounding box定义边界框的坐标
【发布时间】:2015-11-26 17:07:18
【问题描述】:

我有一个 3d 场景,其中包含一条线,一侧的坐标为 Xa,Ya,Za,另一侧的坐标为 Xb,Yb,Zb:

如何确定这条线的边界框的 3d 坐标 (Xa1,Ya1,Za1,Xa2,...Zb4),除了上面的数据,还有这个框的宽度和高度,以及旋转角度在它的轴上:

谢谢

【问题讨论】:

  • 澄清一下:您有一条线 segment,带有给定的 endpoints,并且您不是在寻找包含这条线的小轴平行框(这是边界框的通常含义),而是用于包含该线并具有给定尺寸的某些框。正确的?盒子的长度是否等于线的长度?你写你有围绕轴的旋转,但是关于什么参考系,即角度零是什么意思?
  • 是的,您的上述假设是正确的。框的长度与线相同。角度 0 将平行于下面的平面。感谢您的回答,将尝试对算法进行编码。

标签: math 3d coordinates trigonometry bounding-box


【解决方案1】:

基本上你要做的就是建立一个合适的正交坐标基,这样一个基向量沿着给定的线指向,而另外两个与之正交。实际选择取决于您提到的角度,但您需要一些参考方向来确定角度为零。

通常我会说让 a 成为从一个点到另一个点的标准化(长度为 1)向量。让 v 是一些固定的参考方向,例如“向上”。确保 av 是独立的,即指向不同的方向。计算叉积 a×v,归一化为单位长度,并将其称为 b。它将是一个与 av 都正交的向量,因此如果 v 为向上。计算 c=a×b 这将是第三个基向量,与 ab 正交 并且已经是单位长度。

现在取任一端点并将 ± w/2∙b ± h/2∙c 添加到其中 wh 是边界框的尺寸。这为您提供了边界框的 8 个角点。如果要绕线旋转框,请对向量 bc 应用二维旋转:

b' = cos(θ)∙b + sin(θ)∙c
c' em> = cos(θ)∙c − sin(θ)∙b

【讨论】:

  • 完美运行,谢谢!现在如何在算法中包含角度参数?
  • @LaurentCrivello:我忘记了你问题的那一部分,但只是将它编辑到我的答案中。
猜你喜欢
  • 1970-01-01
  • 2019-06-27
  • 2021-08-29
  • 1970-01-01
  • 2021-02-20
  • 2019-06-29
  • 2017-10-08
  • 2016-07-07
  • 2017-07-15
相关资源
最近更新 更多