関数間片角（レイ、三角形）：
  edge1 = triangle.v2 -triangle.v1
  edge2 = triangle.v3 -triangle.v1
  H = Cross（Ray.Direction、Edge2）
  a = dot（edge1、h）
  a> -epsilon && a <epsilonの場合：
    falseを返す// rayは三角形に平行です
  f = 1.0 / a
  s = ray.origin -triangle.v1
  u = f * dot（s、h）
  u <0.0 ||の場合u> 1.0：
    falseを返す//交差点は三角形の外側です
  Q = Cross（S、Edge1）
  v = f * dot（ray.direction、q）
  v <0.0 ||の場合u + v> 1.0：
    falseを返す//交差点は三角形の外側です
  t = f * dot（edge2、q）
  t> epsilonの場合：
    T // Rayは三角形を交差させます
  それ以外：
    falseを返す// rayは三角形を逃します
function intersectTriangle(ray, triangle):
  edge1 = triangle.v2 - triangle.v1
  edge2 = triangle.v3 - triangle.v1
  h = cross(ray.direction, edge2)
  a = dot(edge1, h)
  if a > -EPSILON && a < EPSILON:
    return false  // ray is parallel to triangle
  f = 1.0 / a
  s = ray.origin - triangle.v1
  u = f * dot(s, h)
  if u < 0.0 || u > 1.0:
    return false  // intersection point is outside of triangle
  q = cross(s, edge1)
  v = f * dot(ray.direction, q)
  if v < 0.0 || u + v > 1.0:
    return false  // intersection point is outside of triangle
  t = f * dot(edge2, q)
  if t > EPSILON:
    return t  // ray intersects triangle
  else:
    return false  // ray misses triangle