你好 <br/>我写了一个东西 但是觉得有些不对 <br/>如果有时间能帮我看看吗<br/>void CMianqiujiaoView::shujuchuli()<br/>{<br/> _CrtDumpMemoryLeaks(); <br/> int i,j,flag[5];<br/> FILE *fpf1,*fpp1 ,*fpf2,*fpp2,*fpf,*fpp;<br/> fpf1=fopen("face1.dat","w ");<br/> fpp1=fopen("point1.dat","w");<br/> fpf2=fopen("face2.dat","a+");<br/> fpp2=fopen("point2.dat","a+");<br/> fpf =fopen("face.dat","w");<br/> fpp =fopen("point.dat","w");<br/> //fp=fopen("outjiao.dat","w");<br/>// <br/> ///////////////////////// mainbao 是一个类 包含一个面的三个点信息 ; Point3是3纬的点 下面是几个类指针<br/> mianbiao* face1; Point3* point1;<br/> mianbiao* face2; Point3* point2;<br/> <br/>// <br/> Point3 p0[3],p1[3],v1,v2,p00,p01;<br/> //////////第1个文件读取 用来截取第二个面 这里是一个立方体<br/> <br/> //shujuduqu("point.txt","face.txt",8,8);<br/> shujuduqu("point1.txt","face1.txt",8,8);<br/> face1=new mianbiao[nf];<br/> point1=new Point3[np];<br/> int Lface1=nf;<br/> int Lpoint1=np;<br/> for(i=0;i<nf;i++)<br/> { <br/> face1[i].p[0]=faceid0[i];<br/> face1[i].p[1]=faceid1[i];<br/> face1[i].p[2]=faceid2[i];<br/> }<br/> <br/> for (i=0;i<np;i++)<br/> {<br/> point1[i]=Point3(px[i],py[i],pz[i]);<br/> <br/> }<br/> int addfp[2] ; int Nfp[2];<br/> float fangxiang;<br/> //////////第二个文件读取 被第一个面截取 这里是一个三角形<br/><br/> //shujuduqu("point1.txt","face1.txt",5,4);<br/> // shujuduqu("20043dPoint.xpt","20043dFace.xfc",476914,953661);<br/> shujuduqu("jiaop.txt","jiaof.txt",3,1);<br/> <br/> face2=new mianbiao[nf];<br/> point2=new Point3[nf];<br/> int Lface2=nf,Lpoint2=np;<br/> Nfp[0]=nf;Nfp[1]=np;<br/> <br/> for(i=0;i<nf;i++)<br/> { <br/> face2[i].p[0]=faceid0[i];<br/> face2[i].p[1]=faceid1[i];<br/> face2[i].p[2]=faceid2[i];<br/> }<br/><br/> for(i=0;i<np;i++)<br/> {<br/> point2[i]=Point3 (px[i],py[i],pz[i]);<br/> <br/> }<br/> <br/>// ////////////////////////////////////面求交<br/><br/> <br/> <br/> for(i=0;i<Lface1;i++)<br/> { <br/> //fprintf(fp,"%s,这是第%d次面循环\n\n","nihao",i);<br/> p1[0]=point1[face1[i].p[0]];<br/> p1[1]=point1[face1[i].p[1]];<br/> p1[2]=point1[face1[i].p[2]];<br/> <br/> <br/> for(j=0;j<Lface2;j++)<br/> { <br/> <br/> <br/> p0[0]=point2[face2[j].p[0]];<br/> p0[1]=point2[face2[j].p[1]];<br/> p0[2]=point2[face2[j].p[2]];<br/> <br/><br/> Sanjiaoxingqiujiao(p0[0],p0[1],p0[2],p1[0],p1[1],p1[2],p00,p01,flag);<br/> //fprintf(fp,"%d,%d,%d\n\n",flag[0],flag[1],flag[4]);<br/> v1=p0[(flag[0]+2)%3]-p0[(flag[0]+1)%3];<br/> v2=p01-p00;<br/> addfp[0]=0;<br/> addfp[1]=0;<br/> fangxiang=v1.dot(v2);<br/> ///flag[4]=1 说明两个面相交 <br/> if(flag[4]==1)<br/> { <br/> mianbiao* tempf1=NULL; Point3* tempp1=NULL;<br/> tempf1=new mianbiao[Lface2+3 ];<br/> tempp1=new Point3[Lpoint2+2 ];<br/> /////下面是相交的八种情况<br/> if((!dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+1)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+2)%3],p01))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+2)%3],p0[(flag[0]+1)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+2)%3],p0[(flag[0]+1)%3],p01)))<br/> DianzaiNB(j,face2[j],flag[0],fangxiang,flag[1],p00,p01,tempf1,tempp1,Nfp,addfp);<br/> <br/> <br/> if((dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+1)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+2)%3],p01))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p01)))<br/> DianzaiZN(j,face2[j],flag[0],fangxiang,flag[1],p00,p01,tempf1,tempp1,Nfp,addfp); <br/> <br/> if((dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+2)%3],p01))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p01)))<br/> DianzaiXN(j,face2[j],flag[0],fangxiang,flag[1],p00,p01,tempf1,tempp1,Nfp,addfp);<br/> <br/> if((!dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+1)%3],p00))<br/> &&(dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+2)%3],p01))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p01))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p00)))<br/> DianzaiNY(j,face2[j],flag[0],fangxiang,flag[1],p00,p01,tempf1,tempp1,Nfp,addfp);<br/> <br/> if((!dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+1)%3],p00))<br/> &&(dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p01))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p00)))<br/> DianzaiNX(j,face2[j],flag[0],fangxiang,flag[1],p00,p01,tempf1,tempp1,Nfp,addfp);<br/> <br/> if((dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+1)%3],p00))<br/> &&(dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+2)%3],p01))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p01)))<br/> DianzaiLC(j,face2[j],flag[0],fangxiang,flag[1],p00,p01,tempf1,tempp1,Nfp,addfp);<br/> <br/> if((dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+2)%3],p01))<br/> &&(dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p01)))<br/> DianzaiXY(j,face2[j],flag[0],fangxiang,flag[0],p00,p01,tempf1,tempp1,Nfp,addfp);<br/> <br/> if((dianZaiXianDuanShang(p0[flag[0]],p0[(flag[0]+1)%3],p00))<br/> &&(!dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p00))<br/> &&(dianZaiXianDuanShang(p0[(flag[0]+1)%3],p0[(flag[0]+2)%3],p01)))<br/> DianzaiZX(j,face2[j],flag[0],fangxiang,flag[1],p00,p01,tempf1,tempp1,Nfp,addfp);<br/> for (i=0;i<Lface2;i++)<br/> { <br/> <br/> if(tempf1[i].p[0]==-1)<br/> tempf1[i]=face2[i];<br/> }<br/> for (i=0;i<Lpoint2;i++)<br/> {<br/> if(tempp1[i].x==-1)<br/> tempp1[i]=point2[i];<br/> }<br/> <br/> delete []face2;<br/> delete []point2;<br/> face2=NULL;<br/> point2=NULL;<br/> Lpoint2+=addfp[1];<br/> Lface2+=addfp[0];<br/> Nfp[0]=Lface2;<br/> Nfp[1]=Lpoint2;<br/> <br/> face2=new mianbiao[Lface2];<br/> point2=new Point3[Lpoint2];<br/> for (i=0;i<Lface2;i++)<br/> {<br/> face2[i]=tempf1[i];<br/> <br/> }<br/> for (i=0;i<Lpoint2;i++)<br/> {<br/> point2[i]=tempp1[i];<br/> }<br/> <br/> delete []tempp1;<br/> delete []tempf1;<br/> <br/> }<br/>// else<br/>// {<br/>// tempp1=new Point3[Lpoint2];<br/>// tempf1=new mianbiao[Lface2];<br/>// }<br/> <br/> <br/> }<br/> <br/><br/>} <br/> <br/> fprintf(fpf1,"%d\n %d\n",Lpoint2,Lface2);<br/><br/> for (i=0;i<Lface2;i++)<br/> {<br/> fprintf(fpf,"%d\n",i);<br/> fprintf(fpf,"%d,%d,%d\n",face2[i].p[0],face2[i].p[1],face2[i].p[2]);<br/> }<br/> <br/> for (i=0;i<Lpoint2;i++)<br/> {<br/> fprintf(fpp,"%d\n",i);<br/> fprintf(fpp,"%f\n %f\n %f\n",point2[i].x,point2[i].y,point2[i].z);<br/> }<br/> delete []face1;<br/> delete []point1; <br/> delete []face2;<br/> delete []point2;<br/> face1=NULL;<br/> face2=NULL;<br/> point1=NULL;<br/> point2=NULL;<br/> fclose(fpf1);<br/> fclose(fpp1); <br/> fclose(fpp);<br/> fclose(fpf);<br/> _CrtDumpMemoryLeaks(); <br/> <br/>}<br/>