基于MFCMFCMFC的圆环的消隐实现

本文是在上一篇博客基于MFCMFCMFC的凸多面体的消隐实现的基础上实现。

  • 添加头文件#include"math.h"
  • 设置圆环的绘制IDIDID为ID_YuanhuanID\_YuanhuanID_Yuanhuan,添加事件相应程序OnYuanhuan()OnYuanhuan()OnYuanhuan()。
  • 实现代码
void CDrawConvexPolygonView::OnYuanhuan(){// TODO: 在此添加命令处理程序代码CClientDC *pdc = new CClientDC(this);CPen *pen1 = new CPen(PS_SOLID, 1, RGB(0, 0XFF, 0));CPen *pen2 = new CPen(PS_SOLID, 1, RGB(255, 0, 0));CPen *OldPen = pdc->SelectObject(pen1);CBrush brush;brush.CreateSolidBrush(RGB(0, 0, 0));CBrush *oldbrush = (CBrush*)pdc->SelectObject(&brush);int flag, k1, k2, r1, r2, n, d, m, p;int xs1, xs2, xs3, xs4, ys1, ys2, ys3, ys4, i, j, lastp;double x, y, z, thx, th1, th3, yw, zw, xw, thy, th2;double PI, ed, od, eh, zzw, ppw;double xs[50][17], zs[50][17], ys[50][17], zc[50][17], x1, y1;int zz[850], pp[850];r1 = 120;r2 = 40;k1 = 20;k2 = 16;ed = 1500;eh = 0;od = 0;n = 0;PI = 3.14159;th3 = 1;thx = 0.9;for (d = -1; d <= 1; d += 2) {for (th1 = 0; th1 <= 2 * PI + 0.1; th1 += 2 * PI / k1) {n = n + 1;m = 0;for (th2 = 0; th2 <= 2 * PI + 0.1; th2 += 2 * PI / k2) {m = m + 1;x = r1 + r2 * cos(th2);y = r2 * sin(th2);z = 0;thy = th1;zw = z;xw = x;x = zw * cos(thy) - xw * sin(thy);z = zw * sin(thy) + xw * cos(thy);x = x + r1 / 2 * d;if (d == 1) {yw = y;zw = z;y = yw * cos(PI / 2) - zw * sin(PI / 2);z = yw * sin(PI / 2) + zw * cos(PI / 2);}thy = th3;zw = z;xw = x;x = zw * cos(thy) - xw * sin(thy);z = zw * sin(thy) + xw * cos(thy);yw = y;zw = z;y = yw * cos(thx) - zw * sin(thx);z = yw * sin(thx) + zw * cos(thx);x = x * ed / (ed - od - z);y = (y*ed - eh * (od + z)) / (ed - od - z);xs[n][m] = x;ys[n][m] = y;zs[n][m] = z;}flag = 0;}flag = 0;}p = 0;for (n = 1; n <= k1; n += 1) {for (m = 1; m <= k2; m += 1) {zc[n][m] = int((zs[n][m] + zs[n + 1][m + 1]) / 2);zz[p] = zc[n][m];pp[p] = p;p = p + 1;}}lastp = p - 1;for (i = 2; i <= lastp; i += 1) {for (j = i - 1; j >= 0; j += -1) {if (zz[j] > zz[j + 1]) {zzw = zz[j];zz[j] = zz[j + 1];zz[j + 1] = zzw;ppw = pp[j];pp[j] = pp[j + 1];pp[j + 1] = ppw;}}}for (p = 0; p <= lastp; p += 1) {n = int(pp[p] / k2) + 1;m = pp[p] % k2 + 1;if (n != (k1 + 1)) {xs1 = int(xs[n][m]);ys1 = int(ys[n][m]);xs2 = int(xs[n + 1][m]);ys2 = int(ys[n + 1][m]);xs3 = int(xs[n + 1][m + 1]);ys3 = int(ys[n + 1][m + 1]);xs4 = int(xs[n][m + 1]);ys4 = int(ys[n][m + 1]);}if (abs(ys1*(xs2 - xs3) + ys2 * (xs3 - xs1) + ys3 * (xs1 - xs2)) > 80){pdc->MoveTo(xs1 + 320, ys1 + 200);pdc->SelectObject(pen1);pdc->LineTo(xs2 + 320, ys2 + 200);pdc->LineTo(xs3 + 320, ys3 + 200);pdc->LineTo(xs4 + 320, ys4 + 200);pdc->LineTo(xs1 + 320, ys1 + 200);x = (xs[n][m] + xs[n + 1][m + 1]) / 2;y = (ys[n][m] + ys[n + 1][m + 1]) / 2;x1 = int(x + 320);y1 = int(y + 200);pdc->ExtFloodFill(x1, y1, RGB(0, 255, 0), 0);//条件语句结束}pdc->MoveTo(xs1 + 320, ys1 + 200);pdc->SelectObject(pen2);pdc->LineTo(xs2 + 320, ys2 + 200);pdc->LineTo(xs3 + 320, ys3 + 200);pdc->LineTo(xs4 + 320, ys4 + 200);pdc->LineTo(xs1 + 320, ys1 + 200);}pdc->SelectObject(OldPen);delete pen1;delete pen2;pdc->DeleteDC();
}

基于MFC的圆环的消隐实现相关推荐

  1. 基于MFC的凸多面体的消隐实现

    基于MFC的凸多面体的消隐实现 本文实现程序的IDEIDEIDE是VS2017VS 2017VS2017. 一.新建项目 此处就不再赘述,没有有MFCMFCMFC基础可以先看第一个MFC的程序. 设置 ...

  2. 基于MFC SDI的图像处理程序(带效果图)

    基于MFC SDI的图像处理程序(带效果图) 收藏 本程序主要实现了位图的打开保存,JPG格式作为BMP格式,以及24位BMP转化到8位.4位.1位(黑白图)及灰度图.还有一些简单的算法如反色,采用高 ...

  3. 基于MFC的socket编程(异步非阻塞通信)

    对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其 ...

  4. 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)

    科学计算器(简化版) 最终界面: 全部源代码下载地址: 链接: http://download.csdn.net/detail/u012339743/8198227 详细编写过程: 1.    打开V ...

  5. 计算机图形学 | 基于MFC和二维变换的画图软件

    文章目录 基于MFC和二维变换的画图软件 摘 要 设 计 1 程序总体结构 1.1 总体结构设计 1.1.1 绘图设计 1.1.2 变换设计 2 程序实现 2.1 鼠标绘图的消息映射 2.2 图形绘制 ...

  6. 如何基于MFC制作简易绘图软件

    本文将讲解如何通过MFC制作一个简易的绘图软件 文章目录 一.构造软件的界面 二.画出图形 三.图形的保存与重绘 四.程序下载 一.构造软件的界面 首先新建一个MFC的工程,进入之后按F5调试,可以看 ...

  7. 基于MFC和OpenCV的图像处理小软件

    1.软件界面: 本程序是基于MFC的单文档(SDI)程序,每次可以打开耽搁图片文件,可以保存,另存为图片文件.支持打开jpg,png,ico,bmp,jpeg等格式的图片.图片打开后的界面如下: 2. ...

  8. 接口技术课程设计——一种基于MFC构造自动测量系统

    一种基于MFC构造自动测量系统 第一部分 课程设计概述 1 课程设计的目的与任务 1.1 使用智能仪器构造自动测量系统 1.2 使用MFC实现程序结构 2 课程设计题目 3 设计功能要求 4 课程设计 ...

  9. C++基于MFC课程设计——学习公社

    学习公社课程设计 学习公社 一.系统使用展示 二.系统主要结构 1.系统功能介绍 2.数据库表的设计 用户表 资源表 3.MySQL数据库与vs连接 三.主要源代码及分析: ==VS和MySQL的连接 ...

最新文章

  1. 秘籍 | 机器学习数据集网址大全
  2. axure文件如何加密_怎么样给PDF加密?PDF文件如何加密?
  3. HttpHelper之我见
  4. Netty自娱自乐之协议栈设计
  5. JavaEE实战班第十天
  6. 第一次注册csdn博客
  7. 分享一个开源的流程图绘制软件--Diagram Designer
  8. origin中画1:1线
  9. linux 双显卡 黑屏 amd,彻底解决AMD显卡win10开机黑屏问题
  10. XSS过滤绕过总结_xss绕过字符过滤
  11. OpenCV快速入门五:色彩空间转换
  12. RGB,YUV的来历及其相互转换
  13. Unexpected token u in JSON at position 0 解决
  14. flinkSql中自定义时间窗口开启时间
  15. java怎么设置cookie?java设置cookie教程
  16. 性能测试知识问题整理(三)
  17. Android开发实战《手机安全卫士》——5.“高级工具”模块实现 获取经纬度 锁屏 卸载
  18. 3D魔幻手游【龙族世界】Linux手工端CDK授权后台安卓端详细架设视频教程
  19. 友盟创始人蒋凡---谷歌中国地图工程师
  20. 人工智能与机器学习课程设计

热门文章

  1. 快速分析德邦快递走件信息,并筛选代收的单号
  2. 分布式系统和分布式数据库系统(介绍篇)
  3. 奇异值分解究竟是个啥,该如何理解
  4. 省市区三级级联JSON解析打印各级key及value
  5. TensorFlow Eager 教程
  6. 真正从零开始,TensorFlow详细安装入门图文教程!(linux)
  7. iOS企业证书的申请与制作
  8. MySQL的SQL基础(五)
  9. HBase配置AES加密
  10. jdk9安装及java环境配置