⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trianglulationview.cpp

📁 用数值方法做的三角剖分程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -