2016-08-09 7 views
0

Поиск пересечения круга и бесконечного цилиндра. (все в 3D) • Круг определяется центром, плоскостью, в которой он находится, и радиусом. • Цилиндр определяется осью и радиусом.Поиск пересечения круга и бесконечного цилиндра в 3D-пространстве

Как я могу получить пересечение этих двух?

+0

Возможно, связанный: https://en.wikipedia.org/wiki/Sphere%E2%80%93cylinder_intersection –

+0

, но как его использовать с плоскостью резки (которая преобразует сферу в круг) .. ?? – AmolN

+0

используйте уравнение для круга и выполните аналогичный анализ. возможно, проще всего зафиксировать круг в плоскости ху с центром в начале координат и позволить цилиндру быть произвольным. –

ответ

0

без потери общности, цилиндр имеет уравнение X² + Y² = 1 (если нет, то можно сделать так, путем перевода, вращение и масштабирование).

Тогда параметрическое уравнение окружности

P = C + U cos t + V sin t 

где C находится в центральной точке и U, V два ортогональных векторов в плоскости окружности, длины R.

Вы можете почитать сменил: cos t = (1 - u²)/(1 + u²), sin t = 2u/(1 + u²).

Комбинируя эти уравнения,

(Cx (1 + u²) + Ux (1 - u²) + Vx 2u)² + (Cy (1 + u²) + Uy (1 - u²) + Vy 2u)² = (1 + u²)² 

который квартика один. Нет особого упрощения коэффициентов.

Вы можете решить численно или по формулам замкнутой формы. Может быть до четырех решений.


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

Вы также можете использовать его как проблему пересечения круга/эллипса в 2D.

+0

@AmolN: что вы не понимаете? Почему вы должны решить эту проблему? –

+0

@AmolN: это самые простые, которые вы можете найти. –

+0

@AmolN: неизвестное значение u, коэффициенты объясняются в ответе. –

0

Давайте будем иметь базовую точку цилиндра A0, вектор направления оси оси AD, радиус AR. Центр окружности B0, нормальная плоскость плоскости равна BN, радиус BR.

Круг пересекает цилиндр, если расстояние от B0 до цил. Ось меньше, чем сумма радиуса цилиндра плюс проекции радиуса окружности на нормаль к оси

Dist <= AR + BR * Abs(Cos(AD, BN)). 

Cos(AD, BN) = DotProduct(AD, BN) 
Distance(B0, cyl.axis) = Abs(VectorProduct(AD, B0-A0))