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循环是提取三角面片
不知道你这个问题是否已经解决, 如果还没有解决的话: