C++OPENGL中求直线与三角面片的交点,大神帮看看哪里算法出了问题

	x0=0;
	y0=0;
	z0=5;
	
	m_jiaodian1.RemoveAll();
	//m_jiaodian2.RemoveAll();

	
	for (i=0;i<30*360;i++)
	{
		x1=x0;
		y1=y0;
		z1=z0-i*0.002777777777777;                //点

		x2=100*cos(i);                            //另一个点
		y2=100*sin(i);
		z2=z1;

      //  X0=x1+cos(i)*t0;
	  //  Y0=y1+sin(i)*t0;                           //参数方程
	//	  Z0=0;

    	
  

		for(pos = m_zhongjiandaociqumian.GetHeadPosition();pos!=NULL; )    //求一条投影线与所有三角面片所在平面的交点
		{
			facet=(CFacet*)m_zhongjiandaociqumian.GetNext(pos);

	  	    x11=facet->m_dNormal.x;
		    y11=facet->m_dNormal.y;
		    z11=facet->m_dNormal.z;

		    x22=facet->m_dVertex1.x;
		    y22=facet->m_dVertex1.y;
		    z22=facet->m_dVertex1.z;

			x33=facet->m_dVertex2.x;
	        y33=facet->m_dVertex2.y;
	        z33=facet->m_dVertex2.z;

	        x44=facet->m_dVertex3.x;
	        y44=facet->m_dVertex3.y;
	        z44=facet->m_dVertex3.z;

        //    x11*(X1-x22)+y22*(Y1-y22)+z22(Z1-z22)=0;    //面方程,需不需要?好像不需要
			
			t0=((x22-x1)*x11+(y22-y2)*y11+(z22-z2)*z11/(x11*cos(i)+y11*sin(i)+z11*0));
            
			    x01=x1+cos(i)*t0;
		    	y01=y1+sin(i)*t0;
		    	z01=z1;
			
		    	pvertex0=new CVertex;
			


				a0=sqrt(pow(x22-x33,2)+pow(y22-y33,2)+pow(z22-z33,2));   //计算三角面片三条边的长度
				b0=sqrt(pow(x22-x44,2)+pow(y22-y44,2)+pow(z22-z44,2));
				c0=sqrt(pow(x33-x44,2)+pow(y33-y44,2)+pow(z33-z44,2));

				a1=sqrt(pow(x01-x22,2)+pow(y01-y22,2)+pow(z01-z22,2));      //计算交点到三角面片三个顶点的距离
				b1=sqrt(pow(x01-x33,2)+pow(y01-y33,2)+pow(z01-z33,2)); 
				c1=sqrt(pow(x01-x44,2)+pow(y01-y44,2)+pow(z01-z44,2)); 



	        	p0=(a0+b0+c0)/2;                                          //海伦公式计算三角面片面积和三个小三角形的面积
				S0=pow(p0*(p0-a0)*(p0-b0)*(p0-c0),0.5);      
					
				p1=(a0+a1+b1)/2;
				S1=pow(p1*(p1-a0)*(p1-a1)*(p1-b1),0.5);

				p2=(b0+a1+c1)/2;
				S2=pow(p2*(p2-b0)*(p2-a1)*(p2-c1),0.5);

				p3=(c0+b1+c1)/2;
				S3=pow(p3*(p3-c0)*(p3-b1)*(p3-c1),0.5);


				if(fabs(S1+S2+S3-S0)>0.0001)
				{
					pvertex0=new CVertex;                     	//如果在三角面片上,存入新链表
				    	
					    pvertex0->x=x01;
	                	pvertex0->y=y01;
	    	            pvertex0->z=z01;

					m_jiaodian1.AddTail(pvertex0);
				}                                       //筛选在三角面片上的点       
				
		double t000;                                    //判断for循环执行次数
        t000=m_jiaodian1.GetCount();	

		}

    }
		double t00;                                    //判断for循环执行次数
        t00=m_jiaodian1.GetCount();	
		dianhexiangliang_Code=0;
}

 

第一层for循环是创建线段,第二层for循环是提取三角面片

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^