QQ登录

只需一步,快速开始

上位机MFC凸壳生成源代码

[ 复制链接 ]
凸壳可以看作是点集合的边界。
其精确定义如下:
设集合S是n维空间的k个点组成的集合,即S={x1,x2,...xk},xi是n维向量。
定义S的凸壳Conv(S)为:
Conv(S)={x=λ1*x1+λ2*x2+...+λk*xk | λ1+λ2+ . . .+λk=1}
VC6.0编译运行,实例运行后,打开文件就可以生成凸壳。可以下载学习
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机MFC凸壳生成源代码.rar 
文件大小:38.89 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


这个例程实现凸壳生成功能。
  1. /*         for(j=0;j<pts.GetSize();j++)
  2.          {
  3.                  for(k=0;k<final_point.GetSize();k++)
  4.                  {
  5.                          change_pts.Add( (CPoint)final_point.GetAt(k) );
  6.                  }
  7.             
  8.                  for(p=0,k=0;k<final_point.GetSize();k++)
  9.          {
  10.                          if( pts.GetAt(j)==final_point.GetAt(k) )   p=1;
  11.                  }
  12.                  
  13.                  if(p==0)   
  14.                  {
  15.                          change_pts.Add( (CPoint)pts.GetAt(j) );
  16.                  }
  17.          }
  18.    
  19. */



  20.            pti=(CPoint)change_pts.GetAt(i);
  21.      ptii=(CPoint)change_pts.GetAt(i+1);
  22.      pt_ii=(CPoint)change_pts.GetAt(i-1);

  23.        w=( ptii.x-pti.x ) * ( pti.x-pt_ii.x )+( ptii.y-pti.y ) * ( pti.y-pt_ii.y );
  24.        q1x=(ptii.x-pti.x)*(ptii.x-pti.x);          q1y=(ptii.y-pti.y)*(ptii.y-pti.y);
  25.        q2x=(pti.x-pt_ii.x)*(pti.x-pt_ii.x);        q2y=(pti.y-pt_ii.y)*(pti.y-pt_ii.y);
  26.        q1cos=w/ ( sqrt(q1x+q1y)*sqrt(q2x+q2y) );
  27.       
  28.       
  29.            for(j=i+1,p=i+1; j<change_pts.GetSize();j++)
  30.               {   pt_j_i=(CPoint)change_pts.GetAt(j);
  31.                pti=(CPoint)change_pts.GetAt(i);
  32.              
  33.               w=(pt_j_i.x-pti.x) * (pti.x-pt_ii.x)+(pt_j_i.y-pti.y) * (pti.y-pt_ii.y);
  34.           q1x=(pt_j_i.x-pti.x)*(pt_j_i.x-pti.x);     
  35.                   q1y=(pt_j_i.y-pti.y)*(pt_j_i.y-pti.y);
  36.         
  37.                   q1cos=w/ ( sqrt(q1x+q1y)*sqrt(q2x+q2y) );
  38.       
  39.               if(  (q1cos!=1)&&((q1cos-q0cos)>0)  )
  40.                   {
  41.             q0cos=q1cos;   p=j;
  42.                   }

  43.            }
  44.    final_point.Add( (CPoint)change_pts.GetAt(p) );
  45.   point_change=(CPoint)final_point.GetAt( final_point.GetSize()-1 );
  46.   i++;
复制代码




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索