图形学实验之显示一个飞机(C++实现)

本文介绍了如何使用C++进行图形学实验,重点在于展示一个飞机模型并实现用户通过键盘输入控制飞机的缩放和旋转。用户可以设定缩放比例和旋转角度及中心。
摘要由CSDN通过智能技术生成

 

 

显示一个飞机:(飞机各顶点的坐标存放在数组中)

(1)按比例缩小或放大.缩放比例由键盘输入,缩放的参考点由用户确定;
(2)旋转.由键盘输入旋转角度和旋转中心;

实验源码:

#include<iostream>

using namespace std;

#include<graphics.h>


void showAirplane(int numberOfApex,int *p) {

int gdriver, gmode;

int *q;//临时存储空间

int xReference, yReference;//缩放参考点

float xscaling, yscaling;//缩放比例

int xrolling, yrolling;//旋转中心

float angle;//旋转角度

cout << "请输入缩放参考点:";

cin >> xReference;

cin >> yReference;

cout << "请输入x坐标的缩放比例:";

cin >> xscaling;

cout << "请输入y坐标的缩放比例:";

cin >> yscaling;

cout << "请输入旋转中心:";

cin >> xrolling;

cin >> yrolling;

cout << "请输入旋转角度:";

cin >> angle;

angle = float(angle / 57.3);//角度转化为弧度

q = new int[2 * numberOfApex];

initgraph(&gdriver, &gmode, "");

drawpoly(numberOfApex, p);//画初始图形

for (int i = 0; i < numberOfApex; i++) {//进行缩放变换

*(q + 2 * i) = int(*(p + 2 * i)*xscaling - xReference*xscaling + xReference + 0.5);

*(q + 2 * i + 1) = int(*(p + 2 * i + 1)*yscaling - yReference*yscaling + yReference + 0.5);

}

setcolor(RED);

drawpoly(numberOfApex, q);//画缩放变换后的图形

for (int i = 0; i < numberOfApex; i++) {//进行旋转变换

*(q + 2 * i) = int(*(p + 2 * i)*cos(angle) - *(p + 2 * i + 1)*sin(angle) + xrolling - xrolling*cos(angle) + yrolling*sin(angle)+0.5);

*(q + 2 * i + 1) = int(*(p + 2 * i)*sin(angle) + *(p + 2 * i + 1)*cos(angle) + yrolling - yrolling*cos(angle) - xrolling*sin(angle) + 0.5);

}

setcolor(YELLOW);

drawpoly(numberOfApex, q);//画旋转变换后的图形

delete q;

getchar();

getchar();

closegraph();

}


int main() {

int numberOfApex;//顶点个数

int *p;//存放顶点

cout << "请输入顶点的个数:";

cin >> numberOfApex;

p = new int[2 * numberOfApex];

for (int i = 0; i < numberOfApex; i++) {

cout << "请输入第" << i + 1 << "个顶点:";

cin >> *(p + 2 * i);

cin >> *(p + 2 * i + 1);

}

showAirplane(numberOfApex, p);//调用函数

delete p;

return 0;

}



 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AHU_YZQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值