当前位置: 首页 > news >正文

行唐县网站建设公司西部数码网站管理助手2.0

行唐县网站建设公司,西部数码网站管理助手2.0,专业网页制作哪家好,wordpress分类汉字转拼音作者#xff1a;非妃是公主 专栏#xff1a;《计算机图形学》 博客地址#xff1a;https://blog.csdn.net/myf_666 个性签#xff1a;顺境不惰#xff0c;逆境不馁#xff0c;以心制境#xff0c;万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、三维图形的投… 作者非妃是公主 专栏《计算机图形学》 博客地址https://blog.csdn.net/myf_666 个性签顺境不惰逆境不馁以心制境万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、三维图形的投影变换二、平行投影1. 正投影Ⅰ. 三视图① 主视图② 俯视图③ 侧视图④ 三视图效果展示Ⅱ. 正轴测图2. 斜投影Ⅰ. 斜等测图Ⅱ. 斜二侧图三、透视投影1. 一点透视四、三维观察基本流程the end…… 专栏推荐 专栏名称专栏地址软件工程专栏——软件工程计算机图形学 专栏——计算机图形学 操作系统专栏——操作系统软件测试专栏——软件测试机器学习专栏——机器学习数据库专栏——数据库算法专栏——算法 专栏系列文章 文章名称文章地址直线生成算法(DDA算法)计算机图形学01——DDA算法中点BH算法绘制直线计算机图形学02——中点BH算法改进的中点BH算法计算机图形学03——改进的中点BH算法中点Bresenham画椭圆计算机图形学04——中点BH绘制椭圆中点BH算法绘制任意斜率直线计算机图形学05——中点BH算法绘制任意斜率的直线中点Bresenham画圆计算机图形学06——中点BH算法画圆有效边表法的多边形扫描转换计算机图形学07——有效边表法绘制填充多边形中点BH算法绘制抛物线 100xy2100x y^2100xy2计算机图形学08——中点BH绘制抛物线二维观察之点的裁剪计算机图形学09——二维观察之点裁剪二维观察之线的裁剪计算机图形学10——二维观察之线裁剪二维观察之多边形的裁剪计算机图形学11——二维观察之多边形裁剪二维图形的几何变换计算机图形学12——二维图形几何变换三维图形的几何变换计算机图形学13——三维图形几何变换三维图形的投影变换计算机图形学14——三维图形投影变换 序 计算机图形学英语computer graphics缩写为CG是研究计算机在硬件和软件的帮助下创建计算机图形的科学学科是计算机科学的一个分支领域主要关注数字合成与操作视觉的图形内容。虽然这个词通常被认为是指三维图形事实上同时包括了二维图形以及影像处理。 一、三维图形的投影变换 三维图形的投影变换可分为两类平行投影和透视投影。 二、平行投影 平行投影可分为两类正投影和斜投影。 1. 正投影 其中正投影中又可以分为三视图和正轴测图。 Ⅰ. 三视图 ① 主视图 主视图是逆着y轴方向去看所以y轴的坐标为0进而变化矩阵如下 Tzox[1000000000100001]T_{zox}\begin{bmatrix} 1000\\ 0000\\ 0010\\ 0001\\ \end{bmatrix}\ Tzox​​1000​0000​0010​0001​​  由于主视图已经落在了xoz平面上所以不需要其它操作。 代码实现如下 /// summary /// 将点转化为其次坐标 /// /summary /// param namevertex点/param /// returns齐次坐标/returns Matrix vertex3D2qici(VERTEX3D vertex3D) {Matrix qiciVertex(4, 1);qiciVertex.matrix[0][0] vertex3D.x;qiciVertex.matrix[1][0] vertex3D.y;qiciVertex.matrix[2][0] vertex3D.z;qiciVertex.matrix[3][0] 1;return qiciVertex; }VERTEX3D qici2vertex3D(Matrix qici) {VERTEX3D res;res.x qici.matrix[0][0];res.y qici.matrix[1][0];res.z qici.matrix[2][0];return res; }VERTEX3D mainViewTransform3D(VERTEX3D vertex3D) {Matrix qiciVertex vertex3D2qici(vertex3D);Matrix transform; // 去掉y坐标变换矩阵transform.matrix[0][0] 1;transform.matrix[1][1] 0;transform.matrix[2][2] 1;transform.matrix[3][3] 1;Matrix qicires dotMatrix(transform, qiciVertex);VERTEX3D res qici2vertex3D(qicires); return res; }② 俯视图 俯视图逆着z轴的方向来看因此需要将z轴上的坐标置为0第一步变换矩阵如下 Txoy[1000010000000001]T_{xoy}\begin{bmatrix} 1000\\ 0100\\ 0000\\ 0001\\ \end{bmatrix}\ Txoy​​1000​0100​0000​0001​​  同时由于最终要是的三个视图落在一个平面内(xoz平面)因此还需要对视图进行旋转使得俯视图绕着x轴旋转-90度第二度变换矩阵如下 TRx[10000cosθ−sinθ00sinθcosθ00001][100000100−1000001]T_{Rx}\begin{bmatrix} 1000\\ 0cos\theta-sin\theta0\\ 0sin\thetacos\theta0\\ 0001\\ \end{bmatrix}\begin{bmatrix} 1000\\ 0010\\ 0-100\\ 0001\\ \end{bmatrix} TRx​​1000​0cosθsinθ0​0−sinθcosθ0​0001​​​1000​00−10​0100​0001​​ 此处 θ−90∘\theta-90^{\circ}θ−90∘ 最后还要将主视图和俯视图分开保持一定间距还要让俯视图向下平移一个单位向量 −z0-z_0−z0​。 TTz[10000100001−z00001]T_{Tz}\begin{bmatrix} 1000\\ 0100\\ 001-z_0\\ 0001\\ \end{bmatrix} TTz​​1000​0100​0010​00−z0​1​​ 所以总变换矩阵如下 p′TTz⋅TRx⋅Txoy⋅ppT_{Tz}\cdot T_{Rx}\cdot T_{xoy}\cdot p p′TTz​⋅TRx​⋅Txoy​⋅p VERTEX3D topViewTransform3D(VERTEX3D vertex3D) {Matrix qiciVertex vertex3D2qici(vertex3D);Matrix transform1; // 去掉z坐标变换矩阵transform1.matrix[0][0] 1;transform1.matrix[1][1] 1;transform1.matrix[2][2] 0;transform1.matrix[3][3] 1;Matrix qicitmp dotMatrix(transform1, qiciVertex); // 去掉z坐标VERTEX3D tmp qici2vertex3D(qicitmp);tmp rotationForXTransform3D(tmp, -90); // 沿x轴旋转90度tmp transTransform3D(tmp, 0, 0, -100); // 向下平移-1个单位return tmp; }③ 侧视图 侧视图为逆着x轴看所以要将x方向的坐标置为0 Tyoz[0000010000100001]T_{yoz}\begin{bmatrix} 0000\\ 0100\\ 0010\\ 0001\\ \end{bmatrix} Tyoz​​0000​0100​0010​0001​​ 同理为了与主视图画在一个平面内使侧视面绕z轴旋转90∘90^{\circ}90∘如下 TRx[cosθ−sinθ00sinθcosθ0000100001][0−100100000100001]T_{Rx}\begin{bmatrix} cos\theta-sin\theta00\\ sin\thetacos\theta00\\ 0010\\ 0001\\ \end{bmatrix}\begin{bmatrix} 0-100\\ 1000\\ 0010\\ 0001\\ \end{bmatrix} TRx​​cosθsinθ00​−sinθcosθ00​0010​0001​​​0100​−1000​0010​0001​​ 然后与主视图有一定间距向x轴负方向平移−x0-x_0−x0​如下 TTx[100−x0010000100001]T_{Tx}\begin{bmatrix} 100-x_0\\ 0100\\ 0010\\ 0001\\ \end{bmatrix} TTx​​1000​0100​0010​−x0​001​​ 所以总变换矩阵如下 p′TTx⋅TRz⋅Tyoz⋅ppT_{Tx}\cdot T_{Rz}\cdot T_{yoz}\cdot p p′TTx​⋅TRz​⋅Tyoz​⋅p 实现代码如下 VERTEX3D sideViewTransform3D(VERTEX3D vertex3D) {Matrix qiciVertex vertex3D2qici(vertex3D);Matrix transform1; // 去掉x坐标变换矩阵transform1.matrix[0][0] 0;transform1.matrix[1][1] 1;transform1.matrix[2][2] 1;transform1.matrix[3][3] 1;Matrix qicitmp dotMatrix(transform1, qiciVertex); // 去掉x坐标VERTEX3D tmp qici2vertex3D(qicitmp);tmp rotationForZTransform3D(tmp, 90); // 沿x轴旋转90度tmp transTransform3D(tmp, -100, 0, 0); // 向x负方向平移-1个单位return tmp; }④ 三视图效果展示 测试效果代码 void testThreeView() {VERTEX3D vertex3D_1 { 100,100,100 };VERTEX3D vertex3D_2 { 0,100,0 };VERTEX3D vertex3D_3 { 200,100,0 };VERTEX3D vertex3D_4 { 200,0,0 };// 主视图VERTEX3D res1 mainViewTransform3D(vertex3D_1);VERTEX3D res2 mainViewTransform3D(vertex3D_2);VERTEX3D res3 mainViewTransform3D(vertex3D_3);VERTEX3D res4 mainViewTransform3D(vertex3D_4);glBegin(GL_LINES);glVertex2f(-res1.x, res1.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res1.x, res1.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res1.x, res1.z);glVertex2f(-res4.x, res4.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res4.x, res4.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res4.x, res4.z);glEnd();// 上视图res1 topViewTransform3D(vertex3D_1);res2 topViewTransform3D(vertex3D_2);res3 topViewTransform3D(vertex3D_3);res4 topViewTransform3D(vertex3D_4);glBegin(GL_LINES);glVertex2f(-res1.x, res1.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res1.x, res1.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res1.x, res1.z);glVertex2f(-res4.x, res4.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res4.x, res4.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res4.x, res4.z);glEnd();// 侧视图res1 sideViewTransform3D(vertex3D_1);res2 sideViewTransform3D(vertex3D_2);res3 sideViewTransform3D(vertex3D_3);res4 sideViewTransform3D(vertex3D_4);glBegin(GL_LINES);glVertex2f(-res1.x, res1.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res1.x, res1.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res1.x, res1.z);glVertex2f(-res4.x, res4.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res2.x, res2.z);glVertex2f(-res4.x, res4.z);glVertex2f(-res3.x, res3.z);glVertex2f(-res4.x, res4.z);glEnd();cout res1.x res1.z endl; }// 显示图形 void Display(void) {glClear(GL_COLOR_BUFFER_BIT); //用当前背景色填充窗口// 此处需增加调用基本图形生成函数glColor3f(0.0f, 0.0f, 0.0f); //设置当前的绘图颜色为红色glBegin(GL_LINES);glVertex2d(-400, 0);glVertex2d(400, 0);glVertex2d(0, 300);glVertex2d(0, -300);glEnd();glColor3f(1.0f, 0.0f, 0.0f); //设置当前的绘图颜色为红色testThreeView();glFlush(); //处理所有的OpenGL程序 }// 初始化OpenGL场景 void Initial() {glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); //设置投影参数gluOrtho2D(-400.0, 400.0, -300, 300.0); // 投影面上的模型坐标范围 }int main(int argc, char* argv[]) {//testTransTransform();//testScaleTransform3D();//testSymmetryForXTransform3D();//testSymmetryForYTransform3D();//testSymmetryForZTransform3D();//testSymmetryForXOYTransform3D();//testSymmetryForYOZTransform3D();//testSymmetryForZOXTransform3D();//testMiscutTransform3D();//testRotationForXTransform3D();//testRotationForYTransform3D();//testRotationForZTransform3D();//testThreeView();glutInit(argc, argv); // glut初始化glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//初始窗口显示模式glutInitWindowSize(800, 600); //设置窗口的尺寸glutInitWindowPosition(200, 200); //设置窗口的位置glutCreateWindow(基本图形生成); //创建一个窗口glutDisplayFunc(Display); //设置当前窗口的显示回调函数Initial(); //完成窗口初始化glutMainLoop(); //启动主GLUT事件处理循环 return 0; }其中旋转函数的定义见专栏中文章计算机图形学三维图形的几何变换其中有关于用到的几何变换函数的详细定义。 Ⅱ. 正轴测图 三视图与正轴测都属于正投影但各有优缺点如下 按照投影面与三个坐标轴之间的夹角可以分为等轴测、正二侧、正三侧。 正轴测的变换矩阵与公式推导 2. 斜投影 斜轴测图将三维物体向一个单一的投影面做平行投影但投影方向不垂直于投影面所得的平面图形。常用的斜轴侧图有斜等侧图和斜二侧图。 Ⅰ. 斜等测图 后面用到了补充…… Ⅱ. 斜二侧图 后面用到了补充…… 三、透视投影 1. 一点透视 两点透视和三点透视较为复杂在此不再展开介绍。 四、三维观察基本流程 这里还有些不懂懂了的时候再来补充 hahaha~ ヾ(≧▽≦*)o the end…… 三维图形的几何变换到这里就要结束啦~~到此既是缘分欢迎您的点赞、评论、收藏关注我不迷路我们下期再见 我是Cherries一位计算机科班在校大学生写博客用来记录自己平时的所思所想 内容繁杂又才疏学浅难免存在错误欢迎各位大佬的批评指正 我们相互交流共同进步 注本文由非妃是公主发布于https://blog.csdn.net/myf_666转载请务必标明原文链接https://blog.csdn.net/myf_666/article/details/129877371
http://www.hkea.cn/news/14278908/

相关文章:

  • 网站建设公司的江西锦宇建设集团有限公司网站
  • 做像58这种分类信息网站赚钱吗php网站开发的发展前景
  • 软件技术属于什么专业类别做网站需要找人优化吗
  • 做标书网站怎样建网站域名
  • 模板王网站怎么下载不了模板哈尔滨网站开发联系薇
  • 做商城网站都需要什么如何建免费的企业网站
  • 公司网站建设 入账搜索引擎优化服务
  • 南通网站定制企业网站接广告能赚多少钱
  • 网站优化公司排名怎么在百度上做免费网站
  • 建设网站教程论坛wordpress获取指定分类的描述
  • 网站建设基本知识代码外链工厂
  • 如何建设网站设计网站页尾的作用
  • app开发需要哪些知识seo实训报告
  • 广州网站排名推广公司嵌入式软件开发面试问题
  • 邯郸建设企业网站建设银行山东 2015招聘网站
  • 微网站免费建设平台厦门建设与管理局官网
  • 网站文章更新怎么通知搜索引擎网络免费推广平台
  • 深圳东门地铁站叫什么哈尔滨大型网站开发
  • 作品展示html5网站模板文章收录网站
  • 空间备案网站崇信县门户网站
  • 太原网站优化步骤做网站排名大概要多少
  • 网站建设的行业代码是多少wordpress企业网站制作视频教程
  • 一个做问卷调查的网站好领导不愿意做招聘网站怎么办
  • 商城网站开发嵌入支付宝重庆网站关键词排名优化
  • 网站建设力度不够论文哪些网站有好的营销案例
  • 宝安做网站怎么样中小企业 网站建设
  • 免费建站 永久怎么做企业的网站
  • 西安营销型网站建站wordpress分级菜单
  • 广厦建设集团官方网站什么是淘宝搜索关键词
  • 网站备案去哪备案怎样让公司网站更吸引人