📄 trianglulationview.cpp
字号:
pDC->MoveTo (linshipoint[4].x ,linshipoint[4].y );
pDC->LineTo (500,425);
pDC->LineTo (linshipoint[3].x ,linshipoint[3].y );
r1=length(controlpoint[0],controlpoint[3]);
r2=length(controlpoint[4],controlpoint[3]);
r3=length(controlpoint[1],controlpoint[3]);
m=linshipoint[5].x ;
n=linshipoint[5].y ;
p=linshipoint[3].x ;
q=linshipoint[3].y ;
a=((double)r1*r1-r2*r2+q*q-n*n)/(2*((double)p-m))+(p-(double)m)/2.;
b=((double)q-n)/((double)p-m);
y1=(int)((a*b+n+sqrt((a*b+n)*(a*b+n)-(b*b+1)*(a*a+n*n-r1*r1)))/(b*b+1));
x1=(int)(a+m-b*y1);
y2=(int)((a*b+n-sqrt((a*b+n)*(a*b+n)-(b*b+1)*(a*a+n*n-r1*r1)))/(b*b+1));
x2=(int)(a+m-b*y2);
d1=sqrt((x1-linshipoint[2].x )*(x1-linshipoint[2].x )+(y1-linshipoint[2].y)*(y1-linshipoint[2].y ));
d2=sqrt((x2-linshipoint[2].x )*(x2-linshipoint[2].x )+(y2-linshipoint[2].y)*(y2-linshipoint[2].y ));
error1=abc(d1,0);
error2=abc(d2,0);
if (error1<=error2)
{
x=x1;
y=y1;
}
else
{
x=x2;
y=y2;
}
linshipoint[7].x =x;
linshipoint[7].y =y;
pDC->MoveTo (linshipoint[5].x ,linshipoint[5].y );
pDC->LineTo (376,512);
pDC->LineTo (linshipoint[3].x ,linshipoint[3].y );
r1=length(controlpoint[3],controlpoint[6]);
r2=length(controlpoint[7],controlpoint[6]);
r3=length(controlpoint[4],controlpoint[6]);
m=linshipoint[7].x ;
n=linshipoint[7].y ;
p=linshipoint[6].x ;
q=linshipoint[6].y ;
a=(r1*r1-r2*r2+q*q-n*n)/(2*(p-m))+(p-m)/2;
b=(q-n)/(p-m);
y1=(int)((a*b+n+sqrt((a*b+n)*(a*b+n)-(b*b+1)*(a*a+n*n-r1*r1)))/(b*b+1));
x1=(int)(a+m-b*y1);
y2=(int)((a*b+n-sqrt((a*b+n)*(a*b+n)-(b*b+1)*(a*a+n*n-r1*r1)))/(b*b+1));
x2=(int)(a+m-b*y2);
d1=sqrt((x1-linshipoint[3].x )*(x1-linshipoint[3].x )+(y1-linshipoint[3].y)*(y1-linshipoint[3].y ));
d2=sqrt((x2-linshipoint[3].x )*(x2-linshipoint[3].x )+(y2-linshipoint[3].y)*(y2-linshipoint[3].y ));
error1=abc(d1,0);
error2=abc(d2,0);
if (error1<=error2)
{
x=x1;
y=y1;
}
else
{
x=x2;
y=y2;
}
linshipoint[8].x =x;
linshipoint[8].y =y;
pDC->MoveTo (linshipoint[1].x ,linshipoint[1].y );
pDC->LineTo (linshipoint[4].x ,linshipoint[4].y );
pDC->LineTo (linshipoint[6].x ,linshipoint[6].y );
pDC->LineTo (linshipoint[3].x ,linshipoint[3].y );
pDC->LineTo (linshipoint[7].x ,linshipoint[7].y );
pDC->LineTo (linshipoint[5].x ,linshipoint[5].y );
pDC->LineTo (linshipoint[2].x ,linshipoint[2].y );
pDC->MoveTo (linshipoint[7].x ,linshipoint[7].y );
pDC->LineTo (linshipoint[8].x ,linshipoint[8].y );
pDC->LineTo (linshipoint[6].x ,linshipoint[6].y );*/
CPoint pointx[25];
CPoint pointy[25];
double d;
canshufuzhi();
pointx[0].x =300;
pointx[0].y =300;
d=length(canshupoint[0],canshupoint[5]);
pointx[5].x =(int)(pointx[0].x +d);
pointx[5].y =pointx[0].y ;
d=length(canshupoint[5],canshupoint[10]);
pointx[10].x =(int)(pointx[5].x +d);
pointx[10].y =pointx[0].y ;
d=length(canshupoint[10],canshupoint[15]);
pointx[15].x =(int)(pointx[10].x +d);
pointx[15].y =pointx[0].y ;
d=length(canshupoint[15],canshupoint[20]);
pointx[20].x =(int)(pointx[15].x +d);
pointx[20].y =pointx[0].y ;
double cs;
cs=jiajiao(canshupoint[0],canshupoint[1],canshupoint[5]);
d=length(canshupoint[0],canshupoint[1]);
pointx[1].x =(int)(d*cos(cs)+pointx[0].x );
pointx[1].y =(int)(d*sin(cs)+pointx[0].y );
d=length(canshupoint[1],canshupoint[6]);
pointx[6].x =(int)(pointx[1].x +d);
pointx[6].y =pointx[1].y ;
d=length(canshupoint[6],canshupoint[11]);
pointx[11].x =(int)(pointx[6].x +d);
pointx[11].y =pointx[6].y ;
d=length(canshupoint[11],canshupoint[16]);
pointx[16].x =(int)(pointx[11].x +d);
pointx[16].y =pointx[1].y ;
d=length(canshupoint[16],canshupoint[21]);
pointx[21].x =(int)(pointx[16].x +d);
pointx[21].y =pointx[1].y ;
cs=jiajiao(canshupoint[1],canshupoint[2],canshupoint[6]);
d=length(canshupoint[2],canshupoint[1]);
pointx[2].x =(int)(d*cos(cs)+pointx[1].x );
pointx[2].y =(int)(d*sin(cs)+pointx[1].y );
d=length(canshupoint[2],canshupoint[7]);
pointx[7].x =(int)(pointx[2].x +d);
pointx[7].y =pointx[2].y ;
d=length(canshupoint[7],canshupoint[12]);
pointx[12].x =(int)(pointx[7].x +d);
pointx[12].y =pointx[2].y ;
d=length(canshupoint[12],canshupoint[17]);
pointx[17].x =(int)(pointx[12].x +d);
pointx[17].y =pointx[2].y ;
d=length(canshupoint[17],canshupoint[22]);
pointx[22].x =(int)(pointx[17].x +d);
pointx[22].y =pointx[2].y ;
cs=jiajiao(canshupoint[2],canshupoint[3],canshupoint[7]);
d=length(canshupoint[2],canshupoint[3]);
pointx[3].x =(int)(d*cos(cs)+pointx[2].x );
pointx[3].y =(int)(d*sin(cs)+pointx[2].y );
d=length(canshupoint[3],canshupoint[8]);
pointx[8].x =(int)(pointx[3].x +d);
pointx[8].y =pointx[3].y ;
d=length(canshupoint[8],canshupoint[13]);
pointx[13].x =(int)(pointx[8].x +d);
pointx[13].y =pointx[3].y ;
d=length(canshupoint[13],canshupoint[18]);
pointx[18].x =(int)(pointx[13].x +d);
pointx[18].y =pointx[3].y ;
d=length(canshupoint[18],canshupoint[23]);
pointx[23].x =(int)(pointx[18].x +d);
pointx[23].y =pointx[3].y ;
cs=jiajiao(canshupoint[3],canshupoint[4],canshupoint[8]);
d=length(canshupoint[3],canshupoint[4]);
pointx[4].x =(int)(d*cos(cs)+pointx[3].x );
pointx[4].y =(int)(d*sin(cs)+pointx[3].y );
d=length(canshupoint[4],canshupoint[9]);
pointx[9].x =(int)(pointx[4].x +d);
pointx[9].y =pointx[4].y ;
d=length(canshupoint[9],canshupoint[14]);
pointx[14].x =(int)(pointx[9].x +d);
pointx[14].y =pointx[4].y ;
d=length(canshupoint[14],canshupoint[19]);
pointx[19].x =(int)(pointx[14].x +d);
pointx[19].y =pointx[4].y ;
d=length(canshupoint[19],canshupoint[24]);
pointx[24].x =(int)(pointx[19].x +d);
pointx[24].y =pointx[4].y ;
pointy[0].x =300;
pointy[0].y =300;
d=length(canshupoint[0],canshupoint[1]);
pointy[1].y =(int)(pointy[0].y +d);
pointy[1].x =pointy[0].x ;
d=length(canshupoint[1],canshupoint[2]);
pointy[2].y =(int)(pointy[1].y +d);
pointy[2].x =pointy[0].x ;
d=length(canshupoint[1],canshupoint[2]);
pointy[3].y =(int)(pointy[2].y +d);
pointy[3].x =pointy[0].x ;
d=length(canshupoint[1],canshupoint[2]);
pointy[4].y =(int)(pointy[3].y +d);
pointy[4].x =pointy[0].x ;
// double cs;
cs=jiajiao(canshupoint[0],canshupoint[1],canshupoint[5]);
d=length(canshupoint[0],canshupoint[5]);
pointy[5].x =(int)(d*sin(cs)+pointy[0].x );
pointy[5].y =(int)(d*cos(cs)+pointy[0].y );
d=length(canshupoint[5],canshupoint[6]);
pointy[6].y =(int)(pointy[5].y +d);
pointy[6].x =pointy[5].x ;
d=length(canshupoint[6],canshupoint[7]);
pointy[7].y=(int)(pointy[6].y +d);
pointy[7].x =pointy[5].x ;
d=length(canshupoint[7],canshupoint[8]);
pointy[8].y=(int)(pointy[7].y +d);
pointy[8].x =pointy[5].x ;
d=length(canshupoint[8],canshupoint[9]);
pointy[9].y=(int)(pointy[8].y +d);
pointy[9].x =pointy[5].x ;
cs=jiajiao(canshupoint[5],canshupoint[6],canshupoint[10]);
d=length(canshupoint[5],canshupoint[10]);
pointy[10].x =(int)(d*sin(cs)+pointy[5].x );
pointy[10].y =(int)(d*cos(cs)+pointy[5].y );
d=length(canshupoint[10],canshupoint[11]);
pointy[11].y =(int)(pointy[10].x +d);
pointy[11].x =pointy[10].x ;
d=length(canshupoint[11],canshupoint[12]);
pointy[12].y =(int)(pointy[11].y +d);
pointy[12].x =pointy[10].x ;
d=length(canshupoint[12],canshupoint[13]);
pointy[13].y =(int)(pointy[12].y +d);
pointy[13].x =pointy[10].x ;
d=length(canshupoint[13],canshupoint[14]);
pointy[14].y =(int)(pointy[13].y +d);
pointy[14].x =pointy[10].x ;
cs=jiajiao(canshupoint[3],canshupoint[6],canshupoint[4]);
d=length(canshupoint[3],canshupoint[6]);
pointy[6].x =(int)(d*sin(cs)+pointy[3].x );
pointy[6].y =(int)(d*cos(cs)+pointy[3].y );
d=length(canshupoint[6],canshupoint[7]);
pointy[7].y =(int)(pointy[6].x +d);
pointy[7].x =pointy[6].x ;
d=length(canshupoint[7],canshupoint[8]);
pointy[8].y =(int)(pointy[7].y +d);
pointy[8].x =pointy[6].x ;
d=length(canshupoint[7],canshupoint[8]);
pointy[8].y =(int)(pointy[7].y +d);
pointy[8].x =pointy[6].x ;
d=length(canshupoint[7],canshupoint[8]);
pointy[8].y =(int)(pointy[7].y +d);
pointy[8].x =pointy[6].x ;
cs=jiajiao(canshupoint[3],canshupoint[6],canshupoint[4]);
d=length(canshupoint[3],canshupoint[6]);
pointy[6].x =(int)(d*sin(cs)+pointy[3].x );
pointy[6].y =(int)(d*cos(cs)+pointy[3].y );
d=length(canshupoint[6],canshupoint[7]);
pointy[7].y =(int)(pointy[6].x +d);
pointy[7].x =pointy[6].x ;
d=length(canshupoint[7],canshupoint[8]);
pointy[8].y =(int)(pointy[7].y +d);
pointy[8].x =pointy[6].x ;
d=length(canshupoint[7],canshupoint[8]);
pointy[8].y =(int)(pointy[7].y +d);
pointy[8].x =pointy[6].x ;
d=length(canshupoint[7],canshupoint[8]);
pointy[8].y =(int)(pointy[7].y +d);
pointy[8].x =pointy[6].x ;
int i=0;
for (i=0;i<9;i++)
{
pointxy[i].x =(int)((pointx[i].x +pointy[i].x )/2.);
pointxy[i].y =(int)((pointx[i].y +pointy[i].y )/2.);
}
CDC *pDC=GetDC();
pDC->MoveTo (pointxy[0].x ,pointxy[0].y );
pDC->LineTo (pointxy[1].x,pointxy[1].y );
pDC->LineTo (pointxy[2].x,pointxy[2].y );
pDC->LineTo (pointxy[5].x,pointxy[5].y );
pDC->LineTo (pointxy[8].x,pointxy[8].y );
pDC->LineTo (pointxy[7].x,pointxy[7].y );
pDC->LineTo (pointxy[6].x,pointxy[6].y );
pDC->LineTo (pointxy[3].x,pointxy[3].y );
pDC->LineTo (pointxy[0].x,pointxy[0].y );
pDC->MoveTo (pointxy[1].x ,pointxy[1].y );
pDC->LineTo (pointxy[4].x,pointxy[4].y );
pDC->LineTo (pointxy[7].x,pointxy[7].y );
pDC->MoveTo (pointxy[3].x ,pointxy[3].y );
pDC->LineTo (pointxy[4].x,pointxy[4].y );
pDC->LineTo (pointxy[5].x,pointxy[5].y );
double t=0;
double u,v;
/* while (t<=2*PI)
{
u=0.6+0.2*cos(t);
v=0.5+0.3*sin(t);
developpoint(u,v);
t=t+0.05;
}*/
}
double CTrianglulationView::jiajiao(Tpoint point1, Tpoint point2,Tpoint point3)
{
double ax,ay,az,bx,by,bz;
ax=point2.x -point1.x;
ay=point2.y -point1.y;
az=point2.z -point1.z;
bx=point3.x -point1.x ;
by=point3.y -point1.y ;
bz=point3.z -point1.z ;
double cos;
double m,n;
m=sqrt(ax*ax+ay*ay+az*az);
n=sqrt(bx*bx+by*by+bz*bz);
cos =(ax*bx+ay*by+az*bz)/(m*n);
return acos(cos);
}
double CTrianglulationView::length(Tpoint point1, Tpoint point2)
{
double d;
d=sqrt((point1.x -point2.x )*(point1.x -point2.x )+(point1.y -point2.y )*(point1.y -point2.y )+(point1.z -point2.z )*(point1.z -point2.z ));
return d;
}
bool CTrianglulationView::Intersect(int point1x,int point1y,int point2x, int point2y, int point3x,int point3y, int point4x,int point4y)
{
double d1,d2,x,y,f;
d1=((double)point4y -point3y )/(point4x -point3x )-
((double)point2y -point1y )/(point2x -point2x );
d2=((double)point2x *point1y -point2y *point1x)/(point2x -point1x)-
((double)point4x *point3y -point3x *point4y )/(point4x -point3x);
x=(d2/d1);
if (point1x <point2x )
{
if (point3x<point4x)
{
if ((x>point1x )&&(x<point2x )&&(x>point3x )&&(x<point4x))
return 1;//相交
else
return 0;//不相交
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -