📄 trianglulationview.cpp
字号:
if (point3x >point4x )
if ((x>point1x )&&(x<point2x )&&(x>point4x )&&(x<point3x ))
return 1;//相交
else
return 0;//不相交
}
}
else
{
if (point3x<point4x )
{
if ((x>point2x )&&(x<point1x )&&(x>point3x )&&(x<point4x))
return 1;//不相交
else
return 0;//相交
}
else
{
if (point3x >point4x )
if ((x<point1x )&&(x>point2x )&&(x>point4x )&&(x<point3x ))
return 1;//不相交
else
return 0;//相交
}
}
}
void CTrianglulationView::canshufuzhi()
{
/* canshupoint[0].x =(int)fuzhix(0.,0.);
canshupoint[0].y =(int)fuzhiy(0.,0.);
canshupoint[0].z =(int)fuzhiz(0.,0.);
canshupoint[1].x =(int)fuzhix(0.,0.5);
canshupoint[1].y =(int)fuzhiy(0.,0.5);
canshupoint[1].z =(int)fuzhiz(0.,0.5);
canshupoint[2].x =(int)fuzhix(0.,1.);
canshupoint[2].y =(int)fuzhiy(0.,1.);
canshupoint[2].z =(int)fuzhiz(0.,1.);
canshupoint[3].x =(int)fuzhix(0.5,0.);
canshupoint[3].y =(int)fuzhiy(0.5,0.);
canshupoint[3].z =(int)fuzhiz(0.5,0.);
canshupoint[4].x =(int)fuzhix(0.5,0.5);
canshupoint[4].y =(int)fuzhiy(0.5,0.5);
canshupoint[4].z =(int)fuzhiz(0.5,0.5);
canshupoint[5].x =(int)fuzhix(0.5,1.);
canshupoint[5].y =(int)fuzhiy(0.5,1.);
canshupoint[5].z =(int)fuzhiz(0.5,1.);
canshupoint[6].x =(int)fuzhix(1.,0.);
canshupoint[6].y =(int)fuzhiy(1.,0.);
canshupoint[6].z =(int)fuzhiz(1.,0.);
canshupoint[7].x =(int)fuzhix(1.,0.5);
canshupoint[7].y =(int)fuzhiy(1.,0.5);
canshupoint[7].z =(int)fuzhiz(1.,0.5);
canshupoint[8].x =(int)fuzhix(1.,1.);
canshupoint[8].y =(int)fuzhiy(1.,1.);
canshupoint[8].z =(int)fuzhiz(1.,1.);*/
double u,v;
u=0.;
v=0.;
int number=0;
while (u<=1.)
{
while (v<=1.)
{
canshupoint[number].x =(int)fuzhix(u,v);
canshupoint[number].y =(int)fuzhiy(u,v);
canshupoint[number].z =(int)fuzhiz(u,v);
v=v+0.25;
number++;
}
u=u+0.25;
v=0.;
}
}
double CTrianglulationView::fuzhix(double u, double v)
{
double d;
d =(int)((1-u)*(1-u)*(controlpoint[0].x *(1-v)*(1-v)+2*controlpoint[1].x *v *(1-v)+controlpoint[2].x *v*v)
+2*u*(1-u)*(controlpoint[3].x *(1-v)*(1-v)+2*controlpoint[4].x *v *(1-v)+controlpoint[5].x *v*v)
+u*u*(controlpoint[6].x *(1-v)*(1-v)+2*controlpoint[7].x *v *(1-v)+controlpoint[8].x *v*v));
return d;
}
double CTrianglulationView::fuzhiy(double u, double v)
{
double d;
d =(int)((1-u)*(1-u)*(controlpoint[0].y *(1-v)*(1-v)+2*controlpoint[1].y *v *(1-v)+controlpoint[2].y *v*v)
+2*u*(1-u)*(controlpoint[3].y *(1-v)*(1-v)+2*controlpoint[4].y *v *(1-v)+controlpoint[5].y *v*v)
+u*u*(controlpoint[6].y *(1-v)*(1-v)+2*controlpoint[7].y *v *(1-v)+controlpoint[8].y *v*v));
return d;
}
double CTrianglulationView::fuzhiz(double u, double v)
{
double d;
d =(int)((1-u)*(1-u)*(controlpoint[0].z *(1-v)*(1-v)+2*controlpoint[1].z *v *(1-v)+controlpoint[2].z *v*v)
+2*u*(1-u)*(controlpoint[3].z *(1-v)*(1-v)+2*controlpoint[4].z *v *(1-v)+controlpoint[5].z *v*v)
+u*u*(controlpoint[6].z *(1-v)*(1-v)+2*controlpoint[7].z *v *(1-v)+controlpoint[8].z *v*v));
return d;
}
void CTrianglulationView::developpoint(double u, double v)
{
CDC *pDC=GetDC();
int tag;
if ((u<=0.5)&&(v<=0.5))
tag=1;
if ((u<=0.5)&&(v>0.5))
tag=2;
if ((u>0.5)&&(v<=0.5))
tag=3;
if ((u>0.5)&&(v>0.5))
tag=4;
double m,n;
int x,y;
if (tag==1)
{
m=2*(u-0.);
n=2*(v-0.);
x=(int)(pointxy[0].x*(1-m)*(1-n)+pointxy[1].x*(1-m)*n+pointxy[3].x *m*(1-n)+pointxy[4].x*m*n);
y=(int)(pointxy[0].y*(1-m)*(1-n)+pointxy[1].y*(1-m)*n+pointxy[3].y *m*(1-n)+pointxy[4].y*m*n);
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
pDC->SetPixel (x,y,RGB(255,0,0));
}
if (tag==2)
{
m=2*(u-0.);
n=2*(v-0.5);
x=(int)(pointxy[1].x*(1-m)*(1-n)+pointxy[2].x*(1-m)*n+pointxy[4].x *m*(1-n)+pointxy[5].x*m*n);
y=(int)(pointxy[1].y*(1-m)*(1-n)+pointxy[2].y*(1-m)*n+pointxy[4].y *m*(1-n)+pointxy[5].y*m*n);
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
pDC->SetPixel (x,y,RGB(255,0,0));
}
if (tag==3)
{
m=2*(u-0.5);
n=2*(v-0.);
x=(int)(pointxy[3].x*(1-m)*(1-n)+pointxy[4].x*(1-m)*n+pointxy[6].x *m*(1-n)+pointxy[7].x*m*n);
y=(int)(pointxy[3].y*(1-m)*(1-n)+pointxy[4].y*(1-m)*n+pointxy[6].y *m*(1-n)+pointxy[7].y*m*n);
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
pDC->SetPixel (x,y,RGB(255,0,0));
}
if (tag==4)
{
m=2*(u-0.5);
n=2*(v-0.5);
x=(int)(pointxy[4].x*(1-m)*(1-n)+pointxy[5].x*(1-m)*n+pointxy[7].x *m*(1-n)+pointxy[8].x*m*n);
y=(int)(pointxy[4].y*(1-m)*(1-n)+pointxy[5].y*(1-m)*n+pointxy[7].y *m*(1-n)+pointxy[8].y*m*n);
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
pDC->SetPixel (x,y,RGB(255,0,0));
}
// CDC *pDC=GetDC();
// pDC->SetPixel (x,y,RGB(255,0,0));
}
void CTrianglulationView::OnSelectPoint()
{
// TODO: Add your command handler code here
//CPoint selpoint[];
CDC *pDC=GetDC();
pDC->MoveTo (200,400);
pDC->LineTo (400,400);
pDC->LineTo (400,200);
pDC->LineTo (200,200);
pDC->LineTo (200,400);
/* int x,y;
x=300;
y=200;
while (y<=360)
{
y=y+20;
pDC->SetPixel (x,y,1);
}
x=200;
y=300;
while (x<=360)
{
x=x+20;
pDC->SetPixel (x,y,1);
}
x=200;
y=200;
while (x<=260)
{
x=x+20;
while (y<=260)
{
y=y+20;
pDC->SetPixel (x,y,1);
}
y=200;
}
x=300;
y=200;
while (x<=360)
{
x=x+30;
while (y<=260)
{
y=y+30;
pDC->SetPixel (x,y,1);
}
y=200;
}
x=200;
y=300;
while (x<=260)
{
x=x+30;
while (y<=360)
{
y=y+30;
pDC->SetPixel (x,y,1);
}
y=300;
}
x=300;
y=300;
while (x<=360)
{
x=x+20;
while (y<=360)
{
y=y+20;
pDC->SetPixel (x,y,1);
}
y=300;
}*/
int x,y;
x=200;
y=200;
while (x<=400)
{
while (y<=400)
{
pDC->SetPixel (x,y,RGB(255,0,0));
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
y=y+40;
}
x=x+40;
y=200;
}
}
int CTrianglulationView::PointIsInside(int number1, int number2, int number3)
{
int i=0;
bool change1=1,change2=1,change3=1,change=1;
while ((i<(pointnum))&&(change==1))
{
if ((i!=number1)&&(i!=number2)&&(i!=number3))
{
change1=SameSide(number1,number2,number3,i);
change2=SameSide(number1,number3,number2,i);
change3=SameSide(number2,number3,number1,i);
if ((change1==1)&&(change2==1)&&(change3==1))
{
change=0;
return i;//yes
}
}
i++;
}
return 0;
}
bool CTrianglulationView::SameSide(int number1, int number2, int number3,int number4)
{
double b1,b2,b;
if ((number1==number3)||(number1==number4)||(number2==number3)||(number2==number4))
return 0;
b1=(mypoint[number1 ].x -mypoint[number2 ].x)*mypoint[number3].y
+(mypoint[number2 ].y -mypoint[number1 ].y)*mypoint[number3].x
+mypoint[number2].x *mypoint[number1].y -mypoint[number1].x*mypoint[number2].y;
b2=(mypoint[number1 ].x -mypoint[number2 ].x)*mypoint[number4].y
+(mypoint[number2 ].y -mypoint[number1].y)*mypoint[number4].x
+mypoint[number2].x *mypoint[number1].y -mypoint[number1].x*mypoint[number2].y;
b=b1*b2;
if (b>=0)
return 1;//在三角行边上
else
return 0;//不在三角行边上
}
void CTrianglulationView::Onuvtriangulation()
{
// TODO: Add your command handler code here
CDC *pDC=GetDC();
/* pDC->MoveTo (200,400);
pDC->LineTo (400,400);
pDC->LineTo (400,200);
pDC->LineTo (200,200);
pDC->LineTo (200,400);*/
/* x=200;
y=200;
while (y<=360)
{
y=y+80;
pDC->SetPixel (x,y,RGB(255,0,0));
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
}
x=200;
y=300;
while (x<=360)
{
x=x+80;
pDC->SetPixel (x,y,RGB(255,0,0));
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
}
x=200;
y=200;
while (x<=260)
{
x=x+80;
while (y<=260)
{
y=y+80;
pDC->SetPixel (x,y,RGB(255,0,0));
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
}
y=200;
}
x=300;
y=200;
while (x<=360)
{
x=x+80;
while (y<=260)
{
y=y+80;
pDC->SetPixel (x,y,RGB(255,0,0));
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
}
y=200;
}
x=200;
y=300;
while (x<=260)
{
x=x+80;
while (y<=360)
{
y=y+80;
pDC->SetPixel (x,y,RGB(255,0,0));
mypoint[pointnum].x =x;
mypoint[pointnum].y =y;
pointnum++;
}
y=300;
}
x=300;
y=300;
while (x<=360)
{
x=x+80;
while (y<=360)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -