без потери общности, цилиндр имеет уравнение 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.
Возможно, связанный: https://en.wikipedia.org/wiki/Sphere%E2%80%93cylinder_intersection –
, но как его использовать с плоскостью резки (которая преобразует сферу в круг) .. ?? – AmolN
используйте уравнение для круга и выполните аналогичный анализ. возможно, проще всего зафиксировать круг в плоскости ху с центром в начале координат и позволить цилиндру быть произвольным. –