如何显示一个立方体的两点透视投影图(用数组存放正方体的各顶点坐标)?

#include<graphics.h>
#include<stdio.h>
#include<math.h>float l,m,n,d,t,g1,g2,g3;//两点透视
//P为经过两点透视后的立方体坐标,q则是使画图显示出来,而对p进行的倍率扩大,x扩大100,y扩大-100
//图像所选取数据参数为书上案例一致,l=n=0,m=-1.4,p=-0.1,q=0,r=-0.45,角度30
void twotoushi(float *p){int i,q[32],j=0;float a,b,c,d;for(i=0;i<32;i=i+4){a=p[i];b=p[i+1];c=p[i+2];d=p[i+3];p[i]=a*cos(t)+c*sin(t)+d*(l*cos(t)+n*sin(t));p[i+1]=b+d*m;p[i+2]=0;p[i+3]=a*(g1*cos(t)-g3*sin(t))+c*(g1*sin(t)+g3*cos(t))+d*(g1*(l*cos(t)+n*sin(t))+g3*(n*cos(t)-l*sin(t))+1);p[i]=p[i]/p[i+3];p[i+1]=p[i+1]/p[i+3];p[i+3]=1;}for(i=0;i<32;i=i+4){q[j++]=(int)(p[i]*100);q[j++]=(int)(p[i+1]*-100);}
//printf("两点透视后的各点坐标:\n");
//for(i=0;i<32;i=i+4)
//printf("%5.2f%5.2f\n",p[i],p[i+1]);
//printf("比例扩大之后的坐标:\n");
//for(i=0;i<16;i=i+2)
//printf("%5d%5d\n",q[i],q[i+1]);int s1[10]={q[0],q[1],q[2],q[3],q[10],q[11],q[8],q[9],q[0],q[1]};int s2[10]={q[4],q[5],q[6],q[7],q[14],q[15],q[12],q[13],q[4],q[5]};drawpoly(5,s1);drawpoly(5,s2);line(q[0],q[1],q[6],q[7]);line(q[2],q[3],q[4],q[5]);line(q[8],q[9],q[14],q[15]);line(q[10],q[11],q[12],q[13]);
}//主函数(因为画图原因,立方体位单位立方体,参数和书本上一致,为了使画图精准,在画图时将结果的x值扩大100倍,y值扩大-100倍率,但所使用方法正确)
int main(){int gd=DETECT,gmode;double pi=3.1415926;float p[32]={0,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1};printf("请输入平移的位置:\n");printf("l= ");scanf("%f",&l);printf("m= ");scanf("%f",&m);printf("n= ");scanf("%f",&n);printf("输入旋转角度:\n");scanf("%f",&t);t=t*pi/180;printf("输入投影透视变换参数:\n");printf("p= ");scanf("%f",&g1);printf("q= ");scanf("%f",&g2);printf("r= ");scanf("%f",&g3);initgraph(&gd,&gmode,"");twotoushi(p);getchar();getchar();closegraph();return 0;
}

运行后的立方体各点坐标:

输入远行参数条件:

运行后立方体的图案:

显示一个立方体的两点透视投影图(用数组存放正方体的各顶点坐标)相关推荐

  1. 编写立方体的一点透视投影图

    一.窗口到视区的坐标变换 1.窗口:在世界坐标系中,设置一矩阵区域,来观察整幅图中的部分内容. 2.视区:窗口映射到显示器上的区域称为视区. 3.坐标变换 (xv-xv_min)/(xv_max-xv ...

  2. 现代opengl 设计入门,坐标系统和立方体的纹理贴图

    本文在 现代opengl 设计入门,纹理贴图 一文的基础上,引入opengl坐标系统,实现立方体的纹理贴图.介绍了opengl 的5个空间,3个变换矩阵.如果看这部分介绍比较繁琐,可以直接看看效果图, ...

  3. 利用OpenGL的多视区分别在4个视区内显示空间四面体的透视投影图、主视图、俯视图、侧视图

    这还是计算机图形学基础的一个课后作业. 本来想偷偷懒只用OpenGL提供的gluLookAt.glViewport.gluPerspective来改变视区和观察方向实现三视图和透视投影图,而不用矩阵去 ...

  4. image1载入大图片时如果stretch=true,image1会显示出大图片的缩图,那么如何将这个缩图镜像复制一份赋值给另一个image2的picture呢?...

    image1载入大图片时如果stretch=true,image1会显示出大图片的缩图,那么如何将这个缩图镜像复制一份赋值给另一个image2的picture呢? Delphi / Windows S ...

  5. echarts 横坐标显示一个月,excel折线图横坐标最后一个点选择数据选不上是什么原因?...

    excel折线图横坐标最后一个点选择数据选不上是什么原因? 如果你说的是折线图横坐标选中的数据最后一个无法显示在横坐标上 您可以尝试一下 可以右击横坐标轴-设置坐标轴格式-选择大小与属性-对其方式-文 ...

  6. 4 UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它 们之间可能传递的消息,以下不是交互图的是( )

    标签: 软考初级程序员易错题,计算机基础, 面向对象基础,统一建模语言 (UML) UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它们之间可能传递的消息,以下不是交互图的是( ...

  7. sandy引擎学习笔记: 创建一个立方体

    问题:如何利用sandy的类库去创建一个立方体呢? 首先,我们要先了解sandy类库的结构 可以看到上面就官方网放出的类库表,有一些很容易理解,像sandy.events 这个和flash.event ...

  8. python 制作自己的新闻_新闻-十行代码,用Python做一个迷你版的美图秀秀

    十行代码,用Python做一个迷你版的美图秀秀 2020-02-28 10:16:08 作者: 匿名 浏览量:65次 美图秀秀相信大家都不陌生,大家只要操作美图秀秀,就可以P掉图片中脸上的一些瑕疵,让 ...

  9. opengl从画三角形到画一个立方体(三)

    上一节中,我们提到了好多的空间,那么本节重点讲述的是透视空间,之前的博文中也讲到透视矩阵的推导.视图矩阵的推导,这些都讲过,但是每次涉及到坐标的变换,这些又是那么的重要,所以经常的捡起来回忆回忆还是很 ...

  10. 12.opengl-显示一个立方体

    1.设置3D场景显示物体 实现3D场景少不3样矩阵: 模型矩阵(model): 对一个物体如何进行摆放等,其本质就是平移.旋转和缩放 观察矩阵(view): 让物体位于观察者哪个地方 投影矩阵(pro ...

最新文章

  1. 如何编写webService接口
  2. linux的共享端口,Gogs与Linux共享SSH22端口
  3. UA MATH567 高维统计专题2 Low-rank矩阵及其估计1 Matrix Completion简介
  4. 使用WSE实现Web Service安全
  5. 用户 sa 登录失败。_Sqlserver2008R2特定用户只能查看管理指定的数据库
  6. hibernate hql 关联查询_Hibernate【关联查询篇】
  7. 19【CTR15】会话兴趣⽹络
  8. 解决一次模拟post请求的时候,出现中文???的错误
  9. UI设计课EDC研究所1期 Part 9 -“特殊的字体”
  10. 设备管理器---usb大容量储存设备感叹号,USB大容量存储设备无法启动
  11. 在 isilon 中使用 ldap 登录 ftp 服务
  12. pythonstdin_Windows上Python读取stdin出错
  13. java joda 获取utc时间_Java获取时间与系统时间相差8小时终极解决方案
  14. python工程师工资一般多少-Python工程师的薪资到底有多高
  15. 区块链技术 ——区块链概述
  16. 非关系型KV数据库-Redis-01
  17. DWARF dSYM
  18. BGI-College生信入门——8、R语言基础(一)
  19. python整形_【python公开课|关于Python的整型,你都知道多少呢】- 环球网校
  20. TextView 添加 图片文字背景(注意可设置背景的)

热门文章

  1. miniprogram-ci官方文档
  2. Spring Core 之 Validation, Data Binding(校验和数据绑定)
  3. 哪个平台的身份证实名认证接口服务比较靠谱?
  4. java 蒙特卡洛_java算法3_蒙特卡洛方法(Monte Carlo method)求PI和椭圆面积
  5. 电信光猫 中兴ZXHN F412破解
  6. java雷霆战机源代码_java spring雷霆战机(小游戏源码)
  7. Android 小宝宝买装备案列创建
  8. 春分时节,迎一场春暖花开
  9. 【pyqt5学习】——添加菜单栏动作action,给动作触发triggered绑定事件
  10. tbody css 高度,html – CSS:无法为%滚动设置tbody height