矩阵的变换。包括缩放、平移、错切

矩阵的变换。包括缩放、平移、错切-the transformation matrix. Incl...原文链接

#include<graphics.h>
#include<math.h>
typedef struct Matrix
{
float _a11,_a12,_a13;
float _a21,_a22,_a23;
float _a31,_a32,_a33;
} Matrix;
typedef struct Vert3
{
float x;
float y;
float z;

} Vert3;
Matrix *MatTranslation(Matrix * mat,float xoffset,float yoffset)
{
mat->_a11=1.0f;mat->_a12=0.0f;mat->_a13=0.0f;
mat->_a21=0.0f;mat->_a22=1.0f;mat->_a23=0.0f;
mat->_a31=xoffset;mat->_a32=yoffset;mat->_a33=1.0f;

return mat;
}
Matrix *MatTranslationBS(Matrix * mat,float xoffset,float yoffset)
{
mat->_a11=xoffset;mat->_a12=0.0f;mat->_a13=0.0f;
mat->_a21=0.0f;mat->_a22=yoffset;mat->_a23=0.0f;
mat->_a31=0.0f;mat->_a32=0.0f;mat->_a33=1.0f;

return mat;
}
Matrix *MatTranslationCQ(Matrix * mat,float xoffset,float yoffset)
{
mat->_a11=1.0f;mat->_a12=xoffset;mat->_a13=0.0f;
mat->_a21=yoffset;mat->_a22=1.0f;mat->_a23=0.0f;
mat->_a31=0.0f;mat->_a32=0.0f;mat->_a33=1.0f;

return mat;
}
Matrix *MatTranslationx(Matrix * mat)
{
mat->_a11=1.0f;mat->_a12=0.0f;mat->_a13=0.0f;
mat->_a21=0.0f;mat->_a22=-1.0f;mat->_a23=0.0f;
mat->_a31=0.0f;mat->_a32=0.0f;mat->_a33=1.0f;

return mat;
}
Matrix *MatTranslationy(Matrix * mat)
{
mat->_a11=-1.0f;mat->_a12=0.0f;mat->_a13=0.0f;
mat->_a21=0.0f;mat->_a22=1.0f;mat->_a23=0.0f;
mat->_a31=0.0f;mat->_a32=0.0f;mat->_a33=1.0f;

return mat;
}
Matrix *MatTranslationyx(Matrix * mat)
{
mat->_a11=0.0f;mat->_a12=1.0f;mat->_a13=0.0f;
mat->_a21=1.0f;mat->_a22=0.0f;mat->_a23=0.0f;
mat->_a31=0.0f;mat->_a32=0.0f;mat->_a33=1.0f;

return mat;
}
Matrix *MatRotation(Matrix * mat,float alpha)
{
float sinalpha = (float)sin(alpha);
float cosalpha = (float)cos(alpha);
mat->_a11=cosalpha; mat->_a12=sinalpha; mat->_a13=0.0f;
mat->_a21=-sinalpha; mat->_a22=cosalpha; mat->_a23=0.0f;
mat->_a31=0.0f; mat->_a32=0.0f; mat->_a33=1.0f;
return mat;
}

Vert3 * MultVertWithMatrix(Vert3 *vertout, Vert3 *vertin, Matrix mat)
{
vertout->x = mat._a11 * vertin->x + mat ._a21 * vertin ->y + mat ._a31 * vertin ->z ;
vertout->y = mat._a12 * vertin->x + mat ._a22 * vertin ->y + mat ._a32 * vertin ->z ;
vertout->z = mat._a13 * vertin->x + mat ._a23 * vertin ->y + mat._a33 * vertin ->z ;
return vertout;

}
main()
{
    Vert3 a[4]={{0,0,0},{0,0,0},{0,0,0}};
    Vert3 c[4]={{0,0,0},{0,0,0},{0,0,0}};
    Vert3 d[4]={{0,0,0},{0,0,0},{0,0,0}};
    Vert3 e[4]={{0,0,0},{0,0,0},{0,0,0}};
    Vert3 f[4]={{0,0,0},{0,0,0},{0,0,0}};
    Vert3 b[4]={{150,150,1},{150,250,1},{200,250,1},{200,150,1}};
    Matrix m={1,0,0,0,1,0,0,0,1};
    int i,j;

    int graphDriver=DETECT;
    int graphMode=0;
    initgraph(&graphDriver,&graphMode,"");
    setbkcolor(0);
    setcolor(1);

    moveto(b[0].x,b[0].y);
    for(j=0;j<4;j++)
    lineto(b[j].x,b[j].y);
    lineto(b[0].x,b[0].y);
    setcolor(2);
    MatTranslationBS(&m,1.30,1.6);
    i=0;
    MultVertWithMatrix(&a[i], &b[i], m);
    moveto(a[0].x,a[0].y);
    for(i=1;i<4;i++){
        MultVertWithMatrix(&a[i],&b[i], m);
        lineto(a[i].x,a[i].y);
    }
    lineto(a[0].x,a[0].y);
    setcolor(3);
MatTranslation(&m,100,200);
    i=0;
    MultVertWithMatrix(&c[i], &b[i], m);
    moveto(c[0].x,c[0].y);
    for(i=1;i<4;i++){
        MultVertWithMatrix(&c[i],&b[i], m);
        lineto(c[i].x,c[i].y);
    }
    lineto(c[0].x,c[0].y);
    setcolor(4);

MatRotation(&m,-0.6);
    i=0;
    MultVertWithMatrix(&d[i], &b[i], m);
    moveto(d[0].x,d[0].y);
    for(i=1;i<4;i++){
        MultVertWithMatrix(&d[i],&b[i], m);
    lineto(d[i].x,d[i].y);
    }
    lineto(d[0].x,d[0].y);
    setcolor(5);
MatTranslationyx(&m);
    i=0;
    MultVertWithMatrix(&e[i], &b[i], m);
    moveto(e[0].x,e[0].y);
    for(i=1;i<4;i++){
        MultVertWithMatrix(&e[i],&b[i], m);
    lineto(e[i].x,e[i].y);
    }
    lineto(e[0].x,e[0].y);
    setcolor(6);
MatTranslationCQ(&m,0.6,0.9);
    i=0;
    MultVertWithMatrix(&f[i], &b[i], m);
    moveto(f[0].x,f[0].y);
    for(i=1;i<4;i++){
        MultVertWithMatrix(&f[i],&b[i], m);
    lineto(f[i].x,f[i].y);
    }
    lineto(f[0].x,f[0].y);

    getch();
    closegraph();
}

转载于:https://www.cnblogs.com/feiyublog/archive/2011/07/26/2117737.html

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

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

相关文章

关于Treap的学习感受

好了我就很愉快的回来补坑了~ Treap也是一种平衡树&#xff0c;它较普通二叉查找树而言&#xff0c;每个节点被赋予了一个新的属性&#xff1a;优先级&#xff08;没错就是类似优先队列的优先&#xff09;&#xff0c;对于Treap中的每个结点&#xff0c;除了它的权值满足二叉查…

2022年考研结束了

为期两天的研究生考试结束了。我没参加研究生考试&#xff0c;所以对研究生考试的压力不从得知&#xff0c;我从一个外人的角度来看&#xff0c;这无非就是一个简单的考试&#xff0c;考上了欢喜雀跃&#xff0c;考不上嘛&#xff0c;我就会说&#xff0c;大不了来年再考一次&a…

挂“洋头”卖奶粉,澳优还要欺骗好久

澳优奶粉近期被质疑非进口产品&#xff0c;公司总部实为湖南一家贴牌商。该奶粉生产商澳优乳业公司回应称其为“国外产品与本国品牌相结合”的国际化企业。但奶粉包装仍被质疑误导消费者&#xff0c;且售价偏高&#xff0c;澳优方称“与其高端品质相比只属于中上水平”&#xf…

DefWindowProc

简介 函数功能&#xff1a;该调用DefWindowProc函数时使用窗口过程接收的相同参数。函数原型&#xff1a;LRESULT DefWindowProc&#xff08;HWND hWnd&#xff0c;UINT Msg&#xff0c;WPARAM wParam&#xff0c;LPARAM IParam&#xff09;&#xff1b;功能 DefWindowProc这个…

mysql通过局域网访问数据库_MySQL数据库之局域网内访问同一个mysql数据库

本文主要向大家介绍了MySQL数据库之局域网内访问同一个mysql数据库 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。局域网内访问同一个mysql数据库。一、运行cmd&#xff0c;输入mysql -u root -p。二、输入mysql数据库密码&#xff0c…

排序算法之冒泡排序(C/C++)

冒泡法排序&#xff1a;平均时间复杂度O(n*n) 最差时间复杂度O(n*n) 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数重复以上工…

约翰·冯·诺依曼:一个向上帝买了挂的男人!!

来源|David 小咸鱼/新智元约翰冯诺依曼是20世纪最有影响力的人物之一。从原子弹&#xff0c;到计算机、再到量子力学、气候变化&#xff0c;你可能很难再找出像这样对我们今天的世界和生活影响更大的科学家了。在20世纪的天才中&#xff0c;有几个杰出的人物&#xff1a;爱因斯…

mysql pdo prepare_PDO::prepare

PDO::preparePDO::prepare — 准备要执行的SQL语句并返回一个 PDOStatement 对象(PHP 5 > 5.1.0, PECL pdo > 0.1.0)说明语法public PDOStatement PDO::prepare ( string $statement [, array $driver_options array() ] )为 PDOStatement::execute() 方法准备要执行的S…

使用webpack配置react并添加到flask应用

学习react&#xff0c;配置是很痛苦的一关&#xff0c;虽然现在有了create-react-app这样方便的工具&#xff0c;但是必须要自己配置一遍&#xff0c;才能更好地进行项目开发。 首先要明确一个概念&#xff1a;react的文件必须经过编译才能被浏览器识别&#xff0c;因此我们需要…

POJ 2976 Dropping Tests

http://poj.org/problem?id2976 题目大意&#xff1a;给定n个二元组(a,b)&#xff0c;扔掉k个二元组&#xff0c;使得剩下的 最大。 这两天一直在搞分数规划&#xff0c;有了前两道题&#xff08;3621、2728&#xff09;&#xff0c;这道题就是完完全全的大水题了。 设 r100…

回调函数这个是什么鬼?

这是一个同学在微信给我提问的问题。要搞清楚回调函数&#xff0c;我们首先要搞清楚函数&#xff0c;函数其实就是一个地址&#xff0c;这个地址描述了这个函数在内存中的位置。但是函数和变量也是一样的&#xff0c;有类型&#xff0c;对变量来说&#xff0c;变量会分成各种类…

一个整数转换成字符串(C/C++自己写的算法)

自己写的一个算法&#xff1a;将一个int型数转换为string char *itoa(int num, char *str){assert(NULL ! str);int i1, j0;if (num < 0){str[j]-;num (-1)*num;}if (0 num){str[j] 0;str[j] \0;return str; }while (! (num/i < 10)){i i*10;}while (num > 0){st…

mysql模糊查询与预编译_mysql预编译模糊查询恶心了我一天的时间,终于弄好了。但是还有一点不明白。如下:...

不用这么麻烦&#xff0c;你可以定义个boolean的变量&#xff0c;用来记录传参是不是description&#xff0c;如果是&#xff0c;在paramList的循环里做模糊拼接&#xff0c;不是&#xff0c;就不用boolean descFlagfalse; //标记传来的参数是否为description&#xff0c;为后面…

小米12比我的小米10还便宜

昨天晚上&#xff0c;小米发布会发布了新的小米12手机&#xff0c;价格很亲民&#xff0c;比我两年前买的小米10还便宜。这还不算&#xff0c;小米12比小米10还更好看。小米在尝试曲面屏之后&#xff0c;终于觉得曲面屏不再是一个可以用来炫耀的卖点了。我自己的小米10曲面屏&a…

庆祝51CTO六周年:资源牛人有奖比拼,生日当天疯狂送豆!(已结束)

2011年8月15日&#xff0c;是51CTO成立6周年的日子。为庆祝这一盛典&#xff0c;特推出此活动。一、活动时间&#xff1a;2011年8月5日——2011年8月25日 24:00二、活动奖项及规则&#xff1a;1、资源牛人金奖&#xff1a;入围资源牛人排行榜前十名的Down友已经产生&#xff0c…

Centos7:mysql5.6安装,配置及使用(RPM方式)

1.首先安装好jdk环境,本机所用环境为jdk1.8 2.卸载MariaDB(Centos7自带)与Mysql 2.1卸载:MariaDB #rpm -qa | grep -i mariadb //查询安装的MariaDB#rpm -e --nodeps 查到软件名 //卸载相关MariaDB的所有软件#find / -name mariadb#whereis mariadb //查找是否有相关配置目录及…

判断一个单链表中是否存在环

#判断一个单链表中是否存在 环。 #设置两个指针(fast, slow)&#xff0c;初始值都指向头&#xff0c;slow每次前进1步&#xff0c;fast每次前进2步&#xff0c; 大概的思路如下&#xff1a; 如果链表存在环&#xff0c;则fast必定先进入环&#xff0c;而slow后进入环&#xff…

mysql3.5 所有表_mysql学习笔记3.5

紧接着笔记3的训练介绍一个对于我来说的比较难的难点&#xff01;&#xff01;&#xff01;&#xff01;select * from sc;select student.sno,sname,avg(grade) as平均分fromstudent,scwhere student.snosc.snogroup bystudent.snohaving avg(grade)>90/*这一个条件我竟然忘…

CPU上电后加载程序的流程 | 基于RK3399

芯片上电解复位之后执行的第一段程序&#xff0c;在芯片中称之为Bootrom loader。这部分程序在芯片制造过程中固化到其内部的ROM空间&#xff0c;具备只读属性&#xff0c;在实际使用过程中无法修改这部分内容&#xff0c;这部分程序的知识产权也仅归属于芯片公司所有。其实&am…

IPv6与IPv4的区别

Technorati 标签: Hank--network porter■第一个就不说哈&#xff0c;32bit直接升级到128bit了。 从2的32次方升级到2的128次方了&#xff0c;地球上的每一粒沙子都可以分到一个IP地址。这个是IPv6最拉风的地方. ■在IPv6中&#xff0c;路由器不能用自动配置机制来配置接口&…