【计算机图形学】三维图形投影和消隐(正等轴测投影图 消隐图构造)

news2025/4/28 18:19:21

模块4-2 三维图形投影和消隐

一 实验目的

  1. 编写三维图形各种变换的投影或消隐算法

二 实验内容

1:自行选择三维物体(不能选长方体),建立坐标系,给定点的三维坐标值,建立边表结构,完成正等轴测投影图。

实验结果如下图所示:

 

2:自行选择三维物体(不能选长方体),建立坐标系,给定点的三维坐标值,画出三维物体的消隐图。


实验结果如下图所示:

 

 

三 程序说明

最终的实验代码如下表所示:

2

//

// 程序名称:消隐图

// 功    能:实现预设三维物体的消隐图。

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-4-14

#include <graphics.h>     

#include <conio.h>

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

using namespace std;

//顶点表

float point[20][4] = {

    {0,0,150,1},//0

    {250,0,150,1},//1

    {250,0,50,1},//2

    {300,0,50,1},//3

    {300,0,0,1},//4

    {300,200,0,1},//5

    {0,200,0,1},//6

    {0,200,100,1},//7

    {0,150,100,1},//8

    {0,150,150,1},//9

    {50,150,150,1},//10

    {50,50,150,1},//11

    {250,50,150,1},//12

    {250,50,50,1},//13

    {150,50,50,1},//14

    {150,200,50,1},//15

    {100,200,100,1},//16

    {100,150,100,1},//17

    {300,200,50,1},//18

    {0,0,0,1}//19

};

//环表

int ring[72] = {

    //parallel XOY

    0,1,12,11,10,9,0,//visible

    8,17,16,7,8,//visible

    2,3,18,15,14,13,2,//visible

    4,19,6,5,4,//invisible

    //parallel XOZ

    1,2,3,4,19,0,1,//invisible

    12,13,14,11,12,//visible

    10,17,8,9,10,//visible

    5,6,7,16,15,18,5,//visible

    //parallel YOZ

    1,2,13,12,1,//visible

    0,9,8,7,6,19,0,//invisible

    3,4,5,18,3,//visible

    //slope

    11,10,17,16,15,14,11 //visible

};

//面表

int surface[12][2] = {

    //parallel XOY

    {0,6},{7,11},{12,18},{19,23},

    //parallel XOZ

    {24,30},{31,35},{36,40},{41,47},

    //parallel YOZ

    {48,52},{53,59},{60,64},

    //slope

    {65,71}

};

//矩阵乘法,a*b=c,a[m][n],b[n][q],c[m][q]

void MatrixMultiplication(float a[20][4], float b[4][4], float c[20][4]) {

    int i = 0, j = 0, k = 0;

    for (i = 0; i < 20; i++) {

         for (j = 0; j < 4; j++) {

             c[i][j] = 0;

             for (k = 0; k < 4; k++) {

                  c[i][j] = c[i][j] + a[i][k] * b[k][j];

             }

         }

    }

}

//主函数

int main() {

    //float point[20][4]

    //int ring[72]

    //int surface[12][2]

    int i, j, start, end;

    //正等轴测向量

    float zdz[4][4] = { {0.707,0,-0.408,0},{-0.707,0,-0.408,0},{0,0,0.8165,0},{0,0,0,1} };

    //备份顶点集

    float point1[20][4];

    double x1, x2, x3, z1, z2, z3;

    //E

    double valueE[12];

    //矩阵乘法=>正等轴测

    MatrixMultiplication(point, zdz, point1);

    initgraph(1000, 700);

    //移动x坐标和y坐标

    for (i = 0; i < 20; i++) {

         point1[i][0] = 500 - point1[i][0] * 1.2;//220

         point1[i][2] = 350 - point1[i][2] * 1.2;//140

    }

    //求E的值

    for (i = 0; i < 12; i++) {

         j = surface[i][0];

         x1 = point1[ring[j]][0];

         x2 = point1[ring[j + 1]][0];

         x3 = point1[ring[j + 2]][0];

         z1 = point1[ring[j]][2];

         z2 = point1[ring[j + 1]][2];

         z3 = point1[ring[j + 2]][2];

         valueE[i] = (z2 - z1) * (x3 - x2) - (x2 - x1) * (z3 - z2);

    }

    for (i = 0; i < 12; i++) {

         if (valueE[i] >= 0) {

             start = surface[i][0];

             end = surface[i][1];

             for (j = start; j < end; j++) {

                  line(point1[ring[j]][0], point1[ring[j]][2], point1[ring[j + 1]][0], point1[ring[j + 1]][2]);

             }

         }

    }

    _getch();

    closegraph();

    return 0;

}

1

//

// 程序名称:正等轴测投影图

// 功    能:实现预设三维物体的正等轴测投影图。

// 编译环境:VS2019,EasyX_20220116

// 最后修改:2022-4-14

#include <graphics.h>

#include <conio.h>

#include <iostream>

#include <math.h>

using namespace std;

//和分割线之间的距离

const int gap = 50;

//预设三维体的点坐标

int X[33] = { 0,0,0,0,0,0,0,0,100,100,0,100,100,100,100,100,100,100,100,0,0,0,0,100,100,100,100,0,0,0,0,100,100 };

int Y[33] = { 0,0,250,250,200,150,0,0,0,0,0,0,150,200,250,250,0,0,150,150,0,150,200,200,150,200,250,250,200,250,250,250,250 };

int Z[33] = { 100,0,0,50,50,100,100,0,0,100,100,100,100,50,50,0,0,100,100,100,100,100,50,50,100,50,50,50,50,50,0,0,50 };

//顶点总数

const int num = 33;

//正等轴测图绘制

void fun() {

    POINT* p = new POINT[num];

    for (int i = 0; i < num; i++) {

         p[i].x = 0.7071 * X[i] - 0.7071 * Y[i] + 500;

         p[i].y = 0.4082 * X[i] + 0.4082 * Y[i] - 0.8165 * Z[i] + 350;

    }

    for (int i = 0; i < num - 1; i++) {

         setcolor(YELLOW);

         line(p[i].x, p[i].y, p[i + 1].x, p[i + 1].y);

    }

    free(p);

}

int main() {

    initgraph(1000, 700);

    //调用函数

    fun();

    _getch();

    closegraph();

    return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/475003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【VM服务管家】VM4.x算法模块开发_4.2 联合OpenCV开发

目录 4.2.1 环境配置&#xff1a;使用OpenCV开发的环境配置4.2.2 图像类算法&#xff1a;使用OpenCV开发算法模块的方法 4.2.1 环境配置&#xff1a;使用OpenCV开发的环境配置 描述 环境&#xff1a;VM4.0.0及以上 VS2013 现象&#xff1a;使用第三方库OpenCV开发时&#xff…

记录-做一个文件拖动到文件夹的效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在我的电脑中&#xff0c;回想一下我们想要把一个文件拖动到另一个文件夹是什么样子的呢 1:鼠标抓起文件 2:拖动文件到文件夹上方 3:文件夹高亮&#xff0c;表示到达指定位置 4:松开鼠标将文件夹放入文…

ChatGPT能让智能客服更上一层楼么?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 现实生活中&#xff0c;智能客服的身影已随处可见。 随着全球经济从以产品为主向以服务为主转型&#xff0c;体验经济也快速发展。客户服务逐渐成为一个独立的产业&#xff0c;而客服中心也成为所有企业的基本部门。然而&am…

港科夜闻|香港科技大学校董会主席沈向洋院士一行到访香港科大(广州)

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科技大学校董会主席沈向洋院士一行到访香港科大(广州)。沈向洋院士于2023年3月6日起担任香港科大校董会主席&#xff0c;这是他上任以后首次率队到访香港科大(广州)。这也标志着&#xff0c;两校将继续坚定不移地在“…

JavaEE——单例模式

文章目录 一、介绍什么是单例模式二、饿汉模式三、懒汉模式四、讨论两种模式的线程安全问题 一、介绍什么是单例模式 在介绍单例模式之前&#xff0c;我们得先明确一个名词设计模式。 所谓设计模式其实不难理解&#xff0c;就是在计算机这个圈子中&#xff0c;呢些大佬们为了…

驾考系统C#winform驾照考试系统

驾考系统C#winform驾照考试系统 c#&#xff0c;sqlite&#xff0c;winform &#xff0c;.net framwork4.0驾照考试系统 有兴趣的朋友可以修改源代码玩玩!我用的数据库是sqlite &#xff08;随着我国社会的不断进步和发展&#xff0c;越来越多的家庭拥有汽车&#xff0c;人们…

[linux-sd-webui]api之dreambooth训练

https://gitee.com/leeguandong/dreambooth-for-diffusionhttps://gitee.com/leeguandong/dreambooth-for-diffusionhttps://zhuanlan.zhihu.com/p/584736850https://zhuanlan.zhihu.com/p/584736850这个库使用的是diffusers库&#xff0c;现在主要就是kohya-ss/sd-scripts混合…

模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

一、模拟退火算法 模拟退火算法是一种全局优化算法&#xff0c;解决的问题通常是找到一个最小化&#xff08;或最大化&#xff09;某个函数的全局最优解。它通过模拟物理退火的过程来搜索解空间&#xff0c;在开始时以一定的温度随机生成初始解&#xff0c;然后一步步降低温度…

java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏

画笔Graphics Java中提供了Graphics类&#xff0c;他是一个抽象的画笔&#xff0c;可以在Canvas组件(画布)上绘制丰富多彩的几何图和位图。 Graphics常用的画图方法如下&#xff1a; drawLine(): 绘制直线drawString(): 绘制字符串drawRect(): 绘制矩形drawRoundRect(): 绘制…

YOLOv8——CV界的XGBoost

yolov8是ultralytics公司于2023年1月开源的anchor-free的最新目标检测算法框架。 封装在ultralytics这个库中&#xff1a;https://github.com/ultralytics/ultralytics 它具有以下优点&#xff1a; 1&#xff0c;性能速度领先&#xff1a;借鉴了之前许多YOLO版本的trick&#x…

spring常用的事务传播行为

事务传播行为介绍 Spring中的7个事务传播行为: 事务行为 说明 PROPAGATION_REQUIRED 支持当前事务&#xff0c;假设当前没有事务。就新建一个事务 PROPAGATION_SUPPORTS 支持当前事务&#xff0c;假设当前没有事务&#xff0c;就以非事务方式运行 PROPAGATION_MANDATORY…

ChatGPT能胜任高级程序员吗?

与开发人员信任的其他软件开发工具不同&#xff0c;AI工具在训练、构建、托管和使用方式等方面都存在一些独特的风险。 自2022年底ChatGPT发布以来&#xff0c;互联网上便充斥着对其几乎相同比例的支持和怀疑的论调。不管你是否喜欢它&#xff0c;AI正在逐步进入你的开发组织。…

JAVA ssm客户信息管理系统idea开发mysql数据库web结构计算机java编程springMVC

一、源码特点 idea ssm客户信息管理系统是一套完善的web设计系统mysql数据库springMVC框架mybatis&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开 发。 java ssm客户信息管理系统idea开发mysql数据…

【五一创作】 SAAS-HRM系统概述与搭建环境

SAAS-HRM系统概述与搭建环境 学习目标&#xff1a; 理解SaaS的基本概念 了解SAAS-HRM的基本需求和开发方式掌握Power Designer的用例图 完成SAAS-HRM父模块及公共模块的环境搭建完成企业微服务中企业CRUD功能 初识SaaS 云服务的三种模式 IaaS&#xff08;基础设施即服务…

业务维度digest日志的记录与监控方案

需求 ​   为了满足从业务整体的维度 实现监控和链路复原&#xff0c;我们希望对于一个业务接口&#xff0c;记录一行请求日志&#xff0c;并通过某个 Unique Id&#xff08;如UserId、OrderId&#xff09;将多行日志关联起来&#xff0c;最终产出一批和业务强相关的数据&am…

软件维护(Software maintenance)的流程

软件维护(Software maintenance)是一个软件工程名词&#xff0c;是指在软件产品发布后&#xff0c;因修正错误、提升性能或其他属性而进行的软件修改。 软件维护主要根据需求变化或硬件环境的变化对应用程序进行部分或全部的修改&#xff0c;修改时应充分利用源程序。修改后要填…

2023年的深度学习入门指南(10) - 前端同学如何进行chatgpt开发

2023年的深度学习入门指南(10) - 前端同学如何进行chatgpt开发 在第二篇&#xff0c;我们使用openai的python库封装&#xff0c;搞得它有点像之前学习的PyTorch一样的库。这一节我们专门给它正下名&#xff0c;前端就是字面意义上的前端。 给gpt4写前端 下面我们写一个最土的…

【BeautifulSoup】——05全栈开发——如桃花来

目录索引 介绍&#xff1a;解析库&#xff1a; 安装&#xff1a;pip install BeautifulSoup4pip install lxml 标签选择器&#xff1a;1.string属性&#xff1a;.name属性&#xff1a;获取标签中的属性值&#xff1a; 实用——标准选择器&#xff1a;使用find_all()根据标签名查…

百城巡展 | 人大金仓4月“双向奔赴”告一段落

人间最美四月天&#xff0c;人大金仓走过上海、宁波、合肥&#xff0c;联合伙伴发布医疗、金融、信息安全、电子档案等多个关键领域的信创联合解决方案&#xff0c;共同为数字基础设施的安全和可持续发展贡献力量&#xff0c;吸引了线上线下近7000人参与。 左右滑动&#xff0c…