3D中圆和弧的边界框

时间:2010-04-07 11:33:57

标签: math 3d geometry

在3D空间中给出Circle和Circular-Arc类型的曲线,计算精确边界框(世界轴对齐)的好方法是什么?


编辑:找到了圈子的解决方案,仍然需要Arcs的帮助。

用于解决Circles BoundingBoxes的C#代码段:

public static BoundingBox CircleBBox(Circle circle)
{
  Point3d O = circle.Center;
  Vector3d N = circle.Normal;

  double ax = Angle(N, new Vector3d(1,0,0));
  double ay = Angle(N, new Vector3d(0,1,0));
  double az = Angle(N, new Vector3d(0,0,1));

  Vector3d R = new Vector3d(Math.Sin(ax), Math.Sin(ay), Math.Sin(az));
  R *= circle.Radius;

  return new BoundingBox(O - R, O + R);
}

private static double Angle(Vector3d A, Vector3d B)
{
  double dP = A * B;
  if (dP <= -1.0) { return Math.PI; }
  if (dP >= +1.0) { return 0.0; }

  return Math.Acos(dP);
}

1 个答案:

答案 0 :(得分:4)

未指定的一件事是如何将该角度范围转换为空间中的点。所以我们从那里开始并假设角度0映射到 O + r *** X **,角度π/ 2映射到 O + r *** Y **,其中 O 是圆圈的中心 X =(x 1 ,x 2 ,x 3 )  和   Y =(y 1 ,y 2 ,y 3 ) 是单位向量。

所以圆圈被函数扫除了

P (θ)= O + r cos(θ) X + r sin(θ)的ý 其中θ在闭区间[θ start ,θ end ]。

P 的衍生物是

P '(θ)= -r sin(θ) X + r cos(θ) Y

出于计算边界框的目的,我们对其中一个坐标达到极值的点感兴趣,因此其中一个坐标 P '的点为零。

设置-r sin(θ)x i + r cos(θ)y i = 0我们得到  tan(θ)= sin(θ)/ cos(θ)= y i / x i

所以我们在{1,2,3}寻找θ,其中θ= arctan(y i / x i )。

你必须注意arctan()范围的细节,并避免被零除,如果θ是一个解,那么θ±k *π也是如此,我将留下这些细节给你。

你所要做的就是在你的角度范围内找到与极值相对应的θ组,并计算圆上相应点的边界框,你就完成了。角度范围内可能没有极值,在这种情况下,您可以计算与θ start 和θ end 对应的点的边界框。事实上,您也可以使用这两个值来初始化θ的解决方案集,因此您不需要特殊情况。