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
    这是因为这个程序运行过一次,且它的运行窗口没关闭,这样当你再次编译链接就会这样,而如果是直接链接,它是不会报错的

  • 相关阅读:
    element ui 表单清空
    element ui 覆盖样式 方法
    element ui 修改表单值 提交无效
    element ui 抽屉里的表单输入框无法修改值
    element ui 抽屉首次显示 闪烁
    css 左侧高度 跟随右侧内容高度 自适应
    PICNUF框架
    elementui 抽屉组件标题 出现黑色边框
    vue 子组件跨多层调用父组件中方法
    vue 编辑table 数据 未点击提交,table里的数据就发生了改变(深拷贝处理)
  • 原文地址:https://www.cnblogs.com/qbin/p/4989745.html
Copyright © 2011-2022 走看看