// 180430 // crv2sfparadata,wireparadata added // output3h,output3 chanded // 180426 readdataC,writedataC changed // 180420 newly rewrited // 170616 crvsfparadata changed ( num of devision ) int output3(short head, const char *wa,const char *var, const char *fname,double out[][3]){ int din[DsizeS][2],i,j,ctr; double tmpd[3]; FILE *fp; fp=fopen(fname,wa); if (fp == NULL) { printf("cannot open\n"); return -1; } dataindexd3(2, out,din); if(head==1){ fprintf(fp,"%s//\n",var); } for(i=1; i<=length2i(din); i++){ fprintf(fp,"start//\n"); fprintf(fp,"["); ctr=0; for(j=din[i][0]; j<=din[i][1]; j++){ pull3(j,out,tmpd); fprintf(fp,"[ %7.5f, %7.5f, %7.5f]",tmpd[0],tmpd[1],tmpd[2]); ctr++; if(ctr==5){ fprintf(fp,"]//\n"); ctr=0; if(j1){ //180613from appendd3(0, din1[2][0],din1[2][1],out,out1); }//180613to dataindexd3(2, out1,din2); for(i=1; i<=length2i(din2); i++){ fprintf(fp,"start//\n"); fprintf(fp,"["); ctr=0; //181105 for(j=din2[i][0]; j<=din2[i][1]; j++){ pull3(j,out1,tmpd); fprintf(fp,"[ %7.5f, %7.5f, %7.5f]",tmpd[0],tmpd[1],tmpd[2]); ctr++; if(ctr==5){ if(jInf-1){ pt2[0]=pt3[0]; pt2[1]=pt3[1]; } else{ pt2[0]=-pt3[0]*sin(PHI)+pt3[1]*cos(PHI); pt2[1]=-pt3[0]*cos(PHI)*cos(THETA)-pt3[1]*sin(PHI)*cos(THETA)+pt3[2]*sin(THETA); } } double zparapt(double p[3]){ double x=p[0], y=p[1], z=p[2], out; out=x*cos(PHI)*sin(THETA)+y*sin(PHI)*sin(THETA)+z*cos(THETA); return out; } int projpara(double p3[][3], double p2[][2]){ double pt3[3], pt2[2]; int i, nall, nall2; nall=length3(p3); p2[0][0]=0; for(i=1; i<=nall; i++){ pull3(i,p3,pt3); parapt(pt3,pt2); nall2=addptd2(p2,pt2); } return nall2; } double invparapt(double ph, double fh[][2], double fk[][3],double out[3]){ int n, nfk=length3(fk), nph=length2(fh); double s0=ph-n, ak[3], bk[3], ah[2], bh[2], pk[3]; if(nfk>2){ n=trunc(ph); s0=ph-n; if(ph>nph-Eps){ out[0]=fk[nfk][0]; out[1]=fk[nfk][1]; out[2]=fk[nfk][2]; return nph; } } else{ n=1; s0=ph-1; } ak[0]=fk[n][0]; ak[1]=fk[n][1]; ak[2]=fk[n][2]; bk[0]=fk[n+1][0]; bk[1]=fk[n+1][1]; bk[2]=fk[n+1][2]; ah[0]=fh[n][0]; ah[1]=fh[n][1]; bh[0]=fh[n+1][0]; bh[1]=fh[n+1][1]; out[0]=(1-s0)*ak[0]+s0*bk[0]; out[1]=(1-s0)*ak[1]+s0*bk[1]; out[2]=(1-s0)*ak[2]+s0*bk[2]; return n+s0; } void surfcurve(short ch,double crv[][2], double pdata[][3]){ double pd2[2], pt[3]; int i; pdata[0][0]=0; for(i=1; i<=length2(crv); i++){ pull2(i,crv,pd2); surffun(ch,pd2[0],pd2[1],pt); addptd3(pdata,pt); } } double evlpfun(short ch, double u, double v){ double u1,u2,v1,v2,pt1[3],pt2[3],pt2d1[2],pt2d2[2],dxu,dyu,dxv,dyv; double du=(Urng[1]-Urng[0])/Mdv, dv=(Vrng[1]-Vrng[0])/Ndv; double eps=0.00001; u1=u-eps/2; u2=u+eps/2; if(u1Urng[1]){u2=Urng[1];} surffun(ch,u1,v,pt1); parapt(pt1,pt2d1); surffun(ch,u2,v,pt2); parapt(pt2,pt2d2); dxu=(pt2d2[0]-pt2d1[0])/(u2-u1); dyu=(pt2d2[1]-pt2d1[1])/(u2-u1); v1=v-eps/2; v2=v+eps/2; if(v1Vrng[1]){v2=Vrng[1];} surffun(ch,u,v1,pt1); parapt(pt1,pt2d1); surffun(ch,u,v2,pt2); parapt(pt2,pt2d2); dxv=(pt2d2[0]-pt2d1[0])/(v2-v1); dyv=(pt2d2[1]-pt2d1[1])/(v2-v1); return dxu*dyv-dxv*dyu; }; int envelopedata(short ch, double out[][2]){ int i, j, k, ctrq=0,ctr, nall; double uval1,uval2,vval1,vval2,eval11,eval12,eval21,eval22; double pl[5][2], vl[5], ql[11][2], out2[DsizeM][2]; double du=(Urng[1]-Urng[0])/Mdv; double dv=(Vrng[1]-Vrng[0])/Ndv; //180427 ctr=0; for (j = 0; j < Ndv; j++) { vval1=Vrng[0]+j*dv; vval2=Vrng[0]+(j+1)*dv; uval1=Urng[0]; eval11=evlpfun(ch,uval1,vval1); eval12=evlpfun(ch,uval1,vval2); for (i = 0; i < Mdv; i++) { uval2=Urng[0]+(i+1)*du; eval21=evlpfun(ch,uval2,vval1); eval22=evlpfun(ch,uval2,vval2); pl[0][0]=uval1; pl[0][1]=vval1; vl[0]=eval11; pl[1][0]=uval2; pl[1][1]=vval1; vl[1]=eval21; pl[2][0]=uval2; pl[2][1]=vval2; vl[2]=eval22; pl[3][0]=uval1; pl[3][1]=vval2; vl[3]=eval12; pl[4][0]=uval1; pl[4][1]=vval1; vl[4]=eval11; ctrq=0; for (k = 0; k < 4; k++) { if(fabs(vl[k])<=Eps){ ql[ctrq][0]=pl[k][0]; ql[ctrq][1]=pl[k][1]; ctrq++; } else if(vl[k]>Eps){ if(vl[k+1]< -Eps){ ql[ctrq][0]=1/(vl[k]-vl[k+1])*(-vl[k+1]*pl[k][0]+vl[k]*pl[k+1][0]); ql[ctrq][1]=1/(vl[k]-vl[k+1])*(-vl[k+1]*pl[k][1]+vl[k]*pl[k+1][1]); ctrq++; } } else{ if(vl[k+1]>Eps){ ql[ctrq][0]=1/(-vl[k]+vl[k+1])*(vl[k+1]*pl[k][0]-vl[k]*pl[k+1][0]); ql[ctrq][1]=1/(-vl[k]+vl[k+1])*(vl[k+1]*pl[k][1]-vl[k]*pl[k+1][1]); ctrq++; } } } uval1=uval2; eval11=eval21; eval12=eval22; if(ctrq==2){ if(ctr>0){ ctr++; out[ctr][0]=Inf; out[ctr][1]=2; // 2 <- 0 ? } ctr++; out[ctr][0]=ql[0][0]; out[ctr][1]=ql[0][1]; ctr++; out[ctr][0]=ql[1][0]; out[ctr][1]=ql[1][1]; } } } out[0][0]=ctr; if(ctr>0){ nall=connectseg(out, Eps, out2); out[0][0]=0; nall=appendd2(2,1,nall,out2,out); } return nall; } int cuspsplitpara(short ch,double pdata[][2], double outkL[][3]){ int i, j, ng, n, nd, ndd, ndrop, is, ncusp=0, ncusppt,st, en, npk,nph, cflg; int cusp[DsizeM], cuspflg; int ntmp,ntmp1,ntmp2, ntmpnum, noutkL=0, noutk=0, nout=0; int din[DsizeM][2], dind[DsizeM][2], drop[DsizeL], tmpnum[DsizeM]; double eps=pow(10.0,-6.0); double vtmp, vtmp1,kaku,cva, ps[2], pe[2],v1[2],v2[2]; double tmp[2],tmp1[2],tmp2[2],pt3d[3],pt2d[2],q3d[3],q2d[2]; double ptk[DsizeM][3],pth[DsizeM][2], outk[DsizeM][3]; double ptxy[DsizeM][2],tmp3d[DsizeM][3]; double tmp3d1[DsizeM][3],tmp3d2[DsizeM][3],tmp2d[DsizeM][2]; outkL[0][0]=0; cusp[0]=0; Cuspsplitpt[0][0]=0; nd=dataindexd2(0,pdata,din); for(ng=1; ng<=nd; ng++){ ptk[0][0]=0; pth[0][0]=0; st=din[ng][0]; en=din[ng][1]; ptxy[0][0]=0; n=appendd2(0,st,en,pdata,ptxy); npk=0; nph=0; for(i=1; i<=en-st+1; i++){ pull2(st+i-1,pdata,tmp); surffun(ch,tmp[0],tmp[1],pt3d); parapt(pt3d,pt2d); if(i==1){ npk=addptd3(ptk,pt3d); nph=addptd2(pth,pt2d); } else{ pull2(nph,pth,tmp1); if(dist(2,tmp1,pt2d)>eps){ npk=addptd3(ptk,pt3d); nph=addptd2(pth,pt2d); } } } if(nph==0){ npk=0; return 0; }; pull2(1,pth,ps); pull2(nph,pth,pe); cflg=0; if(dist(2,ps,pe)90){ cuspflg=1; break; } pull2(j,pth,q2d); if(dist(2,pt2d,q2d)>Eps1){ break; } v1[0]=q2d[0]-pth[j-1][0]; v1[1]=q2d[1]-pth[j-1][1]; v2[0]=pth[j+1][0]-q2d[0]; v2[1]=pth[j+1][1]-q2d[1]; vtmp=v1[0]*v2[0]+v1[1]*v2[1]; tmp[0]=0; tmp[1]=0; vtmp=vtmp/(dist(2,v1,tmp)*dist(2,v2,tmp)); vtmp=acos(vtmp)*180/M_PI; if(v1[0]*v2[1]-v1[1]*v2[0]<0){ vtmp=-vtmp; } kaku=kaku+vtmp; } if(cuspflg==1){ ntmp=trunc((i+j)*0.5); i=j; if(cusp[0]==0){ ncusp=appendi1(ntmp,cusp); } else{ ncusp=appendi1(ntmp,cusp); } } } } if(cflg==0){ ncusp=prependi1(1,cusp); ncusp=appendi1(nph,cusp); } else if(ncusp==0){ ncusp=prependi1(1,cusp); ncusp=appendi1(nph,cusp); } else if(cusp[1]==1){ ncusp=appendi1(nph,cusp); } else{ ntmp=cusp[1]; ntmp1=nph; tmp2d[0][0]=0; n=appendd2(0,ntmp,ntmp1,pth,tmp2d); n=appendd2(0,2,ntmp,pth,tmp2d); pth[0][0]=0; nph=appendd2(0,1,n,tmp2d,pth); tmp3d[0][0]=0; n=appendd3(0,ntmp,ntmp1,ptk,tmp3d); n=appendd3(0,2,ntmp,ptk,tmp3d); ptk[0][0]=0; npk=appendd3(0,1,n,tmp3d,ptk); for(i=1; i<=cusp[0]; i++){ cusp[i]=cusp[i]-ntmp+1; } ncusp=appendi1(nph,cusp); } if(ncusp==2){ pull2(nph,pth,tmp); if(npk>=2){ ncusppt=addptd2(Cuspsplitpt,tmp); noutkL=appendd3(2,1,npk,ptk,outkL); } continue; } outk[0][0]=0; is=1; for(i=1; i<=ncusp-1; i++){ ntmp1=cusp[is]; ntmp2=cusp[i+1]; pull2(ntmp1,pth,tmp1); pull2(ntmp2,pth,tmp2); if(dist(2,tmp1,tmp2)>Eps1){ tmp3d[0][0]=0; n=appendd3(0,ntmp1,ntmp2,ptk,tmp3d); noutk=appendd3(2,1,n,tmp3d,outk); ncusppt=addptd2(Cuspsplitpt,tmp2); is=i+1; } } noutkL=appendd3(2,1,noutk,outk,outkL); } n=projpara(outkL,tmp2d); ndrop=dropnumlistcrv(tmp2d,Eps1*0.5,drop); nd=dataindexd3(2,outkL,din); ndd=dataindexi1(drop,dind); tmp3d2[0][0]=0; ntmp2=0; for(i=1; i<=nd; i++){ tmp3d[0][0]=0; ntmp=0; ntmp=appendd3(0,din[i][0],din[i][1],outkL,tmp3d); tmpnum[0]=0; ntmpnum=0; for(j=dind[i][0]; j<=dind[i][1]; j++){ ntmpnum=appendi1(drop[j],tmpnum); } tmp3d1[0][0]=0; ntmp1=0; for(j=1; j<=ntmpnum; j++){ pt3d[0]=tmp3d[tmpnum[j]][0]; pt3d[1]=tmp3d[tmpnum[j]][1]; pt3d[2]=tmp3d[tmpnum[j]][2]; ntmp1=addptd3(tmp3d1,pt3d); } if(ntmp1>0){ ntmp2=appendd3(2,1,ntmp1,tmp3d1,tmp3d2); } } outkL[0][0]=0; noutkL=0; noutkL=appendd3(0,1,ntmp2,tmp3d2,outkL); return noutkL; } int makexybdy(short ch,double ehL[][2]){ int i, nehL, ntmpd2; double ptd3[3],ptd2[2],tmpd2[DsizeM][2],du,dv; ehL[0][0]=0; nehL=0; du=(Urng[1]-Urng[0])/Mdv; dv=(Vrng[1]-Vrng[0])/Ndv; if(DrawE==1){ tmpd2[0][0]=0; ntmpd2=0; for(i=0; i<=Ndv; i++){ surffun(ch,Urng[1],Vrng[0]+i*dv,ptd3); ntmpd2=push2(ptd3[0],ptd3[1],tmpd2); } nehL=appendd2(2,1,ntmpd2,tmpd2,ehL); } if(DrawN==1){ tmpd2[0][0]=0; ntmpd2=0; for(i=0; i<=Mdv; i++){ surffun(ch,Urng[0]+i*du,Vrng[1],ptd3); ntmpd2=push2(ptd3[0],ptd3[1],tmpd2); } nehL=appendd2(2,1,ntmpd2,tmpd2,ehL); } if(DrawW==1){ tmpd2[0][0]=0; ntmpd2=0; for(i=0; i<=Ndv; i++){ surffun(ch,Urng[0],Vrng[0]+i*dv,ptd3); ntmpd2=push2(ptd3[0],ptd3[1],tmpd2); } nehL=appendd2(2,1,ntmpd2,tmpd2,ehL); } if(DrawS==1){ tmpd2[0][0]=0; ntmpd2=0; for(i=0; i<=Mdv; i++){ surffun(ch,Urng[0]+i*du,Vrng[0],ptd3); ntmpd2=push2(ptd3[0],ptd3[1],tmpd2); } nehL=appendd2(2,1,ntmpd2,tmpd2,ehL); } return nehL; } void partitionseg(double fig[][2],double gL[][2], int ns, double parL[]){ int ii,jj,kk,n,din[DsizeM][2]; double eps0=pow(10,-5.0),tmpd4[4], tmpd6[6],tmp,tmp2; double p[2], q[2], pd3[3], ans[4], tmp1d1[DsizeM], tmp2d1[DsizeM]; double other[DsizeM], g[DsizeM][2], kouL[DsizeS][4],kouL6[DsizeS][6]; if(ns>0){ dataindexd1(Otherpartition,din); other[0]=0; for(ii=din[ns][0]; ii<=din[ns][1]; ii++){ appendd1(Otherpartition[ii],other); } }else{ other[0]=0; } parL[0]=0; appendd1(1,parL); appendd1(length2(fig),parL); if(length1(other)>0){ for(ii=1; ii<=length1(other); ii++){ appendd1(other[ii],parL); } } dataindexd2(2,gL,din); for(n=fmax(ns,1); n<=din[0][0]; n++){ g[0][0]=0; appendd2(2,din[n][0],din[n][1],gL,g); intersectcurvesPp(fig,g,20,kouL6); kouL[0][0]=0; for(ii=1;ii<=length6(kouL6);ii++){ pull6(ii,kouL6,tmpd6); push4(tmpd6[0],tmpd6[1],tmpd6[2],tmpd6[3],kouL); } tmp1d1[0]=0;tmp2d1[0]=0; for(jj=1;jj<=length4(kouL);jj++){ pull4(jj,kouL,tmpd4); tmp=tmpd4[2]; if((tmp>1+Eps)&&(tmp1+Eps)&&(tmp0)&&(n>ns)&&(length1(tmp2d1)>0)){ dataindexd1(Otherpartition,din); tmp1d1[0]=0; for(jj=din[n][0];jj<=din[n][1];jj++){ appendd1(Otherpartition[jj],tmp1d1); } replacelistd1(n,Otherpartition,tmp2d1); } } simplesort(parL); tmp1d1[0]=0; for(ii=1;ii<=length1(parL);ii++){ appendd1(parL[ii],tmp1d1); } parL[0]=0; tmp2=-1; for(jj=1;jj<=length1(tmp1d1);jj++){ tmp=tmp1d1[jj]; if(fabs(tmp-tmp2)>Eps1){ appendd1(tmp,parL); tmp2=tmp; } } } double funpthiddenQ(short ch,double u, double v,double pa[3]){ double Vec[3]={sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA)}; double eps0=pow(10,-4.0)*(XMAX-XMIN)/10, pt[3], out; surffun(ch,u, v, pt); if((fabs(Vec[1])>eps0)||(fabs(Vec[0])>eps0)){ out=(Vec[1]*(pt[0]-pa[0])-Vec[0]*(pt[1]-pa[1])); } else{ out=pt[0]-pa[0]; } return out; } int pthiddenQ(short ch,double pta[3], int uveq,double out[4]){ int i, j, k; double Vec[3]={sin(THETA)*cos(PHI),sin(THETA)*sin(PHI),cos(THETA)}; double v1,v2,v3; double du=(Urng[1]-Urng[0])/Mdv, dv=(Vrng[1]-Vrng[0])/Ndv; double uval1,uval2,vval1,vval2,eval11,eval12,eval21,eval22; double pl[5][2], vl[5], ql[11][2],p1[2],p2[2],m1,m2; double ptuv[2], puv1[2], puv2[2],p1d3[3], p2d3[3], ptd3[3]; double tmpd1, tmpd2[2],tmpd3[3],tmp1d3[3]; // Out=1 : hidden // SL : List of segments near PtA+Vec out[3]=-Inf; for(j=0; j<=Ndv-1; j++){ vval1=Vrng[0]+j*dv; vval2=Vrng[0]+(j+1)*dv; uval1=Urng[0]; eval11=funpthiddenQ(ch,uval1,vval1,pta); eval12=funpthiddenQ(ch,uval1,vval2,pta); for(i=0; i<=Mdv-1; i++){ uval2=Urng[0]+(i+1)*du; eval21=funpthiddenQ(ch,uval2,vval1,pta); eval22=funpthiddenQ(ch,uval2,vval2,pta); pl[0][0]=uval1; pl[0][1]=vval1; vl[0]=eval11; pl[1][0]=uval2; pl[1][1]=vval1; vl[1]=eval21; pl[2][0]=uval2; pl[2][1]=vval2; vl[2]=eval22; pl[3][0]=uval1; pl[3][1]=vval2; vl[3]=eval12; pl[4][0]=uval1; pl[4][1]=vval1; vl[4]=eval11; ql[0][0]=0; for(k=0; k<=3; k++){ pull2(k,pl,p1); pull2(k+1,pl,p2); m1=vl[k]; m2=vl[k+1]; if(fabs(m1)0)&&(m2>0)){ continue; } if((m1< 0)&&(m2< 0)){ continue; } tmpd2[0]=1/(m1-m2)*(-m2*p1[0]+m1*p2[0]); tmpd2[1]=1/(m1-m2)*(-m2*p1[1]+m1*p2[1]); addptd2(ql, tmpd2); } uval1=uval2; eval11=eval21; eval12=eval22; if(length2(ql)==2){ puv1[0]=ql[1][0]; puv1[1]=ql[1][1]; puv2[0]=ql[2][0]; puv2[1]=ql[2][1]; surffun(ch,puv1[0],puv1[1],p1d3); surffun(ch,puv2[0],puv2[1],p2d3); v1=Vec[0]; v2=Vec[1]; v3=Vec[2]; if(fabs(v1)>Eps){ m1=pta[2]+v3/v1*(p1d3[0]-pta[0])-p1d3[2]; m2=pta[2]+v3/v1*(p2d3[0]-pta[0])-p2d3[2]; }else if(fabs(v2)>Eps){ m1=pta[2]+v3/v2*(p1d3[1]-pta[1])-p1d3[2]; m2=pta[2]+v3/v2*(p2d3[1]-pta[1])-p2d3[2]; }else{ m1=pta[1]-p1d3[1]; m2=pta[1]-p2d3[2]; } if(m1*m2>= 0){ if(((m1>0) && (m2>0)) || ((m1< 0) && (m2< 0))){ continue; } if(m1==0){ ptd3[0]=p1d3[0]; ptd3[1]=p1d3[1]; ptd3[2]=p1d3[2]; ptuv[0]=puv1[0]; ptuv[1]=puv1[1]; }else{ ptd3[0]=p2d3[0]; ptd3[1]=p2d3[1]; ptd3[2]=p2d3[2]; ptuv[0]=puv2[0]; ptuv[1]=puv2[1]; } }else{ ptd3[0]=1/(m1-m2)*(-m2*p1d3[0]+m1*p2d3[0]); ptd3[1]=1/(m1-m2)*(-m2*p1d3[1]+m1*p2d3[1]); ptd3[2]=1/(m1-m2)*(-m2*p1d3[2]+m1*p2d3[2]); ptuv[0]=1/(m1-m2)*(-m2*puv1[0]+m1*puv2[0]); ptuv[1]=1/(m1-m2)*(-m2*puv1[1]+m1*puv2[1]); } tmpd3[0]=ptd3[0]-pta[0]; tmpd3[1]=ptd3[1]-pta[1]; tmpd3[2]=ptd3[2]-pta[2]; crossprod(3,tmpd3,Vec, tmp1d3); if(norm(3,tmp1d3)0){ copyd(0,2,ptd3,out); out[3]=tmpd1; return 1; }else{ if(tmpd1>out[3]){ copyd(0,2,ptd3,out); out[3]=tmpd1; } } } } } } return 0; } int nohiddenpara2(short ch,double par[], double fk[][3], int uveq, double figkL[][3]){ double eps0=pow(10,-4.0), s, p1[2], p2[2], q[2],tmpd1, tmpd2[2],tmp1,tmp2; double paL[DsizeM], fh[DsizeM][2], pta[3], ptap[2], vec[3]; double figL[DsizeM][2], tmpmd2[DsizeM][2], tmpmd3[DsizeM][3]; double tmp1d2[2], tmp2d2[2], tmp3d2[2], tmpd3[3],tmpd4[4]; double pd2[2], qd2[2], pd3[3], qd3[3], sp, sq, tp, tq, dtmp, dtmp1, dtmp2; int flg; int ncusp=floor(Cusppt[0][0]+0.5), seL[DsizeM]; int i,j,n, nfh, nfk, cspflg,tmpi1[DsizeM]; vec[0]=sin(THETA)*cos(PHI); vec[1]=sin(THETA)*sin(PHI); vec[2]=cos(THETA); nfk=length3(fk); nfh=projpara(fk, fh); pull2(1,fh,p1); pull2(nfh,fh,p2); cspflg=1; for(i=1; i<=ncusp; i++){ pull2(i, Cusppt, tmpd2); if(dist(2,tmpd2,p1)Eps){ add1(paL,tmp1); tmp2=tmp1; } } tmp1=paL[length1(paL)]; tmp2=par[length1(par)]; if(fabs(tmp1-tmp2)Eps1){ nearestptpt(pd2,fh,tmpd4); dtmp1=tmpd4[2]; nearestptpt(qd2,fh,tmpd4); dtmp2=tmpd4[2]; partcrv(dtmp1,dtmp2,fh,tmpmd2); appendd2(2,1,length2(tmpmd2),tmpmd2,figL); tp=invparapt(sp,fh,fk,tmpd3); tq=invparapt(sq,fh,fk,tmpd3); partcrv3(tp,tq,fk,tmpmd3); appendd3(2,1,length3(tmpmd3), tmpmd3, figkL); }//180616to else{//180705from if(fabs(sp-sq)>1){ appendd2(2,1,length2(fh),fh,figL); appendd3(2,1,length3(fk),fk,figkL); } }//180705to } tmpi1[0]=0; for(i=1; i<=length1(paL)-1; i++){ if(memberi(i,seL)==0){ appendi1(i,tmpi1); } } copyi(0,tmpi1[0],tmpi1,seL); seL[0]=tmpi1[0]; Hiddendata[0][0]=0; for(i=1; i<=seL[0]; i++){ dtmp=paL[seL[i]]; pointoncurve(dtmp,fh,Eps,tmp1d2); dtmp=paL[seL[i]+1]; pointoncurve(dtmp,fh,Eps, tmp2d2); if(i==1){ copyd(0,1,tmp1d2,pd2); sp=paL[seL[i]]; copyd(0,1,tmp2d2,qd2); sq=paL[seL[i]+1]; } else{ if(memberi(seL[i]-1,seL)==1){ copyd(0,1,tmp2d2,qd2); sq=paL[seL[i]+1]; } else{ tp=invparapt(sp,fh,fk,tmpd3); tq=invparapt(sq,fh,fk,tmpd3); partcrv3(tp,tq,fk,tmpmd3); appendd3(2,1,length3(tmpmd3),tmpmd3,Hiddendata); copyd(0,1,tmp1d2,pd2); sp=paL[seL[i]]; copyd(0,1,tmp2d2,qd2); sq=paL[seL[i]+1]; } } } if(seL[0]>0){ if(dist(2,pd2,qd2)>Eps1){ tp=invparapt(sp,fh,fk,tmpd3); tq=invparapt(sq,fh,fk,tmpd3); partcrv3(tp,tq,fk,tmpmd3); appendd3(2,1,length3(tmpmd3),tmpmd3,Hiddendata); } else{ appendd3(2,1,length3(fk),fk,Hiddendata); } } return length3(figkL); } void borderparadata(short ch,double fkL[][3], double fsL[][3]){ double ekL[DsizeL][3], fall[DsizeL][2], fbdxy[DsizeL][2]; double tmpd3[DsizeM][3], tmpd2[DsizeM][2], p[2], p3[3]; double figkL[DsizeM][3], du, dv; int i, j; int din[DsizeS][2],din2[DsizeM][2]; int ntmp, ntmpd3,ntmpd2; double par[DsizeM]; du=(Urng[1]-Urng[0])/Mdv; dv=(Vrng[1]-Vrng[0])/Ndv; fsL[0][0]=0; ekL[0][0]=0;; if(DrawE==1){ tmpd2[0][0]=0;; for(j=0; j<=Ndv; j++){ add2(tmpd2, Urng[1], Vrng[0]+j*dv); } surfcurve(ch,tmpd2,tmpd3); appendd3(2,1,length3(tmpd3),tmpd3,ekL); } if(DrawN==1){ tmpd2[0][0]=0; for(j=0; j<=Mdv; j++){ add2(tmpd2, Urng[0]+j*du, Vrng[1]); } surfcurve(ch,tmpd2,tmpd3); appendd3(2,1,length3(tmpd3),tmpd3,ekL); } if(DrawW==1){ tmpd2[0][0]=0; for(j=0; j<=Ndv; j++){ add2(tmpd2, Urng[0], Vrng[0]+j*dv); } surfcurve(ch,tmpd2,tmpd3); appendd3(2,1,length3(tmpd3),tmpd3,ekL); } if(DrawS==1){ tmpd2[0][0]=0; for(j=0; j<=Mdv; j++){ add2(tmpd2, Urng[0]+j*du, Vrng[0]); } surfcurve(ch,tmpd2,tmpd3); appendd3(2,1,length3(tmpd3),tmpd3,ekL); } if(length3(ekL)>0){ appendd3(2,1,length3(ekL),ekL,fkL); } projpara(fkL,fall); makexybdy(ch,fbdxy); dataindexd2(2,fall,din); Borderpt[0][0]=0; Otherpartition[0]=0; for(i=1; i<=length2i(din)-1; i++){ Otherpartition[i]=Inf; Otherpartition[0]++; } Borderhiddendata[0][0]=0; dataindexd3(2,fkL,din2); for(i=1; i<= length2i(din2); i++){ tmpd3[0][0]=0; appendd3(0,din2[i][0],din2[i][1],fkL,tmpd3); projpara(tmpd3,tmpd2); partitionseg(tmpd2,fall,0,par); /* if(length1(par)>2){ ntmp=length1(par)-1; tmpd2[0][0]=0; for(j=2; j<=ntmp; j++){ pull2(j,Partitionpt,p); addptd2(tmpd2, p); } appendd2(0, 1,length2(tmpd2),tmpd2,Borderpt); } */ tmpd3[0][0]=0; appendd3(0,din2[i][0],din2[i][1],fkL,tmpd3); // for(j=din2[i][0]; j<=din2[i][1]; j++){ // pull3(j,fkL,p3); // addptd3(tmpd3,p3); // } nohiddenpara2(ch,par,tmpd3,1, figkL); if(length3(figkL)>0){ appendd3(2,1,length3(figkL),figkL, fsL); } ntmp=length3(Hiddendata); if(ntmp>0){ appendd3(2,1,ntmp,Hiddendata,Borderhiddendata); } } } int dropnumlistcrv3(double qd[][3], double eps1, int out[]){ int i,j,k,nout,nall=length3(qd), nd, se, en, npd, nptL; int din[DsizeM][2],ptL[DsizeL]; double eps=pow(10.0,-6.0), pd[DsizeL][3], p[3], tmp2d[3]; out[0]=0; nout=0; nd=dataindexd3(2,qd,din); for(j=1; j<=nd; j++){ se=din[j][0]; en=din[j][1]; pd[0][0]=0; npd=0; npd=appendd3(0,se,en,qd,pd); ptL[0]=0; nptL=0; nptL=appendi1(1,ptL); pull3(1,pd,p); for(k=2; k<=npd-1; k++){ pull3(k,pd,tmp2d); if(dist(3,p,tmp2d)>eps1){ nptL=appendi1(k,ptL); pull3(k,pd,p); } } pull3(npd-1,pd,p); pull3(npd,pd,tmp2d); if(dist(3,p,tmp2d)>eps){ // eps -> eps1 ? nptL=appendi1(npd,ptL); } if(nout>0){ nout=appendi1(Infint,out); } for(i=1; i<=nptL; i++){ nout=appendi1(ptL[i],out); } } out[0]=nout; return nout; } void sfbdparadata(short ch,double outd3[][3]){ double pdatad3[DsizeL][3]; double pts[DsizeL][2],out3md[DsizeL][2],eps; double tmpmd[DsizeL][2],tmp1md[DsizeL][2],tmp2md[DsizeL][2],tmp3md[DsizeL][2]; double tmpd[2],tmp1d[2],tmpd3[3],tmp1d3[3],tmp2d3[3],tmp2md3[DsizeL][3]; int din[DsizeS][2],nlist[DsizeL]; int ii,jj,kk,n,nall,flg; envelopedata(ch, out3md); //180517from tmp3md[0][0]=0; pts[0][0]=0; dataindexd2(2,out3md,din); for(jj=1;jj<=length2i(din);jj++){ tmp1md[0][0]=0; tmp2md3[0][0]=0; for(kk=din[jj][0];kk<=din[jj][1];kk++){ pull2(kk,out3md,tmpd); addptd2(tmp1md,tmpd); surffun(ch,tmpd[0],tmpd[1],tmpd3); addptd3(tmp2md3,tmpd3); } dropnumlistcrv3(tmp2md3,Eps1,nlist); if(nlist[0]==1){ pull2(nlist[1],tmp1md,tmpd); addptd2(pts,tmpd); }else{ tmpmd[0][0]=0; for(kk=1;kk<=nlist[0];kk++){ pull2(nlist[kk],tmp1md,tmpd); addptd2(tmpmd,tmpd); } if(length2(tmpmd)>0){ appendd2(2,1,length2(tmpmd),tmpmd,tmp3md); } } } out3md[0][0]=0; appendd2(0,1,length2(tmp3md),tmp3md,out3md); tmp3md[0][0]=0; appendd2(0,1,length2(pts),pts,tmp3md); pts[0][0]=0; for(ii=1;ii<=length2(tmp3md);ii++){ pull2(ii,tmp3md,tmpd); surffun(ch,tmpd[0],tmpd[1],tmp1d3); flg=0; for(jj=1;jj<=length2(pts);jj++){ pull2(jj,pts,tmpd); surffun(ch,tmpd[0],tmpd[1],tmp2d3); if(dist(3,tmp1d3,tmp2d3)dist(3,tmp1d3,tmpd3)){ eps=dist(3,tmp1d3,tmpd3); } } pull2(1,tmp2md,tmpd); surffun(ch,tmpd[0],tmpd[1],tmpd3); if(dist(3,tmp1d3,tmpd3)0){ gl[0][0]=0; appendd3(2,1,1,qlist,gl); removed3(1,qlist); for(ii=1;ii<=length3(qlist);ii++){ flg=0; pull3(ii,qlist,p1); for(jj=1;jj<=length3(gl);jj++){ pull3(jj,gl,p2); if(dist(3,p1,p2)Eps)||(fabs(vec[0])>Eps)){ out=(vec[1]*(pt[0]-pa[0])-vec[0]*(pt[1]-pa[1])); }else{ out=pt[0]; } return out; } void meetpoints(short ch,double pta[3], double ptb[3], int uveq,double out[][3]){ int i, j, k,flg,din[DsizeS][2]; double vec[3],v1,v2,v3; double du=(Urng[1]-Urng[0])/Mdv, dv=(Vrng[1]-Vrng[0])/Ndv; double uval1,uval2,vval1,vval2,eval11,eval12,eval21,eval22; double pl[5][2], vl[5], ql[11][2],p1[2],p2[2],m1,m2; double ptuv[2], puv1[2], puv2[2],p1d3[3], p2d3[3], ptd3[3]; double tmpd1, tmpd2[2],tmpd3[3],tmp1d3[3],tmp1md3[DsizeS][3]; vec[0]=ptb[0]-pta[0]; vec[1]=ptb[1]-pta[1]; vec[2]=ptb[2]-pta[2]; out[0][0]=0; if(norm(3,vec)0)&&(m2>0)){ continue; } if((m1< 0)&&(m2< 0)){ continue; } tmpd2[0]=1/(m1-m2)*(-m2*p1[0]+m1*p2[0]); tmpd2[1]=1/(m1-m2)*(-m2*p1[1]+m1*p2[1]); addptd2(ql, tmpd2); } uval1=uval2; eval11=eval21; eval12=eval22; if(length2(ql)==2){ puv1[0]=ql[1][0]; puv1[1]=ql[1][1]; puv2[0]=ql[2][0]; puv2[1]=ql[2][1]; surffun(ch,puv1[0],puv1[1],p1d3); surffun(ch,puv2[0],puv2[1],p2d3); v1=vec[0]; v2=vec[1]; v3=vec[2]; if(fabs(v1)>Eps){ m1=pta[2]+v3/v1*(p1d3[0]-pta[0])-p1d3[2]; m2=pta[2]+v3/v1*(p2d3[0]-pta[0])-p2d3[2]; }else if(fabs(v2)>Eps){ m1=pta[2]+v3/v2*(p1d3[1]-pta[1])-p1d3[2]; m2=pta[2]+v3/v2*(p2d3[1]-pta[1])-p2d3[2]; }else{ m1=pta[1]-p1d3[1]; m2=pta[1]-p2d3[2]; } if(m1*m2>= 0){ if(((m1>0) && (m2>0)) || ((m1< 0) && (m2< 0))){ continue; } if(m1==0){ ptd3[0]=p1d3[0]; ptd3[1]=p1d3[1]; ptd3[2]=p1d3[2]; ptuv[0]=puv1[0]; ptuv[1]=puv1[1]; }else{ ptd3[0]=p2d3[0]; ptd3[1]=p2d3[1]; ptd3[2]=p2d3[2]; ptuv[0]=puv2[0]; ptuv[1]=puv2[1]; } }else{ ptd3[0]=1/(m1-m2)*(-m2*p1d3[0]+m1*p2d3[0]); ptd3[1]=1/(m1-m2)*(-m2*p1d3[1]+m1*p2d3[1]); ptd3[2]=1/(m1-m2)*(-m2*p1d3[2]+m1*p2d3[2]); ptuv[0]=1/(m1-m2)*(-m2*puv1[0]+m1*puv2[0]); ptuv[1]=1/(m1-m2)*(-m2*puv1[1]+m1*puv2[1]); } tmpd3[0]=ptd3[0]-pta[0]; tmpd3[1]=ptd3[1]-pta[1]; tmpd3[2]=ptd3[2]-pta[2]; crossprod(3,tmpd3,vec, tmp1d3); if(norm(3,tmp1d3)-Eps)&&(norm(3,tmpd3)Eps){ addptd3(out,ptd3); } } } } } } } tmp1md3[0][0]=0; groupnearpt3(out,tmp1md3); dataindexd3(2,tmp1md3,din); out[0][0]=0; for(i=1;i<=din[0][0];i++){ p1d3[0]=0; p1d3[1]=0; p1d3[2]=0; tmpd1=din[i][1]-din[i][0]+1; for(j=din[i][0];j<=din[i][1];j++){ p1d3[0]=p1d3[0]+tmp1md3[j][0]/tmpd1; p1d3[1]=p1d3[1]+tmp1md3[j][1]/tmpd1; p1d3[2]=p1d3[2]+tmp1md3[j][2]/tmpd1; } addptd3(out,p1d3); } } void crvsfparadata(short ch, double fkL[][3], double fbdkL[][3], int sepflg, double out[][3]){ double fbdy[DsizeL][2], fk[DsizeM][3],outh[DsizeL][3]; // double fkp[DsizeM][3], dt; double fh[DsizeM][2], parL[DsizeM], tmpmd3[DsizeM][3]; double ptL[DsizeM][3], tmpd2[2], tmpd3[3], tmp1d1, tmp2d1; double po[2]={0,0}, epsd2[2]={Eps1,1}, pa[3], pb[3]; int nbor=length3(Borderhiddendata); int ncshidden,din[DsizeM][2],din2[DsizeS][2]; int nn, i, j, k, n; projpara(fbdkL,fbdy); out[0][0]=0; outh[0][0]=0; dataindexd3(2,fkL,din); for(nn=1; nn<=length2i(din); nn++){ fk[0][0]=0; appendd3(0,din[nn][0],din[nn][1],fkL,fk); projpara(fk,fh); partitionseg(fh,fbdy,0,parL); if(sepflg==0){ //180522 for(i=1; i<=length3(fk)-1; i++){ pull3(i,fk,pa); pull3(i+1,fk,pb); meetpoints(ch,pa,pb,1,ptL); for(j=1; j<=length3(ptL); j++){ pull3(j,ptL,tmpd3); parapt(tmpd3,tmpd2); tmp1d1=paramoncurve(tmpd2,i,fh); tmp2d1=Inf; for(k=1; k<=length1(parL); k++){ tmp2d1=fmin(tmp2d1,fabs(parL[k]-tmp1d1)); } tmpd3[0]=pb[0]-pa[0]; tmpd3[1]=pb[1]-pa[1]; tmpd3[2]=pb[2]-pa[2]; if(tmp2d1*dist(3,tmpd3,po)>Eps1){ appendd1(tmp1d1,parL); } } simplesort(parL); } } nohiddenpara2(ch,parL,fk,1, tmpmd3); appendd3(2,1,length3(tmpmd3),tmpmd3,out); appendd3(2,1, length3(Hiddendata),Hiddendata,outh); } push3(Inf,3,0,out); //17.06.17 appendd3(0,1,length3(outh),outh,out); } void crv3onsfparadata(short ch,double fk[][3], double fbdyd3[][3], double out[][3]){ // 180609 debugged(renewed) double fbdy[DsizeL][2],fh[DsizeL][2],fks[DsizeL][3],fhs[DsizeL][2],par[DsizeM]; double tmpmd3[DsizeL][3],outh[DsizeL][3]; int i,j,din[DsizeS][2]; projpara(fbdyd3,fbdy); projpara(fk,fh); out[0][0]=0; outh[0][0]=0; dataindexd2(2,fh,din); for(i=1;i<=din[0][0];i++){ fhs[0][0]=0; fks[0][0]=0; appendd2(0,din[i][0],din[i][1],fh,fhs); appendd3(0,din[i][0],din[i][1],fk,fks); tmpmd3[0][0]=0; if(length2(fhs)>1){ partitionseg(fhs,fbdy,0, par); nohiddenpara2(ch,par,fks,1,tmpmd3); appendd3(2,1,length3(tmpmd3),tmpmd3,out); appendd3(2,1,length3(Hiddendata),Hiddendata,outh); }else{ appendd3(2,1,1,fks,out); } } connectseg3(out, Eps1,tmpmd3); out[0][0]=0; appendd3(0,1,length3(tmpmd3),tmpmd3,out); push3(Inf,3,0,out); //181025 connectseg3(outh, Eps1,tmpmd3); appendd3(0,1,length3(tmpmd3),tmpmd3,out);//181025 } void crv2onsfparadata(short ch,double fh[][2], double fbdyd3[][3], double out[][3]){ double fk[DsizeL][3]; surfcurve(ch,fh,fk); crv3onsfparadata(ch,fk,fbdyd3,out); } void wireparadata(short ch,double bdyk[][3], double udata[], double vdata[],const char *fname,const char *fnameh){ double crv2d[DsizeL][2],out[DsizeL][3],out1[DsizeL][3],out2[DsizeL][3]; double du=(Urng[1]-Urng[0])/Mdv; double dv=(Vrng[1]-Vrng[0])/Ndv; int i,j,din[DsizeS][2]; short allflg=1; if(strlen(fnameh)>0){ allflg=0; } char var0[]="wire3d"; char varh0[]="wireh3d"; char var[20]; char varh[20]; char varnow[40]; char varhnow[40]; varnow[0]='\0'; varhnow[0]='\0'; sprintf(var,"%s%d",var0,ch); sprintf(varh,"%s%d",varh0,ch); char dirfname[256]; char dirfnameh[256]; char varname[256]; char varnameh[256]; dirfname[0]='\0'; dirfnameh[0]='\0'; varname[0]='\0'; varnameh[0]='\0'; sprintf(varname,"%s%d",var,ch); sprintf(varnameh,"%s%d",varh,ch); sprintf(dirfname,"%s%s",Dirname,fname); sprintf(dirfnameh,"%s%s",Dirname,fnameh); if((length1(udata)==0)&&(allflg==0)){ out[0][0]=0; output3(1,"w",varname,dirfname,out); output3(1,"w",varnameh,dirfnameh,out); } for(i=1;i<=length1(udata);i++){ crv2d[0][0]=0; for(j=0; j<=Ndv; j++){ add2(crv2d, udata[i],Vrng[0]+j*dv); } if(allflg==1){out[0][0]=0;} crv2onsfparadata(ch,crv2d,bdyk,out); if(allflg==0){ dataindexd3(3,out,din); out1[0][0]=0; out2[0][0]=0; appendd3(0,din[1][0],din[1][1],out,out1); appendd3(0,din[2][0],din[2][1],out,out2); if(i==1){ output3(1,"w",varname,dirfname,out1); output3(1,"w",varnameh,dirfnameh,out2); }else{ output3(0,"a",varname,dirfname,out1); output3(0,"a",varnameh,dirfnameh,out2); } }else{ sprintf(varnow,"%s%s%d",var,"u",i); sprintf(varhnow,"%s%s%d",varh,"u",i); output3h("a",varnow, varhnow,fname,out); } } for(j=1;j<=length1(vdata);j++){ crv2d[0][0]=0; for(i=0; i<=Mdv; i++){ add2(crv2d, Urng[0]+i*du,vdata[j]); } if(allflg==1){out[0][0]=0;} crv2onsfparadata(ch,crv2d,bdyk,out); if(allflg==0){ dataindexd3(3,out,din); out1[0][0]=0; out2[0][0]=0; appendd3(0,din[1][0],din[1][1],out,out1); appendd3(0,din[2][0],din[2][1],out,out2); if(i0)&&(m2>0)){ continue; } if((m1< 0)&&(m2< 0)){ continue; } tmpd[0]=1/(m1-m2)*(-m2*p1[0]+m1*p2[0]); tmpd[1]=1/(m1-m2)*(-m2*p1[1]+m1*p2[1]); addptd2(ql, tmpd); } uval1=uval2; eval11=eval21; eval12=eval22; if(length2(ql)==2){ q11=ql[1][0];q12=ql[1][1];q21=ql[2][0];q22=ql[2][1]; a1=uval1;a3=uval2;b1=vval1;b3=vval2; if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){ if(((q21==b1)&&(q22==b1))||((q21==b3)&&(q22==b3))){ appendd2(2,1,2,ql,out2); }else{ appendd2(2,1,2,ql,out); } continue; } if(((q12==b1)&&(q22==b1))||((q12==b3)&&(q22==b3))){ if(((q11==a1)&&(q21==a1))||((q11==a3)&&(q21==a3))){ appendd2(2,1,2,ql,out2); }else{ appendd2(2,1,2,ql,out); } continue; } appendd2(2,1,2,ql,out); } } } dataindexd2(2,out2,din); while(length2i(din)>0){ ns=din[1][0];ne=din[1][1]; tmp1md[0][0]=0; appendd2(0,ns,ne,out2,tmp1md); appendd2(2,ns,ne,out2,out); removelistd2(2,1,out2); dataindexd2(2,out2,din); rmv[0]=0; for(j=1;j<=length2i(din);j++){ ns=din[j][0];ne=din[j][1]; tmp2md[0][0]=0; appendd2(0,ns,ne,out2,tmp2md); pull2(1,tmp2md,tmp2d);pull2(1,tmp1md,tmp1d); diff1=dist(2,tmp1d,tmp2d); pull2(2,tmp2md,tmp2d);pull2(2,tmp1md,tmp1d); diff1=diff1+dist(2,tmp1d,tmp2d); pull2(1,tmp2md,tmp2d);pull2(2,tmp1md,tmp1d); diff2=dist(2,tmp1d,tmp2d); pull2(2,tmp2md,tmp2d);pull2(1,tmp1md,tmp1d); diff2=diff2+dist(2,tmp1d,tmp2d); if((diff10){ pull3(length3(tmp2md3),tmp2md3,tmp1d3); if(dist(3,tmpd3,tmp1d3)Inf-1){ xz=pt[0]; yz=pt[1]; zz=pt[2]; } else{ xz=-pt[0]*SP+pt[1]*CP; yz=-pt[0]*CP*CT-pt[1]*SP*CT+pt[2]*ST; zz=pt[0]*CP*ST+pt[1]*SP*ST+pt[2]*CT; } nall=push3(xz,yz,zz,out); } return nall; } int kukannozoku(double jokyo[2], double kukanL[][2], double res[][2]){ double t1, t2, tmpd2[2], ku[2]; int i, j, ii, nn, flg, nres; nn=length2(kukanL); t1=jokyo[0]; t2=jokyo[1]; pull2(1,kukanL,tmpd2); t1=fmax(t1,tmpd2[0]); pull2(nn,kukanL,tmpd2); t2=fmin(t2,tmpd2[1]); res[0][0]=0; nres=0; flg=0; for(ii=1; ii<=nn; ii++){ pull2(ii,kukanL,ku); if(flg==0){ if(ku[1]t2+Eps){ tmpd2[0]=t2; tmpd2[1]=ku[1]; nres=addptd2(res,tmpd2); } } } else if(flg==1){ if(ku[1]0){ koc[0][0]=0; nkoc=0; pull2(1,plt2d,pta); pull2(length2(plt2d),plt2d,ptb); for(j=1; j<=nkoc2; j++){ pt[0]=koc2[j][0]; pt[1]=koc2[j][1]; nearestptpt(pt, plt2d, tmpd4); koc2[j][3]=tmpd4[2]; pt[0]=tmpd4[0]; pt[1]=tmpd4[1]; nearestptpt(pt, obj2d, tmpd4); koc2[j][0]=tmpd4[0]; koc2[j][1]=tmpd4[1]; koc2[j][2]=tmpd4[2]; ds[j]=tmpd4[3]; } pull4(1,koc2,tmp1d4); dmin=ds[1]; for(j=2; j<=nkoc2; j++){ if(fabs(koc2[j][2]-tmp1d4[2])<4){ if(ds[j]0.9*length2(plt2d))){ continue; } pull4(j,koc2,tmpd4); nkoc=addptd4(koc,tmpd4); } } */ for(jj=1; jj<=nkoc; jj++){ pt[0]=koc[jj][0]; pt[1]=koc[jj][1]; pta[0]=plt2d[1][0]; pta[1]=plt2d[1][1]; ptb[0]=plt2d[length2(plt2d)][0]; ptb[1]=plt2d[length2(plt2d)][1]; if((dist(2,pt,pta)0.7*length2(plt2d))){ continue; } nn1=floor(koc[jj][2]); nn2=koc[jj][3]; pta[0]=objp[nn1][0]; pta[1]=objp[nn1][1]; za=objp[nn1][2]; ptb[0]=objp[nn1+1][0]; ptb[1]=objp[nn1+1][1]; zb=objp[nn1+1][2]; if(dist(2,pta,ptb)pow(Eps,2.0)){ pts1[0][0]=0; pointoncurve(nn1,obj2d,Eps,tmp1d2); addptd2(pts1,tmp1d2); pointoncurve(nn1+1,obj2d,Eps,tmp1d2); addptd2(pts1,tmp1d2); tmp1d2[0]=pts1[2][0]-pts1[1][0]; tmp1d2[1]=pts1[2][1]-pts1[1][1]; tmp2d2[0]=ptb[0]-pta[0]; tmp2d2[1]=ptb[1]-pta[1]; tmp3d1=dotprod(2,tmp1d2,tmp2d2); origin[0]=0; origin[1]=0; tmp3d1=tmp3d1/dist(2,tmp1d2,origin)/dist(2,tmp2d2,origin); tmpd1=1-0.5*pow(tmp3d1,2.0); r0=0.075*r00; nclipL=push5(pt[0],pt[1], nn1,t1,r0/tmpd1, clipL); } } } } kukanL[0][0]=0; te=length3(obj); push2(1.0,te, kukanL); for(ii=1; ii<=nclipL; ii++){ pt[0]=clipL[ii][0]; pt[1]=clipL[ii][1]; nn=clipL[ii][2]; tt=nn+clipL[ii][3]; rr=clipL[ii][4]; flg=0; for(jj=nn; jj>=1; jj--){ pointoncurve(jj,obj2d,Eps,ptq); if(dist(2,pt,ptq)Eps){ pointoncurve(t2,obj2d,Eps,tmp1d2); addptd2(ptL2,tmp1d2); invparapt(t2, obj2d, obj, tmpd3); addptd3(ptL,tmpd3); } if(length2(ptL2)>1){ appendd2(2,1,length2(ptL2),ptL2,allres2); appendd3(2,1,length3(ptL),ptL,allres); } } } return length3(allres); } void readoutdata3(const char *fname, const char *var, double data[][3]){ double x,y,z; float xx; char dstrorg[256]; dstrorg[0]='\0'; char dstr[256]; dstr[0]='\0'; char str[10]; str[0]='\0'; char strtmp[30]; char tmp[10]; tmp[0]='\0'; int linectr=0, start=0,ii,jj,nn,nctr; FILE *fp; fp=fopen(fname,"r"); if(fp==NULL){ printf("file not found\n"); return; } data[0][0]=0; nn=strlen(var); while( !feof(fp)){ fgets(dstr,250,fp); linectr++; jj=strlen(dstr); if(jj>1){ dstr[jj-3]='\0'; }else{ dstr[0]='\0'; } if(strncmp(dstr,var,nn)==0){ start=linectr; }else{ if(start==0){ continue; } } if(linectr==start){ continue; } if(strncmp(dstr,"sta",3)==0){ if(linectr>start+1){ add3(data,Inf,2,0); } continue; } if(strncmp(dstr,"end",3)==0){ continue; } if(strncmp(dstr,"[",1)!=0){ break; } str[0]='\0'; nctr=0; for(jj=2;jj<250;jj++){ tmp[0]='\0'; sprintf(tmp,"%c",dstr[jj]); if(strncmp(tmp,"/",1)==0){ break; } if(strncmp(tmp," ",1)==0){ continue; } if(strncmp(tmp,",",1)==0){ nctr++; if(nctr==1){ x=atof(str); str[0]='\0'; continue; } if(nctr==2){ y=atof(str);str[0]='\0'; continue; } } if(strncmp(tmp,"]",1)==0){ z=atof(str);str[0]='\0'; add3(data,x,y,z); nctr=0; jj++; tmp[0]='\0'; sprintf(tmp,"%c",dstr[jj]); if(strncmp(tmp,",",1)==0){ jj++; } continue; } strtmp[0]='\0'; sprintf(strtmp,"%s%s",str,tmp); str[0]='\0'; for(ii=0;ii<20;ii++){ str[ii]=strtmp[ii]; if(strtmp[ii]=='\0'){ break; } } } } fclose(fp); }