関数間片角（Ray、Triangle）{
  const epsilon = 0.000001;
  
  let1 = triangle.v2.clone（）。sub（triangle.v1）;
  let edge2 = triangle.v3.clone（）。sub（triangle.v1）;
  let h = ray.direction.clone（）。Cross（Edge2）;
  a = edge1.dot（h）;
  if（a> -epsilon && a <epsilon）{
    falseを返します。
  }
  f = 1.0 / aとします。
  let s = ray.origin.clone（）。sub（triangle.v1）;
  u = f * s.dot（h）とします。
  if（u <0.0 || u> 1.0）{
    falseを返します。
  }
  Q = S.Cross（edge1）;
  v = f * ray.direction.dot（q）;
  if（v <0.0 || u + v> 1.0）{
    falseを返します。
  }
  t = f * edge2.dot（q）;
  if（t> epsilon）{
    tを返します。
  } それ以外 {
    falseを返します。
  }
}
function intersectTriangle(ray, triangle) {
  const EPSILON = 0.000001;
  
  let edge1 = triangle.v2.clone().sub(triangle.v1);
  let edge2 = triangle.v3.clone().sub(triangle.v1);
  let h = ray.direction.clone().cross(edge2);
  let a = edge1.dot(h);
  if (a > -EPSILON && a < EPSILON) {
    return false;
  }
  let f = 1.0 / a;
  let s = ray.origin.clone().sub(triangle.v1);
  let u = f * s.dot(h);
  if (u < 0.0 || u > 1.0) {
    return false;
  }
  let q = s.cross(edge1);
  let v = f * ray.direction.dot(q);
  if (v < 0.0 || u + v > 1.0) {
    return false;
  }
  let t = f * edge2.dot(q);
  if (t > EPSILON) {
    return t;
  } else {
    return false;
  }
}