#include<stdio.h>
double tri[3][3]={ // 三角形
{10, 50, 40},
{-40, 70, -10},
{2, 8, -25}
};
double lay[2][2][3]={
{{-80, 3, 0}, {60, 70, 0}}, // 交わる光線
{{10, 120, 30}, {160, 230, -30}}, // 交わらない光線
};
int intersect_triangle(double orig[3], double dir[3],
double vert0[3], double vert1[3], double vert2[3],
double *t, double *u, double *v);
int intersect_triangle1(double orig[3], double dir[3],
double vert0[3], double vert1[3], double vert2[3],
double *t, double *u, double *v);
int intersect_triangle2(double orig[3], double dir[3],
double vert0[3], double vert1[3], double vert2[3],
double *t, double *u, double *v);
int intersect_triangle3(double orig[3], double dir[3],
double vert0[3], double vert1[3], double vert2[3],
double *t, double *u, double *v);
main()
{
int ret;
double t, u, v;
// intersect_triangle()
printf("intersect_triangle():\n");
ret = intersect_triangle(lay[0][0], lay[0][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay1 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
ret = intersect_triangle(lay[1][0], lay[1][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay2 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
// intersect_triangle1()
printf("intersect_triangle1():\n");
ret = intersect_triangle1(lay[0][0], lay[0][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay1 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
ret = intersect_triangle1(lay[1][0], lay[1][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay2 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
// intersect_triangle2()
printf("intersect_triangle2():\n");
ret = intersect_triangle2(lay[0][0], lay[0][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay1 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
ret = intersect_triangle2(lay[1][0], lay[1][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay2 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
// intersect_triangle3()
printf("intersect_triangle3():\n");
ret = intersect_triangle3(lay[0][0], lay[0][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay1 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
ret = intersect_triangle3(lay[1][0], lay[1][1],
tri[0], tri[1], tri[2],
&t, &u, &v);
printf(" lay2 ret = %d, t = %g, u = %g, v = %g\n",
ret, t, u, v);
}
それぞれの関数は速度以外にUVの扱いが違う