zoukankan      html  css  js  c++  java
  • 二维坐标轴中绘三维图形

    二维坐标轴中绘三维图形

    代码部分

     CRect rect;
     GetClientRect(rect);
     pDC->SetMapMode(MM_ANISOTROPIC);
     pDC->SetWindowExt(rect.Width(), rect.Height());
     pDC->SetViewportExt(rect.Width(), -rect.Height());
     pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);
     CRect rect1(CPoint(0, 0), CPoint(100, 100));  CPoint p[4];
     p[0] = CPoint(60, 80);
     p[1] = CPoint(60, 180);
     p[2] = CPoint(160, 180);
     p[3] = CPoint(160, 80);

    // CBrush NewBrush, *pOldBrush;
    // pOldBrush = (CBrush *)pDC->SelectStockObject(NULL_BRUSH);

     pDC->Rectangle(&rect1);
     pDC->MoveTo(0, 100);
     pDC->LineTo(p[1]);
     pDC->MoveTo(100, 100);
     pDC->LineTo(p[2]);
     pDC->MoveTo(100, 0);
     pDC->LineTo(p[3]);
     pDC->MoveTo(p[1]);
     pDC->LineTo(p[2]);
     pDC->LineTo(p[3]);

     CPen NewPen, *pOldPen;
     NewPen.CreatePen(PS_DASH, 1, RGB(0, 0, 0));
     pOldPen = pDC->SelectObject(&NewPen);
     pDC->MoveTo(0, 0);
     pDC->LineTo(p[0]);
     pDC->LineTo(p[1]);
     pDC->LineTo(p[0]);
     pDC->LineTo(p[3]);
     pDC->SelectObject(pOldPen);
    // pDC->SelectObject(pOldBrush);
    // CRect rect1(CPoint(0, 0), CPoint(200, 200));
    // pDC->Rectangle(&rect1);
    // pDC->RoundRect(rect1, CPoint(200, 200));
     // TODO: add draw code for native data here
    // CRect rect1(CPoint(-25, -25), CPoint(25, 25));
    // CPoint p[4];
    // p[0] = (15, 5); p[1] = (15, 55); p[2] = (75, 55); p[3] = (75, 5);
    // pDC->Rectangle(rect1);

    有关于代码中的部分讲解
    1.// CBrush NewBrush, *pOldBrush;
      // pOldBrush = (CBrush *)pDC->SelectStockObject(NULL_BRUSH);
    这部分可要,可不要(在这段代码中);因为正方形是最先画,那么它是在最下面,即使它不是透明的,后面画的线都在它的上面,是可以看见的
    然后是这段代码
    // CPoint p[4];
    // p[0] = (15, 5); p[1] = (15, 55); p[2] = (75, 55); p[3] = (75, 5);
    这个无论是编译,还是链接都不会有错,但是它是错的,进入调试模式可以看到一些情况,这些点的y = 0,而x值却是我们给的坐标点的y值,因为忘了CPoint,虽然我是想将一个坐标赋给CPoint的数组元素,可是忘了在坐标前加上CPoint,这样目的是无法达到的

    2.运行代码,可以得到一个正方体似的图形,可是通过代码可以看出,这其实并不能算一个正方体,因为它就只有一个面和8条线,只不过看得像正方体
      下面是关键,图是得到了,说明“二维坐标轴中绘三维图形”是可行的,可是通过看代码发现这样很繁琐,不停地“moveto”,“lineto”,代码多,复杂易出错,而且很乱不清晰;所以这是不行的,只能作为可行性的说明
      其实我在编写代码是也这样想过:一个正方体直观的想法应该是6个面,只需6行代码就可以得到一个正方体,并且相对上面的不完全正方体,这样得到的是拥有6个面的正方体;只不过在编写时要注意里面的,看不到的要先绘,否则可能绘了正方体却在窗口中看不到

    补充碰到的一个错误:编译时没问题,链接时报错
    LINK : fatal error LNK1168: cannot open Debug/Down1.exe for writing
    这是因为这个程序运行过一次,且它的运行窗口没关闭,这样当你再次编译链接就会这样,而如果是直接链接,它是不会报错的

  • 相关阅读:
    项目总结_写代码
    项目总结_el表达式
    项目总结plc_过滤器规则(filter)_忽略过滤的js和css文件
    tomcat 启动错误
    每天学点java_Eclipse修改author名
    每天学点java_FileOutputSteam类
    每天学点java_File类
    11.28日日记
    《深入理解计算机系统》学习中期
    开始《深入理解计算机系统》
  • 原文地址:https://www.cnblogs.com/qbin/p/4989745.html
Copyright © 2011-2022 走看看