圆:可以通过中心位置指定角度获得。
椭圆:可以通过将椭圆的长轴和短轴旋转所需角度来获得其旋转。
旋转矩阵为顺时针方向。
旋转矩阵是逆时针方向。
均匀坐标旋转矩阵(顺时针)
齐次坐标旋转矩阵(逆时针)
围绕任意点旋转:如果要旋转对象或围绕任意点旋转点, 首先, 我们将要围绕其旋转的点转换为原点。然后围绕原点旋转点或对象, 最后, 再次将其平移到原始位置。我们绕任意点旋转。
示例:要旋转点(x, y)
(xc yc)是绕逆时针方向旋转的点
步骤1:将点(xc yc)转换为原点
步骤2:围绕原点旋转(x, y)
步骤3:将旋转中心平移回原始位置
示例1:证明围绕原点的2D旋转是可交换的, 即R1 R2 = R2 R1。
解决方案:R1和R2是旋转矩阵
示例2:绕着原点旋转线CD, 使其端点为(3, 4)和(12, 15), 沿逆时针方向旋转45°。
解决方案:点C(3, 4)
例3:绕线AB绕其原点沿顺时针方向旋转AB, 端点为A(2, 5)和B(6, 12)。
解决方案:沿顺时针方向旋转。矩阵是
步骤1:旋转点A(2, 5)。取角30°
步骤2:旋转B点(6, 12)
旋转线的程序:
#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;
}
输出:
旋转前
旋转后
程序旋转三角形:
最后
按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。
学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。
“道路是曲折的,前途是光明的!”
16c13.png)
程序旋转三角形:
最后
按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。
学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。
“道路是曲折的,前途是光明的!”
[外链图片转存中…(img-yRKm2GJL-1714796792544)]
[外链图片转存中…(img-g45DIx0K-1714796792545)]