集装箱优化设计代码.txt
上传用户:yy2793056
上传日期:2021-10-30
资源大小:1k
文件大小:4k
源码类别:

分形几何

开发平台:

Visual C++

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<conio.h>
  4. #include<iostream.h>
  5. void CDcmoView::OnDraw(CDC* pDC)
  6. {
  7.   CDcmoDoc* pDoc=GetDocument();
  8.   ASSERT_VALID(pDoc);
  9.  //TODO:add draw code for native data
  10.  //绘制集装箱平面区域
  11.  Cpen pen1(PS_SOLID,1,RGB(0,0,0)),pen2(PS_SOLID,1,RGB(255,0,0)),*pOldPen;
  12.  pOldpen=pDC->SelectObject(&pen1);
  13.  pDC->Rectangel(10,10,610,410);
  14.  pDC->TextOut(630,50,"集装箱区域大小:");
  15.  pDC->TextOut(630,70,"600","400");
  16.  CBrush br.*pOldBrush;
  17.  br.CreateSolidBrush(RGB(128,0,128));
  18.  PoldBrushupDC->SelectObject(&br);
  19.  //用户点击绘图
  20.  if(CDcmoView::i==1)
  21.  {
  22.    pOldpen=pDC->SelectObject(&pen2);
  23.    //先尽量排列正方形
  24.    double M=(600/ctrldlg.m_square);
  25.    double N=(400/ctrldlg.m_square);
  26.    int mm,nn;
  27.    for(mm=0;mm<(int)M;++mm)
  28.    {
  29.      for(nn=0;nn<(int)N;++nn)
  30.      {
  31.       pDC->Rectangle(10+mm*ctrldlg.m_Square,10+nn*ctrldlg.m_Square,10+(mm+1)*ctrldlg.m_Square,10+(nn+1)*ctrldlg.m_Square);
  32.      }
  33.    }
  34.   //在剩下的空间里再尽量排列三角形
  35.   CPoint pts[3],ptt[3];
  36.   int countTriangle=0;
  37.   double pTmp=(this->ctrldlg.m_Tri2+this->ctrldlg.m_Tri3)/2;
  38.   double Area=sqrt(pTmp*(pTmp-this->ctrldlg.m_Tri1)*(pTmp-this->ctrldlg.m_Tri2)*(pTmp-this->ctrldlg.m_Tri3));
  39.   double h1=Area*2/this->ctrldlg.m_Tri1;
  40.   double h2=Area*2/this->ctrldlg.m_Tri2;
  41.   double h3=Area*2/this->ctrldlg.m_Tri3;
  42.   double xLeave=600-this->ctrldlg.m_Square*(int)(M);
  43.   double yLeave=400-this->ctrldlg.m_Square*(int)(N);
  44.   double vv1=xLeave-(int)(xLeave/h1)*h1;
  45.   double vv2=xLeave-(int)(xLeave/h2)*h2;
  46.   double vv3=xLeave-(int)(xLeave/h3)*h3;
  47.   double vv0=vv1<=vv2?vv1:vv2;
  48.          vv0=vv0<=vv3?vv0:vv3;
  49.   double LL,hh,MM,NN,BB;
  50.   if(vv0==vv1)
  51.   {
  52.    hh=h1;
  53.    LL=this->ctrldlg.m_Tri1;
  54.    BB=ctrldlg.m_Tri2<ctrldlg.m_Tri3?ctrldlg.m_Tri2:ctrldlg.m_Tri3;
  55.   }
  56.   if(vv0==vv2)
  57.   {
  58.    hh=h2;
  59.    LL=this->ctrldlg.m_Tri2;
  60.    BB=ctrldlg.m_Tri1<ctrldlg.m_Tri3?ctrldlg.m_Tri1:ctrldlg.m_Tri3;
  61.   }
  62.   if(vv0==vv3)
  63.   {
  64.    hh=h3;
  65.    LL=this->ctrldlg.m_Tri3;
  66.    BB=ctrldlg.m_Tri1<ctrldlg.m_Tri2?ctrldlg.m_Tri1:ctrldlg.m_Tri2;
  67.   }
  68.   MM=xLeave/hh;
  69.   NN=400/LL;
  70.   double xx,yy,zz;
  71.   xx=10+(int)M*this->ctrldlg.m_Square;
  72.   yy=10;
  73.   zz=sqrt(BB*BB-hh*hh);
  74.   //正方形填充区右面区域
  75.   for(mm=0;mm<(int)MM;++mm)
  76.    {
  77.      yy=10;
  78.      for(nn=0;nn<(int)NN;++nn)
  79.      {
  80.        pts[0]=cpoint(xx,yy);
  81.        pts[1]=cpoint(xx,yy+LL);
  82.        pts[2]=cpoint(xx+hh,yy+zz);
  83.        ptt[0]=cpoint(xx+hh,yy+zz+LL);
  84.        ptt[1]=pts[1];
  85.        ptt[2]=pts[2];
  86.        {
  87.         pDC->Polygon(pts.3);
  88.         counTriangle++;
  89.        }
  90.       if(yy+zz+LL<=410.0)
  91.       {
  92.        pDC->Polygon(ptt.3);
  93.        countTriangle++;
  94.        }
  95.        yy=yy+LL;
  96.      }
  97.       xx=xx+hh;
  98.    }
  99.   //正方形填充区下方区域
  100.   vv1=yLeave-(int)(yLeave/h1)*h1;
  101.   vv2=yLeave-(int)(yLeave/h2)*h2;
  102.   vv3=yLeave-(int)(yLeave/h3)*h3;
  103.   vv0=vv1<=vv2?vv1:vv2;
  104.   vv0=vv0<=vv3?vv0:vv3;
  105.   if(vv0==vv1)
  106.   {
  107.    hh=h1;
  108.    LL=this->ctrldlg.m_Tri1;
  109.    BB=ctrldlg.m_Tri2<ctrldlg.m_Tri3?ctrldlg.m_Tri2:ctrldlg.m_Tri3;
  110.   }
  111.   if(vv0==vv2)
  112.   {
  113.    hh=h2;
  114.    LL=this->ctrldlg.m_Tri2;
  115.    BB=ctrldlg.m_Tri1<ctrldlg.m_Tri3?ctrldlg.m_Tri1:ctrldlg.m_Tri3;
  116.   }
  117.   if(vv0==vv3)
  118.   {
  119.    hh=h3;
  120.    LL=this->ctrldlg.m_Tri3;
  121.    BB=ctrldlg.m_Tri1<ctrldlg.m_Tri2?ctrldlg.m_Tri1:ctrldlg.m_Tri2;
  122.   }
  123.   MM=yLeave/hh;
  124.   NN=ctrldlg.m_Square*(int)M/LL;
  125.   xx=10;
  126.   yy=10+ctrldlg.m_Square*(int)N;
  127.   zz=sqrt(BB*BB-hh*hh);
  128.   for(mm=0;mm<(int)MM;++mm)
  129.    {
  130.      xx=10;
  131.      for(nn=0;nn<(int)NN;++nn)
  132.      {
  133.        pts[0]=Cpoint(xx,yy);
  134.        pts[1]=Cpoint(xx+LL,yy);
  135.        pts[2]=Cpoint(xx+zz,yy+hh);
  136.        ptt[0]=Cpoint(xx+zz+LL,yy+hh);
  137.        ptt[1]=pts[1];
  138.        ptt[2]=pts[2];
  139.        {
  140.         pDC->Polygon(pts.3);
  141.         counTriangle++;
  142.        }
  143.       if(xx+zz+LL<=ctrldlg.m_Square*(int)M+10.0)
  144.       {
  145.        pDC->Polygon(ptt.3);
  146.        countTriangle++;
  147.        }
  148.        xx=xx+LL;
  149.      }
  150.       yy=yy+hh;
  151.    }
  152.   double LYL; pDC->selectobject(pOldpen);
  153.   CString str;
  154.   str.Format("正方形:%d"个,(int)M*(int)N);
  155.   pDC->TextOut(630,150);
  156.   str.Format("三角形:%d"个,countTriangle);
  157.   pDC->TextOut(630,180);
  158.   LYL=((int)M*(int)N*ctrldlg.m_square+countTriangle*Area)/(600*400);
  159.   str.Format("利用率:%f",LYL);
  160.   pDC->TextOut(630,210,str);
  161.  }
  162.   pDC->SelectObject(pOldpen);
  163.   pDC->SelectObject(pOldBrush);
  164.   pen1.DeleteObject();
  165.   pen2.DeleteObject();
  166.   br.DeleteObject();
  167. }