3D中圆和弧的边界框

Dav*_*ten 5 math 3d geometry

给定3D空间中圆形和圆弧类型的曲线,计算精确边界框(世界轴对齐)的好方法是什么?


编辑:找到圆圈的解决方案,仍需要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);
}
Run Code Online (Sandbox Code Playgroud)

bra*_*jam 5

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

所以圆被功能扫了

P(θ)= Õ + R COS(θ)X + R SIN(θ)ÿ 其中θ是在闭区间[θ 开始,θ

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}中的i为θ= arctan(y i / x i)。

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

您要做的就是找到与您的角度范围内的极值相对应的一组θ,然后计算圆上其对应点的边界框,然后完成。这有可能是有在角度范围内没有极值,在这种情况下,你运算与θ点的边框开始和θ 结束。实际上,您也可以使用这两个值初始化θ的解集,因此不必特殊使用它。