여러개의 평면과 한 직선과의 교차 갯수를 알수있는 함수를 짜고 싶습니다.
은아
질문 제목 : 여러개의 평면과 한 직선과의 교차 갯수를 알수있는 함수를 짜고 싶습니다.교차 갯수. 정확히는 교차횟수가 짝수? or 홀수?질문 내용 : 위 그림과 같이 매개변수 u, v 와 벡터 a,b,c로 이루어진 평면 삼각형과
두 벡터로 이루어진 직선과의 교차점을 구하는 함수를 만들었습니다.(아래)
bool ctestview::interpoint(point3d tp1, point3d tp2, point3d tp3, point3d cl1, point3d cl2, point3d ip)
{
float u,v,t;
point3d ol;
point3d tl1;
point3d tl2;
tl1 = tp2 - tp1;
tl2 = tp3 - tp1;
ol = cl2 - cl1;
float m = -tl1.x*tl2.y*ol.z + tl1.x*tl2.z*ol.y + tl1.y*tl2.x*ol.z - tl1.z*tl2.x*ol.y - tl1.y*tl2.z*ol.x
+ tl1.z*tl2.y*ol.x;
float l[3][3] = { {(-tl2.y*ol.z+tl2.z*ol.y)/m, (tl2.x*ol.z-tl2.z*ol.x)/m, (-tl2.x*ol.y+tl2.y*ol.x)/m},
{ (tl1.y*ol.z-tl1.z*ol.y)/m, (-tl1.x*ol.z+tl1.z*ol.x)/m, (tl1.x*ol.y-tl1.y*ol.x)/m },
{ (tl1.y*tl2.z-tl1.z*tl2.y)/m, (-tl1.x*tl2.z+tl1.z*tl2.x)/m, (tl1.x*tl2.y-tl1.y*tl2.x)/m} };
point3d k;
k = cl1 - tp1;
u = l[0][0]*k.x + l[0][1]*k.y + l[0][2]*k.z;
v = l[1][0]*k.x + l[1][1]*k.y + l[1][2]*k.z;
t = l[2][0]*k.x + l[2][1]*k.y + l[2][2]*k.z;
if((0.0=u && u=1.0) && (0.0=v && v=1.0) && (0.0=u+v && u+v=1.0) && (0.0=t && t=1.0))
{
ip.x = cl1.x + ol.x*t;
ip.y = cl1.y + ol.y*t;
ip.z = cl1.z + ol.z*t;
return true;
}else return false;
}
이 함수 위엔 당연히 교차하는지 확인하는 함수
bool ctestview::interpoint(point3d tp1, point3d tp2, point3d tp3, point3d cl1, point3d cl2) 가 있고요
-----------------------------------------------------
삼각형을 이루는 여러개의 평면과 한개의 직선(cl1, cl2)이 교차하는 횟수를 구하는 알고리즘은 어떻게 짜야할까요?
답이 안나오네요;;;