Möller-Trumboreアルゴリズムは、コンピューターグラフィックスとレイトレースの光線三角交差点に一般的に使用され、高速な方法です。アルゴリズムは、最初に三角形の正常を計算し、光線が三角形の平面と交差するかどうかを判断することにより機能します。光線が平面と交差する場合、アルゴリズムは、2つのエッジテストを実行することにより、交差点が三角形の内側にあるかどうかをチェックします。

これは、Möller-Trumboreアルゴリズムの擬似コードです。

関数間片角（レイ、三角形）：
  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を返す＃レイは三角形を逃します
The Möller-Trumbore algorithm is a commonly used and fast method for ray-triangle intersection in computer graphics and raytracing. The algorithm works by first calculating the triangle normal and determining if the ray intersects the plane that the triangle lies on. If the ray intersects the plane, the algorithm checks if the intersection point is inside the triangle by performing two edge tests.

Here's a pseudocode for the Möller-Trumbore algorithm:

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 and 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 or 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 or 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