Ограничительные рамки для круга и дуг в 3D

Учитывая кривые Круга типа и Круговой Дуги в 3D пространстве, что хороший путь состоит в том, чтобы вычислить точные ограничительные рамки (мировая выровненная ось)?


Править: найденное решение для кругов, все еще нуждайтесь в помощи с Дугами.

Отрывок C# для решения BoundingBoxes для Кругов:

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);
}
5
задан David Rutten 7 April 2010 в 18:50
поделиться

1 ответ

Одна вещь, которая не указана, - это то, как вы конвертируете этот диапазон углов в точки в пространстве. Итак, мы начнем с этого и предположим, что угол 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 (θ) Y где θ находится в закрытом интервале [θ 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 .

Итак, мы ищем θ, где θ = arctan (y i / x i ) для i в {1,2,3}.

Вы должны следить за деталями диапазона arctan () и избегать деления на ноль, и что если θ - решение, то θ ± k * π тоже будет, и я оставлю эти детали тебе.

Все, что вам нужно сделать, это найти набор θ, соответствующий экстремальным значениям в вашем диапазоне углов, и вычислить ограничивающую рамку их соответствующих точек на окружности, и все готово. Возможно, что в диапазоне углов нет экстремальных значений, и в этом случае вы вычисляете ограничивающую рамку точек, соответствующих θ start и θ end . Фактически, вы также можете инициализировать свой набор решений θ этими двумя значениями, так что вам не нужно делать особый случай.

5
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: