计算机图形学 旋转平移原理,计算机图形旋转操作详细步骤

圆:可以通过中心位置指定角度获得。

椭圆:可以通过将椭圆的长轴和短轴旋转所需角度​​来获得其旋转。

7ca077cefc804d1fba7c6fa589e7c483.png

433e517e0c9cecc36a9c85c54c53b883.png

旋转矩阵为顺时针方向。

a2b5e917c762a619f1ab987a4f35357f.png

旋转矩阵是逆时​​针方向。

37e9ff58b388738b07c994ecaa8cbbe6.png

均匀坐标旋转矩阵(顺时针)

302eac554f5cc2cbd1732bd6c4622f24.png

齐次坐标旋转矩阵(逆时针)

241b2862c50b180cfc6178172349aeae.png

围绕任意点旋转:如果要旋转对象或围绕任意点旋转点, 首先, 我们将要围绕其旋转的点转换为原点。然后围绕原点旋转点或对象, 最后, 再次将其平移到原始位置。我们绕任意点旋转。

示例:要旋转点(x, y)

(xc yc)是绕逆时针方向旋转的点

步骤1:将点(xc yc)转换为原点

30dee845bfd9f077edb75b2caadddd13.png

步骤2:围绕原点旋转(x, y)

39f90a96abf9c3368614581e39c1529c.png

步骤3:将旋转中心平移回原始位置

310219235a099d19e9ca6823c1cfc10a.png

063877846b7159853065e322e2115cf1.png

示例1:证明围绕原点的2D旋转是可交换的, 即R1 R2 = R2 R1。

解决方案:R1和R2是旋转矩阵

6c80db0bc1ace00880e093fa804636eb.png

示例2:绕着原点旋转线CD, 使其端点为(3, 4)和(12, 15), 沿逆时针方向旋转45°。

解决方案:点C(3, 4)

d68de893bf5f1783fda520cf0861bbb0.png

e4fd661737e375e9fe34878ac22ead00.png

801d16f0c5acffec74ce9efc231f2515.png

例3:绕线AB绕其原点沿顺时针方向旋转AB, 端点为A(2, 5)和B(6, 12)。

解决方案:沿顺时针方向旋转。矩阵是

799a8f0d2831e54a397eb7f0700aeecd.png

步骤1:旋转点A(2, 5)。取角30°

99f9f398cfa8d3022460d4f8003a8079.png

步骤2:旋转B点(6, 12)

832205b3b3e8785438fd2b6a1398a121.png

775c4617f6a9a3b0184d697e0119d890.png

旋转线的程序:

#include

#include

#include

int main()

{

intgd=0, gm, x1, y1, x2, y2;

double s, c, angle;

initgraph(&gd, &gm, “C:\\TC\\BGI”);

setcolor(RED);

printf("Enter coordinates of line: ");

scanf(“%d%d%d%d”, &x1, &y1, &x2, &y2);

cleardevice();

setbkcolor(WHITE);

line(x1, y1, x2, y2);

getch();

setbkcolor(BLACK);

printf("Enter rotation angle: ");

scanf(“%lf”, &angle);

setbkcolor(WHITE);

c = cos(angle *3.14/180);

s = sin(angle *3.14/180);

x1 = floor(x1 * c + y1 * s);

y1 = floor(-x1 * s + y1 * c);

x2 = floor(x2 * c + y2 * s);

y2 = floor(-x2 * s + y2 * c);

cleardevice();

line(x1, y1 , x2, y2);

getch();

closegraph();

return 0;

}

输出:

旋转前

65f1780e96c6f53680b66beab56df6fd.png

117384399b39df27b11e6dc22705cc66.png

cff46c50858e718148b1229f78b32894.png

旋转后

66b7ccbb6d3683cef14f427e0a016c13.png

程序旋转三角形:

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

16c13.png)

程序旋转三角形:

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

[外链图片转存中…(img-yRKm2GJL-1714796792544)]

[外链图片转存中…(img-g45DIx0K-1714796792545)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值