计算机图形学课程设计
- 格式:doc
- 大小:43.50 KB
- 文档页数:4
一、图形基本变换原理
1.平移变换
将图形对象从一个位置(x, y)移到另一个位置(x ′,y ′)的变换,只改变图
形的位置,不改变图形的大小和形状 。
将矩形沿x 轴方向平移tx ,沿y 轴方向的平移距离为ty 。它只改变物体的
位置,不改变物体的大小和形状。
平移变换的公式为:⎪⎩⎪⎨⎧+Y =Y +X =X y
x t t ''
2.旋转变换
不改变物体的形状和大小,是一种刚性变换。
设P 点的坐标为(x ,y ),使P 点绕坐标原点逆时针旋转θ角(θ>0)到达
P ′点
其计算公式为:
x ′=xcos θ-ysin θ
y ′=xsin θ+ycos θ
3.比例变化
使图形按在x 和y 坐标轴方向分别按比例因子Sx 和Sy 放大或缩小的变换。
改变图形的大小和形状。
设平面上的一个点P 的坐标为(x, y ),经过比例变换后的坐标是(x ′,
y ′),其计算公式为:
x ′=x ·Sx
y ′=y ·Sy 其中,Sx 和Sy 为比例因子。 当Sx =Sy =1时:恒等比例变换
当Sx =Sy >1时:沿x ,y 方向等比例放大。
当Sx =Sy <1时:沿x ,y 方向等比例缩小
当Sx ≠Sy 时:沿x ,y 方向作非均匀的比例变换,图形变形
二、实现代码
#include
#include
void DrawStar(float x, float y, float r, float b){
int i; float px[19],py[19];
for(i = 2; i <= 16;i = i + 2){
px[i] = x + r * sin((i - 1) * M_PI / 8 +
b);
py[i] = y - r * cos((i - 1) * M_PI / 8 + b);
}
px[1] = x + 2.5 * r * sin(b);
px[9] = x - 2.5 * r * sin(b);
py[1] = y - 2.5 * r * cos(b);
py[9] = y + 2.5 * r * cos(b);
for(i = 3; i <= 15; i += 4){
px[i] = x + 2 * r * sin((i - 1) * M_PI / 8 + b);
py[i] = y - 2 * r * cos((i - 1) * M_PI / 8 + b);
}
px[5] = x + 1.5 * r * cos(b);
px[13] = x - 1.5 * r * cos(b);
py[5] = y + 2 * r * sin(b);
py[13] = y - 2 * r * sin(b);
for(i = 1; i < 16; i++)
line(px[i], py[i], px[i + 1], py[i + 1]);
line(px[1], py[1], px[16], py[16]);
for(i=1; i<= 16; i++)
line(x, y, px[i], py[i]);
}
void main(){
int i; float b = 0, x = 320, y = 240, r = 40;
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "c:\\");
for(i = 0; i < 10; i++){
cleardevice();
r += 5;
DrawStar(x, y, r, b);
delay(100);
}
for(i = 0; i < 15; i++){
cleardevice();
r -= 4;
DrawStar(x, y, r, b);
delay(100);
}
for(i = 0; i < 10; i++){
cleardevice();
x += 15;
DrawStar(x, y, r, b);
delay(100);
}
for(i = 0; i < 10; i++){
cleardevice();
y += 10;
DrawStar(x, y, r, b);
delay(100);
}
for(i = 0; i <= 32; i++){
cleardevice();
DrawStar(x, y, r, i * M_PI / 32);
delay(100);
}
getch();
closegraph();
}
三、图形变换结果
四、总结
通过本次课程设计,掌握了图形的平移变换、旋转变换、比例变换等基本图形变换方法,同时对图形学这门课有了更深的了解,在设计过程中还存在着不足,仍需多加努力.