计算机图形学课程设计

  • 格式:doc
  • 大小:43.50 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、图形基本变换原理

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();

}

三、图形变换结果

四、总结

通过本次课程设计,掌握了图形的平移变换、旋转变换、比例变换等基本图形变换方法,同时对图形学这门课有了更深的了解,在设计过程中还存在着不足,仍需多加努力.