Skip to main content

line_triangle

Function line_triangle 

Source
pub fn line_triangle<S>(
    line: Line3<S>,
    triangle: Triangle3<S>,
) -> Option<Line3Point<S>>
where S: OrderedField + Real + AbsDiffEq<Epsilon = S>,
Expand description

Given an infinitely extended line defined by segment endpoints (a, b), check to see if line intersects a given triangle, returning parameterized position along the line $a + t (b - a)$.

let line = frame::Line3::from (Segment3::noisy (
  [0.0, 0.0, -1.0].into(), [0.0, 0.0, 1.0].into()
));
let triangle = Triangle3::noisy (
  [0.0, 1.0, 0.0].into(), [-1.0, -1.0, 0.0].into(), [ 1.0, -1.0, 0.0].into());
assert_eq!(
  line_triangle (line, triangle).unwrap(),
  (0.5, [0.0, 0.0, 0.0].into()));
let triangle = Triangle3::noisy (
  [0.0, 1.0, -2.0].into(), [-1.0, -1.0, -2.0].into(), [ 1.0, -1.0, -2.0].into());
assert_eq!(
  line_triangle (line, triangle).unwrap(),
  (-0.5, [0.0, 0.0, -2.0].into()));