图形学实验之显示一个飞机(C++实现)
生活随笔
收集整理的這篇文章主要介紹了
图形学实验之显示一个飞机(C++实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?
顯示一個飛機:(飛機各頂點的坐標存放在數組中)
(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;}?
總結
以上是生活随笔為你收集整理的图形学实验之显示一个飞机(C++实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Haskell语言实现判断一个整数是否是
- 下一篇: 先来先服务调度算法(C++实现)