圖像幾何變換c語言
⑴ 怎麼用c語言繪制矩形,並且進行幾何變換,如畫一矩形,然後將矩形關於y軸對稱
用graphics頭文件
⑵ 利用C語言實現二維圖形的變換
你先看看吧,思路大概就是這樣,不懂的問我。
#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
struct point
{
float x;
float y;
};
void translation(point*pt, float xp,float yp,int num)//num代表點的個數
{
for(int i=0;i<num;i++)
{
(pt+i)->x+=xp;
(pt+i)->y+=yp;
}
}
void scale(point *pt,float xs,float ys,int num)
{
for(int i=0;i<num;i++)
{
(pt+i)->x*=xs;
(pt+i)->y*=ys;
}
}
void rotation(point *pt,float angle,int num)
{
int a[2][2];
angle=angle/180*3.141592657;
a[0][0]=cos(angle);
a[0][1]=-sin(angle);
a[1][0]=sin(angle);
a[1][1]=cos(angle);
point* temp;
for(int i=0;i<num;i++)
{
temp->x=(pt+i)->x;
temp->y=(pt+i)->y;
(pt+i)->x=temp->x*a[0][0]+a[0][1]*temp->y;
(pt+i)->y*=temp->x*a[1][0]+a[1][1]*temp->y;
}
}
int main()
{
int i=0,N,mode,angle,xp,yp,xk,yk,num;
cout<<"please input the number of point "<<endl;
scanf("%d",&N);
num=N;
point pt[10];
while(N--)
{
printf("please input points(x,y):\n");
scanf("%f%f",&pt[i].x,&pt[i].y);
i++;
}
printf("please input motions\n");
printf("0 stand for translation:\n");
printf("1 stand for scale:\n");
printf("2 stand for rotation:\n");
scanf("%d",&mode);
switch(mode)
{
case 0:
printf("please input the translation in x and y direction respectivly:\n");
cin>>xp>>yp;
translation(pt, xp,yp,num);
break;
case 1:
printf("please input the scale in x and y direction respectivly:\n");
scanf("%f%f",&xk,&yk);
scale(pt, xk,yk,num);
break;
case 2:
printf("please input the angle:\n");
scanf("%f",&angle);
rotation(pt, angle,num);
break;
}
printf("after translatiton or scale or rotation:\n");
for(int i=0;i<num;i++)
printf("%f %f\n",pt[i].x,pt[i].y);
}
⑶ 三維圖形的幾何變換(平移,旋轉,放縮,錯切)
平移變換
只改變圖形的位置,不改變圖形的大小和形狀
旋轉變換
仍保持圖形各部分之間的線性關系和角度關系,變換後的直線段的長度保持不變
比例變換
是使圖形對象按比例因子放大或縮小的變換,可以改變圖形的大小和形
狀
錯切變換
是使圖形對象產生類似於滑動錯位變形的變換
投影變換
把三維物體變為二維圖形表示的變換稱為投影變換。有兩類基本的投影變換:平行投影
和透視投影
⑷ 問一道c語言題 利用數組實現平面點的幾何變換
#include <stdio.h>
#include <math.h>
int main () {
double x,y,x2,y2;
int type;
double dx,dy;
double sx,sy;
double a_d,a_r;
scanf("%lf,%lf",&x,&y);
scanf("%d",&type);
if (type==1){
scanf("%lf,%lf",&dx,&dy);
x2=x+dx; y2=y+dy;
printf("%d,%d\n",(int)x2,(int)y2);
} else if (type==2){
scanf("%lf,%lf",&sx,&sy);
x2=x*sx; y2=y*sy;
//printf("%g,%g\n",x2,y2);
printf("%d,%d\n",(int)x2,(int)y2);
} else if (type==3){
scanf("%lf",&a_d);
a_r = a_d / 180.0 * 3.141592653589;
x2 = x * cos(a_r) - y * sin(a_r);
y2 = x * sin(a_r) + y * cos(a_r);
printf("%d,%d\n",(int)x2,(int)y2);
} else printf("transorm type errot !\n");
return 0;
}
輸出格式若要浮點型,可用: printf("%g,%g\n",x2,y2);
⑸ 電子通信工程的課程設置
工程設計導論
Introction to Engineering Design
本課程先討論工程師的角色和職責,然後以一個小日常用品的創新設計過程為載體讓學生學習使用一些會議、組織、計劃、決策方面的工具,並作一些書面和口頭報告的練習,為今後學習和工作打基礎。
程序設計基礎
Fundamentals of Programming
是工學一年級學生的必修課,旨在培養學生初步程序設計能力。本課程採用工學較為普遍使用的C語言為編程工具,主要講授面向過程的程序設計方法及演算法結構,使學生在了解C語言的成分和程序構成的基礎上,掌握結構化程序的編程技巧,學會使用函數、數組、指針、結構體、文件等知識編程解決一些實際問題。同時也注意提高理論修養,使學生在掌握C語言之後有能力自學其他高級語言。
工程師職業道德與責任
Ethics and Professionalism of Engineers
本課程介紹工程師在社會發展中所扮演的角色、工程師的社會責任、職業道德以及工程師對於公眾健康、安全、環境和可持續發展的責任。並討論工程師與環境、環境保護、領導才能、社會平等、工程法律基礎、專業注冊機構和工程職業法令等方面的問題。
創新設計項目
Innovative Design
本課程為跨學科的團隊合作項目,鼓勵學生參加全國、省「挑戰杯」競賽、全國電子設計競賽、ACM國際大學生程序競賽、廣東省高校軟體杯比賽、廣東省大學生程序設計競賽等各種競賽,以科研立項為基礎,以創新學分為激勵機制,充分發揮廣大學生參加科技創新項目的積極性,培養學生的工程實踐與科技創新能力,全面提高學生的綜合能力與素質。
電磁兼容
Electromagnetism Compatibleness
本課程是電子通信類專業的專業選修課,主要介紹電磁兼容基本原理和概念、電磁兼容預測和分析方法、電磁干擾控制技術、電磁兼容測量與實驗技術、電磁兼容標准。
選修課程:數字電路
計算機控制技術
Computer Control Technique
本課程介紹了計算機控制系統及其組成、分類、發展概況及趨勢。分別討論了輸入輸出介面與過程通道的硬體和軟體設計、數字程序控制技術、常規及復雜控制技術、計算機控制系統的應用程序設計與實現技術、計算機控制系統的設計原則、步驟及工程實現等。通過該課程使學生學習計算機控制技術的基本原理和思想方法,掌握與運用自動控制理論的基本方法,培養在理論上進行系統分析與設計的能力,培養計算機硬體和軟體的應用能力,增強解決工程實際中出現的問題的能力。
選修課程:自動控制原理
專用集成電路技術
Technique of Integrated Circuits
本課程是針對集成電路製造和晶元級設計,分析集成電路中的元器件的結構、版圖、特性;分析存在的寄生效應及其解決方案;介紹數字和模擬電路的各種基本單元的物理設計等基本知識。為今後從事微電子技術工作打下基礎。
選修課程:模擬電子技術、數字電路
現代電力電子技術
Modern Power Electronic Technique
本課程主要以介紹目前最具發展前景的全控型電力電子器件的基本結構、工作原理、主要參數、應用特點,以及器件應用中的驅動、保護等基本問題,分別介紹在硬PWM開關和軟PWM開關條件下的各類變換電路。通過本課程的學習使學生熟悉各種電力電子器件的特性和使用方法,掌握各種變換電路的結構、工作原理和控制方法,獲得電力電子技術必要的基本理論、基本分析方法以及基本技能,為從事與電力電子技術應用相關的工程技術工作和科學研究打下一定的基礎。
選修課程:模擬電子技術、數字電路
生物感測器
Biosensor
生物感測器是在生命科學和信息科學之間發展起來的一個交叉學科。生物感測器在國民經濟的各個領域有著十分廣泛的應用,特別是食品、制葯、化學工業中的過程檢測、環境檢測、臨床醫學檢測、生命科學研究等。通過本課程的學習,了解生物感測器的定義、分類。了解現代主要生物感測器的工作原理,如酶感測器器、微生物感測器、免疫感測器、半導體生物感測器、光學生物感測器、熱學生物感測器、聲學生物感測器等。
選修課程:感測器與檢測技術
現代信號處理導論
Introction of Modern Signal Processing
本課程講授現代智能信號處理的主要方法。對當前信號處理領域有關神經網路、模糊技術、遺傳演算法、進化計算以及信息融合等內容進行介紹與研討。通過該課程學習使學生能了解該領域的最新知識,掌握基本方法。
選修課程:數字信號處理
統計信號處理
Statistical Signal Processing
本課程是電子信息類專業的一門選修課,主要介紹統計信號處理的內容和方法,包括隨機過程、統計信號檢測、統計信號估值、統計信號濾波、模擬信號最佳解調、數字信號最佳解調等。課程側重於基本概念和基本方法的介紹,旨在通過本課程的學習,能夠對統計信號處理的原理及方法有一個全面系統的了解,建立統計信號處理的概念。同時使學生在學習和掌握這些知識的同時,能夠在思維上得到鍛煉,在分析問題和解決問題的能力上得到培養和提高。
選修課程:數字信號處理
生物醫學信號處理
Biomedical Signal Processing
本課程是電子信息類專業的專業選修課程。生物醫學信號處理在生命科學研究、醫學診斷、臨床治療等方面起著重要的作用。本課程旨在讓學生掌握生物醫學信號處理方面的基本原理、方法和發展趨勢,使學生具備以下兩項技能:
(1)提取原始生物醫學信息,獲取和處理生物醫學信號的技能;
(2)解釋所獲實驗結果的物理性質的技能。
選修課程:數字信號處理
智能儀器
Intellectualized Instrument
本課程的任務是在學習電子技術基礎,感測器原理及微機原理等專業基礎課程的基礎上,了解智能儀器的概念及其設計,學會利用單片機設計智能儀器的各種功能模塊,了解每個環節上的抗干擾措施,以便今後能從事智能儀器的設計、研發工作。學習主要內容有:智能儀器的功能特點、構成形式及發展;智能儀器中模擬量、數字量的輸入與輸出;智能儀器中的通訊技術;智能儀器中的抗干擾技術;智能儀器系統的設計以及相關的智能技術。
選修課程:微處理器與微計算機系統
語音信號處理技術
Processing technology of Speech Signal
本課程旨在讓學生了解和掌握語音信號處理的理論基礎,各種方法和某些主要應用。主要內容有:語音信號的基本性質和數字模型,短時時域處理技術,短時傅里葉分析,語音波形數字編碼,同步語音處理和倒譜分析,線性預測編碼,矢量量化,隱馬爾可夫模型,語音壓縮,語音合成,語音識別和語音增強等典型應用。
選修課程:數字信號處理
可編程式控制制器及應用
Programmable Logic Controller
本課程是電子信息類專業的一門選修課,以目前最常使用的可編程式控制制器為目標機型,以能力培養為主線,以拓寬專業知識面為目的,全面介紹可編程式控制制器的原理及應用。主要內容包括:可編程式控制制器的組成與工作原理,控制器的系統配置與指令系統,特殊功能模塊,典型程序設計,PLC的系統聯網等。
選修課程:微處理器與微計算機系統
電子通信工程導論項目
Electricity and Communication Engineering Project
本課程向即將開始專業學習的學生介紹基於CDIO理念的教學大綱內容,使學生了解未來學習的專業課程及各種實踐活動,灌輸CDIO注重培養學生的個人能力與協同能力,尤其是項目組織、設計、開發和實施能力,以及溝通能力和協調能力的思想,從而培養學生的創新意識、協作精神和理論聯系實際的學風。並通過一個電子通信產品實例(如超聲儀器,GPS等),由教師及工程師介紹產品的構成與設計,綠色產品理念與所學課程的關系。使學生一開始就以一個工程師的角度去面對即將開始的專業課學習,並提前了解即將所學課程與實際產品的關系。
基本電路理論
Fundamentals of Electric Circuits
本課程是一門重要的專業基礎課,是學習電類工程技術的理論基礎。通過本課程的學習,使學生掌握電路的基本理論和基本分析方法,並具備必要的實踐技能,為學習後續課及今後的工作打好基礎。本課程在培養學生認真嚴肅的科學作風和抽象思維能力、邏輯推理能力、實驗研究能力、分析和解決實際問題的能力等方面起著重要作用。
模擬電子技術
Electronic Circuits
本課程是一門重要的專業基礎課,它是研究各種半導體器件的性能、電路及其應用的學科。其主要任務是闡述電子電路的組成原理,主要功能及性能指標等。通過本課程的學習,學生將掌握常用的基本電子電路的分析與設計方法,並有初步的實驗技能。
數字電路
Digital Circuits
本課程是一門重要的專業基礎課,主要內容有:邏輯代數基礎,集成邏輯電路,組合邏輯電路分析和設計,觸發器,時序邏輯電路分析和設計,脈沖波形的產生和整形,大規模集成電路,A/D、D/A轉換器。
信號與系統
Signals and Systems
本課程是一門專業基礎理論課、研究生入學考試課。主要討論信號分析、系統分析的一些基本線性方法以及信號通過LTI系統的一些重要結論,包括:信號的時域沖激分解,LTI系統的時域表徵、求解,卷積演算法,信號的頻域分解,信號的頻譜分析,傅氏變換,時頻對應關系,LTI系統的頻域表徵、求解,傳輸與濾波,抽樣定理,Laplace變換,z變換,系統函數,零極點圖,傅氏變換的幾何估值,LTI系統的實現方框圖,因果系統的復頻域求解等。
選修課程:基本電路原理
微處理器與微計算機系統
Microprocessor and Micro-computer System
本課程計算機原理部分著重闡明以8086/8088為CPU的微型計算機的原理及應用。硬體方面主要介紹微處理器的功能和應用;軟體方面主要介紹匯編語言程序設計的基本概念,基本方法和一些技巧。課程介面部分著重闡明微型計算機介面技術的基本原理和方法,課程硬軟結合,以硬為主,著重應用。
選修課程:模擬電子電路、數字電路。
高頻電子線路
High Frequency Electronic Circuits
本課程是一門主要技術專業課,它的任務是研究高頻電子線路的基本原理與基本分析方法,以單元電路的分析與設計為主。通過本課程的學習,學生將掌握無線電信號的發送、接收與傳輸原理,具有一定的分析問題與解決問題的能力。
選修課程:模擬電子技術
電子測量與儀器
Electronic Measurement and Apparatus
本課程是電子類專業的專業必修課,通過學習使學生理解掌握電子測量的基本概念和各類儀器的工作原理,培養他們成為具有一定分析處理和動手能力的技術人員。通過本課程的學習,學生將掌握電子測量和電子測量儀器的基礎知識,並能熟練地運用各類儀器進行各種參數的測量,著重掌握測量誤差,測量儀器的工作原理以及示波器的工作原理和應用。
選修課程:模擬電子技術、數字電路
微機控制與檢測項目
Microcomputer Control and Detection Project
該課程是繼「微機原理與介面技術」課之後開出的二級項目。其目的是訓練學生綜合運用學過的知識,獨立設計綜合性的微機介面系統。要求系統地提出設計思想、選定設計方案並進行整體設計,包括硬體電路原理分析和軟體框圖及說明,並解決安裝與調試中遇到的問題。
綜合電子模擬與設計項目
Synthesis Analog and Digital Circuit Project
本課程以軟體模擬為輔,硬體設計為重點,指導學生設計模擬電路和數字邏輯電路相結合的電子系統。培養和鍛煉學生獨立分析問題和解決問題的能力。本課程適合通信、電子信息工程專業學生選修。
感測器與檢測技術
Transcer and Measurement
本課程的教學內容主要包括:測試系統的基本概念,感測器的一般特性與分析方法,感測器的工作原理及應用,感測器在機電系統中的應用等四部分。通過本課程的學習,使學生掌握測試系統的設計和分析方法,能夠根據工程需要選用合適的感測器,並能夠對測試系統的性能進行分析及對測得的數據進行處理。
選修課程: 模擬電子電路、數字電路。
嵌入式系統及應用
Embedded System and Application
嵌入式系統是針對特定用途而定製的,強調硬體與軟體的協同設計。因此,課程要求學生必須同時掌握硬體與軟體方面的基本知識與技能。在硬體方面,要求學生了解嵌入式系統的基本原理及相關微處理器,存儲器,外圍設備,介面的基本知識。在軟體方面,要求學生熟悉嵌入式操作系統,了解嵌入式系統開發的一般過程,掌握實時操作系統(RTOS)的基本功能和設計方法,了解和熟悉一些常用的嵌入式系統的開發工具和開發方法,熟悉嵌入式系統的典型應用及產品設計開發的步驟等。
選修課程: 微處理器與微機算計系統
電磁場理論
Electromagnetic Theory
本課程是一門理工科電子信息類專業理論性較強的必選專業基礎課,是涉足無線電領域的一門重要的必修課程。主要內容包括:矢量分析,靜態場分析與計算,靜態場邊值問題的解法,時變電磁場基礎,平面電磁波基礎,波導與諧振腔,天線基礎等。
自動控制原理
The Theory of Automatic Control
本課程是電子信息工程專業選修課。本課程的學習目的在於使學生掌握經典控制理論的基本概念,基本原理和基本方法。要求學生在牢固掌握控制理論基本概念的基礎上,具備對簡單系統進行定性分析、定量估算和動態模擬的能力,為專業課學習和參加控制工程實踐打下必要的基礎。
選修課程:信號與系統
數字信號處理
Digital Signal Processing
本課程是電子工程、通信工程專業的一門重要的專業骨幹課。主要討論數字信號處理的一些基本演算法以及實現方法,包括:模擬信號的數字化處理過程,信號的數字譜分析,DFT、FFT演算法,FIR數字濾波器的設計方法、IIR數字濾波器的設計方法,典型DSP應用系統分析等。
選修課程:EEG9204信號與系統
EDA技術及應用
EDA Technology and Application
本課程以VHDL的基本語言和實用技術為重點,介紹了基於EDA技術的VHDL理論和實踐方面知識。本課程適合電子工程、通信、計算機應用技術、數字信號處理等學科領域和專業的高年紀學生選修。學生將學習和使用VHDL進行電子設計,從而提高學生在電子設計和電子工程實踐能力。
選修課程:模擬電子技術、數字電路
DSP技術及應用
DSP Technique and Application
本課程是電子信息類專業的專業必修課程。DSP是電子信息通訊領域中必不可少的器件之一。它既有通用的微處理器和通用的單片機特點,又具有獨特的優點和功能。該課程涉及各個學科的知識,尤其是數學理論,信號處理等理論性很強的學科,它是數字信號處理理論應用實踐的課程。通過該課程的學習為學生今後使用DSP技術進行通訊、控制等相關領域的研究開發打下良好的基礎。
選修課程:數字信號處理
隨機信號分析
Stochastic Signal Analysis
本課程是電子工程、通信工程專業的一門重要的專業課,是進行科學研究和現代電子信息系統分析設計應該學習掌握的一門專業課,有志讀研的同學應選修此課。主要討論隨機信號的基本概念、基本分析方法以及隨機信號通過LTI系統的一些重要結論,包括:隨機信號的均值、方差、相關函數、相干函數、功率譜密度,維納-辛欽定理,Yule-Walker方程,雙重卷積,窄帶隨機信號分析,白雜訊、高斯隨機過程等常見的典型隨機信號。
選修課程:數字信號處理
數字圖像處理
Digital Image Processing
本課程介紹數字圖像處理的基本概念和方法以及實際應用。本課程適合電子信息工程、計算機工程、機械電子工程、物理等專業的學生選修。內容包括,數字圖像基礎、空間域和頻域的圖像增強,然後討論了圖像復原、彩色圖像處理、小波變換及多解析度處理和圖像壓縮,最後講述了形態學圖像處理、圖像分割、描述和識別。
選修課程:數字信號處理
嵌入式系統綜合設計
Embedded System Design
本課程是在學完嵌入式系統及單片機原理課程之後的綜合設計,它的目的和任務是綜合利用所學嵌入式知識完成一個應用系統設計,從而加深對嵌入式軟硬知識的理解,獲得初步的應用經驗,為走出校門從事嵌入式應用的相關工作打下基礎。通過該綜合設計使學生了解現有開發裝置上的相關硬體,正確地掌握在計算機上編寫應用程序、調試、下載、配合外部電路進行系統功能測試。
智能感測技術綜合設計
Intelligent Sensor Technology Project
該課程利用一個多感測器實驗平台,通過完成信號的採集,處理的全過程實踐,通過全面綜合的訓練,使學生了解整個信號的處理過程。
數字信號處理綜合設計
Digital Signal Processing Project
本課程是電子工程、通信工程專業的一門重要的實踐課,旨在加深對所學信號處理演算法的理解及綜合應用。主要利用軟體和DSP器件模擬。
生產實習
Proction Practice
本課程是電子工程系本科生的實踐教學環節。本次實習是一次綜合實習,是三年級學生的生產實習,是加強學生實踐能力的又一重要環節。學生通過實習和參加生產勞動,增強勞動觀點,加強實踐能力的訓練。結合實習和專業勞動做到理論聯系實際,並能在實習中擴展實踐性教學內容。
衛星導航技術
Satellite Communication
本課程主要介紹衛星導航的基本原理,同時包括了衛星通信的一些新技術和典型的實際系統。主要內容有:1.衛星通信的基本原理和特有技術;2.衛星通信的最新發展,如衛星移動通信、衛星通信中的互聯網技術和寬頻多媒體技術等;3. 結合衛星系統組成,介紹主要設備和達到的水平,介紹當前或即將服務的典型衛星通信系統。
選修課程:現代通信原理
信息理論與編碼
Information Theory and Code
本課程以資訊理論與編碼為重點,主要介紹資訊理論以及編碼理論和實現原理,在介紹有關信息度量的基礎上重點講授信源編碼、信道編碼和密碼學中的理論知識及其實現原理。本課程聯系當前實際通信技術來講述,力求使學生在學習該課程後能夠有目標 地應用於實際工作中。本課程適合電子、通信以及相關專業的學生選擇。
選修課程:現代通信原理
計算機通信網
Computer Communication Network
計算機通信網是電子通信類專業的一門選修課。隨著計算機技術和通信技術的不斷發展,計算機通信網的應用也越來越普及,並對整個社會產生了深遠的影響。本課程主要講述計算機通信網的基本概念、基本原理和網路技術。其主要內容有:數據和網路通信概述,開放系統網路模型,物理層,數據鏈路層協議,網路體系結構和協議,綜合業務和路由協議以及Internet和TCP/IP。
選修課程:現代通信原理
通信協議
Communication Protocol
本課程系統地介紹了當前計算機網路的概念、組成、結構和分類。其中包括計算機網路概論、數據通信基礎、網路協議和服務、計算機網路體系結構、物理層協議、數據鏈路層協議、網路層協議、運輸層協議、高層協議、簡單管理協議等內容。
選修課程:現代通信原理
信息安全
Information Security
本課程包括網路信息安全基礎理論、網路安全技術與標准、網路安全管理實踐及網路信息安全實驗等四大部分。課程針對各種網路安全技術的特點,詳細分析了各技術的原理,並給出了典型的應用。
選修課程:現代通信原理
通信信號處理
Signal Processing for Wireless Communication
本課程系統地介紹現代無線通信系統中所涉及的具有代表性的通信信號處理理論與方法以及主要應用。主要的內容有:信道辯識與均衡,自適應均衡器,通信系統中的自適應陣列處理,多用戶檢測,空時二維信號處理等內容。
感測器與檢測技術
Sensor and Detecting Technology
本門課程是通信工程專業本科人才培養的選修課程之一,培養學生進行系統設計,注重感測器工作原理及其應用設計的全過程。本課程的目標是培養學生在進行系統設計時如何綜合運用所學的知識並予以設計實現的能力,培養大學生的科技創新能力。
選修課程:模擬電子技術、數字電路
數字圖像處理
Digital Image Processing
數字圖像處理是論述數字圖像處理的基本理論、方法及其在智能化檢測中應用的學科,本課程學習的主要內容有數字圖像的基本概念、圖像處理的特點與發展、色度學基礎知識;圖像編程的方法與步驟;圖像平滑與增強、圖像分割與邊緣檢測、圖像幾何變換、頻域處理、數學形態學及其應用、圖像特徵與理解、圖像編碼及圖像復原等內容。通過本門課程的學習,使學生掌握數字圖像處理的基本概念、原理、方法和編程技術,為從事數字圖像系統設計、智能化檢測等方面的研究開發工作奠定堅實基礎。
選修課程:數字信號處理
雷達原理
Radar Principle
本課程作為電子信息工程和通信工程專業的一門選修課程,本課程包括雷達分機、雷達測量方法兩大部分。前者包括雷達發射機、雷達接收機、終端顯示的組成、基本工作原理及主要質量指標;後者包括雷達的測距、測角和測速的基本原理和各種實現方法,並相應地討論了各種雷達體制的基本工作原理,如連續波、三坐標、相控陣、圓錐掃描、單脈沖和雙基地等雷達。此外,還較全面地討論了雷達方程和動目標檢測(MTD)雷達。
選修課程:現代通信原理
電子對抗
Electronic Antagonizing
開設本課程的目的是使學生了解並掌握電子對抗技術的應用前景和發展動態。本課程在傳統的通信對抗理論,常規的通信偵察、測向、定位和干擾技術的基礎上,主要討論通信反干擾、反偵察的基本理論與技術(重點是通信反干擾),也討論了若乾熱點問題。
選修課程:現代通信原理
現代通信原理
Principles of Modern Communication
本課程以通信原理為重點,主要介紹通信系統的基本原理、基本性能和基本分析方法,教學內容上兼顧模擬通信和數字通信,但主要還是側重於數字通信。本課程適合電子、通信以及相關專業的學生選擇。學生將學習和掌握現代通信系統的基本分析方法。
選修課程:信號與系統、模擬電子技術
移動通信
Mobile Communication
本書系統地闡述了現代移動通信的基本原理、基本技術和當前廣泛應用的典型移動通信系統,較充分地反映了當代數字移動通信發展的新技術。包括移動信道中的電波傳播與分集接收、雜訊與干擾、組網技術、無線尋呼系統、無繩電話系統、頻分多址(FDMA)移動通信系統、時分多址(TDMA)移動通信系統、碼分多址(CDMA)移動通信系統、移動通信的展望——個人通信等。
選修課程:現代通信原理
光纖通信技術及應用
Optical Communication System
本課程系統介紹光纖的傳輸理論和光纖通信系統原理與技術。本課程適合通信、電子信息工程專業學生選修。學生將學習光纖的傳輸理論,激光器工作原理、性質、光源的直接調劑和間接調劑。光發送機和光接收機的原理,光纖通信系統的組成和設計方法。
選修課程:現代通信原理
微波技術與天線
Microwave Technique
本課程主要討論微波技術的基本理論、基本技術和基本分析方法。學生將學習傳輸線的基本理論和應用,一般波導理論和特性,微波網路概要和散射參量,基本微波無源部件的工作原理和設計如微波諧振器、耦合器、混合器、微波濾波器及常用鐵氧體器件等,微波有源電路以及微波技術的最新發展動態。
選修課程:電磁場理論
通信綜合設計
Communications System Project
本課程是綜合性的通信實驗課,主要內容包括:光纖通信,GSM通信系統,無線尋呼系統,無繩電話系統,GPS定位接收系統,射頻通信系統,微波技術基礎實驗,數字程式控制交換系統實驗,主要通信測量儀器的原理與使用等。
通信信號處理課程項目
Modern Communication Project
本課程介紹和指導學生進行現代通信原理實驗,培養和鍛煉學生獨立分析和動手解決問題的能力。它是把課堂知識和實踐相結合的必不可少的重要環節。本課程適合通信、電子信息工程專業學生選修。
程式控制交換技術及應用
Programming Digital Switching
本課程以數字交換網路和通信網為重點,介紹程式控制數字交換系統原理和現代通信網。本課程適合通信、電子信息工程和計算機工程專業學生選修。學生將學習數字交換系統的硬、軟體基本原理和技術以及各種現代通信網,包括電信網、信令網、同步網、HDH、ISDN、接入網等。
選修課程:現代通信原理
⑹ 求一個C語言圖形變換程序,先進行圖形繪制,後能進行圖形復制、移動、縮放、旋轉,跪求啦。。。
從這一部分開始,進入了圖形編程的比較煩瑣的部分,要真正對圖形編程有所了解,這一部分的內容是必須要掌握的。
在計算機繪圖過程中,經常需要進行繪圖變換,主要包括二維圖形變換和三維圖形變換。這一部分討論二維圖形變換,其內容有用戶坐標到屏幕坐標的變換、圖形的比例變換、對稱變換、錯切變換、旋轉變換、平移變換和復合變換等。後面講到了二維剪裁,即線段裁剪與多邊形裁剪。
第一節 用戶坐標到屏幕坐標變換
假設紙上有一個圖形,要用計算機把它在屏幕上畫出來。那麼首先遇到的問題是,紙上的圖形採用的坐標是實數域域中的直角坐標系或是極坐標系,統稱為用戶坐標系。而屏幕上採用的坐標系是整數域中直角坐標系,這類坐標系統稱為設備坐標系。因此用戶坐標系中圖形需要經過變換才能繪制在屏幕上,顯然這個變換的內容包括: 1)將用戶坐標系中任意范圍區域轉換到屏幕某個范圍區域,從而用戶坐標系此范圍區域內的圖形也轉換到屏幕上該范圍區域內。 2)用戶坐標系此區域內圖形上的坐標值轉換到屏幕上該范圍區域內後不一定是整數,取整後才成為該范圍區域內的屏幕坐標值。 3)用戶坐標右手繫到屏幕坐標左手系的坐標軸方向變換。 4)當屏幕坐標系水平方向與垂直方向刻度不等(即像素間距不等)時,為保持圖形不走樣,還要進行比例變換。下面介紹這些內容的具體計算問題。
1.窗口到視口的變換
更確切地說,是實際圖形到屏幕圖形的轉換。有時也稱為數據規格化。
在用戶坐標系中,指定一矩形域以確定要顯示(或繪制)的圖形部分,這個矩形區域稱為窗口。在屏幕上可任選一矩形域以顯示(或繪制)窗口內的圖形,該域稱為視口。如圖2-1所示。
一般視窗口的四條邊界分別為:
左邊界 x=x1、右邊界 x=x2.下邊界 y=y1,上邊界y=y2。
視口的四條邊界分別為:
左邊界sx=sx1,右邊界sx=sx2,上邊界sy=sy1,下邊界sy=sy2。
經變換後應有,窗口的上邊界線段(或下邊界線段)長x2-x1變換成視口上邊界線段(或下邊界線段)長sx2-sx1。設其比例變換因子為k1,則可得
k1*(x2-x1)=sx2-sx1
k1=(sx2-sx1)/(x2-x1)
對窗口內任一x坐標(x1<=x<=x2)變換後為視口內水平方向sx坐標(sx1<=sx<=sx2)。由上述有:
k1*(x-x1)=sx-sx1
sx=sx1+k1*(x-x1)
=sx1+(x-x1)*(sx2-sx1)/(x2-x1)
同樣,經變換後窗口的左邊界線段(或右邊界線段)長y2-y1變換成視口左邊界線段(或右邊界線段)長sy2-sy1。設其比例變換因子為k2,則可得
k2*(y2-y1)=sy2-sy1
k2=(sy2-sy1)/(y2-y1)
對窗口內任一y坐標(y1<=y<=y2)變換後為視口內垂直sy坐標(sy1<=sy<=sy2),應有
k2*(y-y1)=sy-sy1
sy=sy1+k2*(y-y1)
=sy1+(y-y1)*(sy2-sy1)/(y2-y1)
於是對窗口內圖形上任一點坐標(x,y)變換到屏幕上視口內成為(sx,sy),則
sx=sx1+(x-x1)*(sx2-sx1)/(x2-x1)
sy=sy1+(y-y1)*(sy2-sy1)/(y2-y1)
寫成簡式
sx=k1*x+a
sy=k2*y+b
這里
a=sx1-k1*x1
b-sy1-k2*y1
k1=(sx2-sx1)/(x2-x1)
k2=(sy2-sy1)/(y2-y1)
2. 實型值到整型值的變換
上面對窗口內圖形上任一點坐標(x,y)變換到屏幕上視口內成為(sx,sy),
sx=k1*x+a
sy=k2*y+b k1,k2,a,b同上
這樣計算出來的sx,sy一般是實型值,而屏幕上視口內屏幕坐標是整型值,因此要將sx,sy實型值轉換成屏幕坐標系的整型值。這可以通過四捨五入的方法將實型值的絕對值圓整化。由於C語言中已經替我們想到了這點,它提供的函數可以自動取整,因此用戶在調用標准函數在屏幕上繪圖時一般不需要考慮這個問題。當然也可以用賦值的類型轉換規則來實現實型值到整型值的變換。
3. y坐標值方向變換
一般屏幕坐標系是直角左手系,y軸方向向下為正,原點在屏幕的左上角,如圖2-2所示。
窗口內圖形上任一點(x,y)變換到視口內成為(sx,xy),而(x,y)是相對用戶坐標系(直角右手系)的。(sx,sy)是相對屏幕坐標系(直角左手系)的,因此y軸方向相反。為使窗口內圖形變換到視口上圖形其形狀一致,需將視口上圖形y軸方向變換成窗口內圖形y軸方向。這只要將求得的視口內各點的sy整型坐標均用sy2去減,即sy2-sy(整型)代替sy(整型)即可,經這樣的坐標軸方向變換後得到的視口內圖形與窗口內圖形一致。
4.長寬比例變換
屏幕坐標系x方向與y方向上的刻度可能不一樣,這取決於水平方向像素間距與垂直方向偈素間距大小是否一致。如果兩個方向的刻度不相等,那麼用戶坐標系下一個正方形將顯示(或繪制)成為一個長方形有,一個圓將成為一個橢圓。
為保持原圖形的長寬比。使圖形顯示(或繪制)後不走樣,需求出屏幕上兩侍標軸刻度的比值(即縱橫比)。可以用函數getaspectratio()(見前文所述)返回x方向和y方向的比例數,從而求得這個比值。再瘵原圖形y方向坐標乘以該比值,這樣顯示(或繪制)出來的圖形應不走樣。若不考慮圖形的走樣,就不必作這個變換。
第二節 二維幾何變換
圖形的幾何變換一般是指對圖形的幾何信息經過變換後產生新的圖形,圖形幾何變換既可以看作是坐標系不動而圖形變動,變動後的圖形在坐標系中的坐標值發生變化;出可以看作圖形不動而坐標系變動,變動後的圖形在新坐標系下具有新的坐標值。這兩種情況本質上都是一樣的,都是圖形由新的坐標值表示,因此是新產生的圖形。圖形幾何變換包括比例變換、對稱變換、錯切變換、旋轉變換、平移變換及其復合變換。圖形上所有的點在幾何變換前後的坐標關系一般用解析幾何方法可以求得,但這些幾何關系用矩陣方法表示,運算更為方便。
一、基本變換
圖形基本幾何變換是指比例變換、對稱變換、錯切變換、旋轉變換和平移變換等。除平移變換外,這里其它四種幾何變換都可以用組成圖形的點向量(或稱1×2階矩陣)和2×2階變換矩陣相乘表示,而平移變換需引入新方法來實現。
1、比例變換
設圖形上一點P(x,y),經比例變換後成為新的菜上一點P'(x',y'),即有
x'=a*x
y'=d*y
式中a,d為比例因子
將此比例變換式寫成矩陣式得
a 0
[x' y']=[x y] = [x y] * T
0 d
a 0
這里 T= 叫做比例變換矩陣。若a=d,則x,y坐標按同一比例變換。
0 d
當a=d>1時,圖形放大;當0<a=d<1時,圖形縮小。
若a≠d,則x,y坐標按各自不同比例變換。
3 0
例 1: 設有比例變換矩陣 T= , 三角形abc經過比例變換成為三角形a'b'c'。
0 1
如圖2-3所示。
3 0
a [1 2] = [3 2] a'
0 1
3 0
b [2 2] = [6 2] b'
0 1
3 0
c [2 3] = [6 3] c'
0 1
2. 對稱變換
圖形上一點P(x,y)經關於原點對稱變換後成為新圖形上一點P'(x',y'),則
x' = -x
y' = -y
寫成矩陣形式成為
-1 0
[x' y'] = [x y] = [x y] * T
0 -1
-1 0
這里 T = 為關於原點對稱變換矩陣。
0 -1
若關於x軸對稱,則對稱變換的矩陣表示為
1 0
[x' y'] = [x y] = [x y] * T
0 -1
1 0
於是關於x軸對稱變換矩陣 T =
0 -1
若關於y軸對稱,則對稱變換的矩陣表示為
-1 0
[x' y'] = [x y] = [x y] * T
0 1
-1 0
於是關於y軸對稱變換矩陣 T =
0 1
若關於直線y = -x對稱,則對稱變換矩陣表示為
0 -1
[x' y'] = [x y] = [x y] * T
-1 0
0 1
於是關於直線 y = x對稱變換矩陣 T =
1 0
各種對稱變換的圖形均可由實常式序繪出,參見實常式序圖形。
3. 錯切變換
對圖形的任一點P(x,y),作線性變換如下
x' = x + by
y' = y + dx
式中b,d為不全為零的常 數,點P'(x',y')為新圖形上相應的點,這個變換稱為圖形的錯切變換。
錯切變換的矩陣表示為
1 d
[x' y'] = [x y] = [x y] * T
b 1
1 d
T = 叫做錯切變換矩陣(b,d不全為零)。
b 1
① 當d=0時,x'=x+by,y'=y,這時圖形的y坐標不變,x坐標值隨(x,y)及系數b作線性變化。若b>0時,圖形沿x軸作錯切位移;若b<0,圖形沿x軸負向作錯切位移。
② 當b=0時,x'=x,y'=dx+y,此時圖形的x坐標不變y坐標隨(x,y)及系數d作線性變化。如d>0,圖形沿y軸正向作錯切位移;如d<0,圖形沿y軸負向作錯切位移。
③ 當b≠0且d≠0時,x'=x+by,y'=y+dx,圖形沿x,y兩個方向作錯切位移。
1 2
例 2: 設有錯切變換 矩陣 T = ,正方形abcd經此錯切變換成為四邊形a'b'c'd',
0 1
如圖2-4所示。
1 2
a [0 0] = [0 0] a'
0 1
1 2
b [1 0] = [1 2] b'
0 1
1 2
c [1 1] = [1 3] c'
0 1
1 2
d [0 1] = [0 1] d'
0 1
4. 旋轉變換
設圖形上一點P(x,y)繞原點逆時針旋轉θ角後成為新的圖形上一點P'(x',y'),則由解析幾何方法可得
x' = xcosθ + ysinθ
y' = -xsinθ + ycosθ
用矩陣表示為
cosθ -sinθ
[x' y'] = [x y] = [x y] * T
sinθ cosθ
cosθ -sinθ
這里 T = 為繞原點逆時針變換矩陣。若順時針旋轉時,θ角為負值。
sinθ cosθ
5. 平移變換
若圖形上一點P(x,y)沿x軸平移 l距離,沿y軸平移m距離後成為新的圖形上一點P'(x',y'),則有
x' = x + l
y' = y + m
式中l,m不全為零,這稱為平移變換。但此變換無法用組成圖形的點向量和2×2階變換矩陣相乘來實現。
用二維點向量和2×2階矩陣相乘不能表示圖形的平移變換,那麼自然會想到用三維點向量和3×3階矩陣相乘來實現圖形的平移變換。因此對圖形上二個坐標的點向量需要添加一個坐標,使之成為三維點向量以便與三階矩陣相乘,進而實現用矩陣表示平移變換。實際上就是對上面的二個坐標變換式添加第三個坐標變換式,即成為
x' = x + l
y' = y + m
k = k
這第三個坐標變換式(即k=k)必須是恆等式,因為不需作變換,本質上是為了進行矩陣運算而引入的。
將此三個變換式(仍然是圖形的平移變換,不妨將k = k取成1=1)寫成矩陣得
1 0 0
[x' y' l] = [x y l] 0 1 0 = [x y 1] * T
l m 1
1 0 0
顯然 T = 0 1 0 為圖形的平移變換矩陣。
l m 1
這里通過對原圖形上二維點向量引進第三個坐標成為三維點向量,從而使原圖形的平移變換 能用矩陣表示。同樣其它基本變換也可以如此用矩陣表示。因此圖形的基本變換都可以在這樣的三維點向量下統一、整齊用矩陣表示。這樣的三維點向量稱為齊次點向量,也叫三維齊次坐標點,簡稱三維齊次坐標。只有在三維齊次坐標下,二維幾何變換才都可以用矩陣表示。下面再進一步討論一下齊次坐標的優點。
引用齊次坐標後,可將上面各種基本變換矩陣統一在一個三階矩陣中。即
a b 0
T = c d 0
l m 1
式中左上角二階矩陣實現比例、對稱、錯切、旋轉等變換,左下角1×2階矩陣實現平移變換,其中a,b,c,d,l,m只要賦以相應的值,並建立圖形上點的齊次坐標(即在圖形上點的坐標後引入第三個坐標1),這樣就可以用圖形上點的三維齊次坐標與此三階矩陣相乘來表示三維圖形的基本幾何變換了。而變換後,不用考慮第三個坐標1,前面兩個坐標就反映了圖形的整個變換情況。
用齊次坐標表示一個圖形上的點,可以有多種表示,如(6,8,1)、(12,16,2)、(30,40,5)等均表示圖形上同一個點(6,8)。這樣,齊次坐標可以表示計算機無法容納的數。例如當計算機的字長為16位時,它能表示的最大整數為216-1=32767。若點坐標為(80 000,40 000),則計算機無法表示。但用齊次坐標可表示為(20 000,10 000,1/4),經過處理後再用第三個坐標支除前面兩個坐標,從而得到原來通常的坐標。
齊次坐標優點很多,在計算機繪圖中都採用這種表示來處理圖形。下面介紹的圖形復合幾何變換就是如此。
二、復合變換
圖形的復合幾何變換是指圖形作一次以上的基本幾何變換,變換結果是每次基本變換矩陣的乘積。圖殂的復合幾何變換簡稱復合變換。
1. 復合平移
若對圖形首先作平移變換 T1,然後再作平移變換T2,相應的平移變換矩陣分別為
1 0 0
T1 = 0 1 0
l1 m1 1
1 0 0
T2 = 0 1 0
l2 m2 1
則變換結果為復合平移變換T,其復合平移變換矩陣為
T = T1 * T2
1 0 0 1 0 0
= 0 1 0 * 0 1 0
l1 m1 1 l2 m2 1
1 0 0
= 0 1 0
l1+l2 m1|m2 1
⑺ 將C語言畫成程序框圖
我的程序是用C語言編的一個畫圖軟體
首先要先了解流程圖的畫法,掌握基本控制結構
用某種方法實現圓的生成演算法。 實現橡皮筋直線、圓、矩形。 實現多邊形裁剪。 實現基本幾何變換(平移、旋轉、縮放)。 實現Bezier曲線或B樣條曲線。 最終呈現的結果是一個小型的互動式圖形系統,用界面把所有功能串連起來。
⑻ GPU上圖像拼接的快速計算
圖像拼接已被研究並廣泛應用於計算機科學的許多領域,但在特徵匹配、扭曲和混合步驟中存在大量計算。從而無法滿足某些應用的實時性需求。幸運的是,已經在圖形處理器單元 (GPU) 上開發並實現了一些可以加快拼接過程的相關並行操作。在本文中,我們使用統一計算設備架構 (CUDA) 提出了基於 GPU 的圖像拼接的並行實現。我們在執行時間方面獲得了比在中央處理單元 (CPU) 上實現更好的結果。在實驗中使用集成 GPU GTX745 時,我們對大輸入圖像實現了高達 27.6 倍的加速比。
典型的拼接過程主要包括三個不同的圖像處理步驟,即配准、扭曲和插值以及混合。圖像配準是圖像拼接的關鍵任務。配準是指在描繪同一場景的一對圖像之間建立幾何變換,該變換由一個8自由度的平面單應性決定。
GPU以其強大的並行計算能力吸引許多領域的研究,作為一種協處理器對計算量大的演算法加速已成為實踐的重要途徑。在前人的研究中,他們都避免了考慮兩個極其耗時的步驟,即特徵匹配和隨機樣本共識(RANSAC)。作為圖像配准中的兩個關鍵過程,在提出的 GPU 加速並行演算法中應考慮它們。
使用GPU並行計算會遇到兩個限制
CUDA的出現解決了上述問題,並且CUDA使用C語言,最初為CPU編寫的C語言函數可以移植到CUDA內核,無需修改。
在CUDA中,一定數量的線程被分組到一個塊中,一定數量的塊以規則的網格模式在邏輯上排列(見圖1)。每個塊都映射到一個多處理器,一個多處理器可以同時運行多個線程塊。由於本地資源(寄存器和共享內存)在塊之間進行劃分,包含在同一塊中的線程可以訪問相同的共享內存並快速實現同步操作。但是,不同塊中的線程並不能直接實現通信和同步。除了本地寄存器和共享內存,所有線程都可以訪問全局內存、常量內存和紋理內存。
A. 特徵匹配
令點 經過仿射變換後得到 ,即
向量 是平移分量, 控制縮放、旋轉效果。利用齊次坐標系,方程(2)也可以寫為
接著計算兩幅圖像特徵點之間的歐幾里得距離,並將距離按照升序排序,比較升序排序中第一和第二的比值如果小於某個閾值,則認為是匹配點。
由於 中有六個未知參數,隨機選擇3對不共線的點匹配 ,使用該矩陣 計算剩餘 對匹配點的誤差。執行大量迭代,直到內點對最多。可以使用最小二乘估計器估計所有六個參數。
B. 變形和插值
扭曲變形過程中,可能使像素點位置出現負值或者沒有數值與之對應,在這種搶礦下需要插值演算法創建更平滑和准確的數值,進一步減少翹曲中產生的變形。最常用的插值方法是最近鄰插值、雙線性插值和雙三次插值。考慮到精度和計算復雜度之間的權衡,實驗採用雙線性插值演算法。
C. 混合
為了實現並行計算,本文採用了基於羽化的混合方法,其混合函數可以表示為:
其中 是像素 的權重函數。
A. 並行匹配
匹配分為粗匹配和精匹配。粗匹配過程中,塊線程數由特徵元素數決定,每個塊可以實現一個關鍵點之間的匹配,每個線程計算兩個圖像兩個特徵向量的距離。在計算完所有距離後,使用並行計算的歸並排序對距離值排序。最後,所有塊得到的匹配結果存儲在全局內存中,然後傳送到CPU。
精匹配過程,設計內核執行RANSAC迭代,只啟動一個block,線程數為 ,首先用CPU將三個非共線點計算得到的變換矩陣 ,然後將 、閾值和剩餘 個點傳到GPU,判斷內外點。
通過內存分配,可以實現精細匹配優化。
B. 平行變形和插值
將 矩陣的逆矩陣 存放在常量內存中,由於需要頻繁地調用。將待校正的圖像存放在紋理內存中,紋理內存是專門為本地訪問模式設計的。
為了進一步提升性能,若兩個坐標小數部分小於0.2則強度值分配為整數部分,否則使用雙線性插值。
C. 並行混合
由於混合數是像素和像素的混合,因此線程數等於重疊部分包含的像素。令重疊圖像的列數設置為16的倍數。 gridDim.x的大小等於重疊圖像的行數,gridDim.y的大小等於重疊圖像的列數重疊圖像除以16。
基於 CPU 的演算法在配備 16GMB DDR3 RAM 的 Intel Core i7-4790、3.60GHz 處理器上實現。基於 GPU 的演算法在 NVIDIA GeForce GTX745 集成顯卡上進行測試,每塊最大 1024 個線程和 4096 MB 全局內存。
可以清楚地看到,這兩種圖像之間幾乎沒有差異。原因是實驗中使用的GPU卡支持浮點計算,與CPU版本相比產生的誤差非常小。
在本文中,我們提出了一種使用 CUDA 架構在 GPU 上運行的並行圖像拼接方法。順序演算法通過幾個 CUDA 內核轉換為並行版本。通過使用不同類型的內存,我們實現了並行演算法的優化。同時,將GPU獲得的結果與CPU獲得的結果進行比較,我們實現了高達27.6的加速比。盡管所提出的方法顯著提高了計算性能,但仍有許多工作要做。例如,更精確的插值方法(雙三次插值)和可變權重 c( x, y) 可以考慮進一步改善鑲嵌結果。此外,並行鑲嵌演算法也可以在多個GPU平台上運行,對於大數據可以更有效地執行演算法。在今後的工作中,我們將一一處理這些問題。
⑼ c語言的問題一個
January 2006 日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
熱 點 日 志
基於VC++的OpenGL編程講座之
VC與Matlab介面編程之Matc
基於VC++的OpenGL編程講座之
基於VC++的OpenGL編程講座之
如何編寫對文件按位元組寫入的程序
VC++實現單文檔程序的全屏顯示及恢
使用內存映射文件來提高你程序的性能
編程實現關閉討厭的彈出窗口
用VC實現特定編輯框上對回車鍵響應
讓你的軟體界面更漂亮
最 新 評 論
我 的 朋 友 圈
博 客 統 計
日誌總數:13
評論數量:0
留言數量:0
訪問次數:85
加為好友 發送簡訊
登 錄 信 息
用戶名:
密 碼:
記住密碼
用戶注冊 忘記密碼
友 情 鏈 接
RSS內容聚合
首頁 | 上一篇 | 下一篇 基於VC++的OpenGL編程講座之坐標變換
--------------------------------------------------------------------------------
By nitte 發表於 2006-1-10 18:36:00
OpenGL通過相機模擬、可以實現計算機圖形學中最基本的三維變換,即幾何變換、投影變換、裁剪變換、視口變換等,同時,OpenGL還實現了矩陣堆棧等。理解掌握了有關坐標變換的內容,就算真正走進了精彩地三維世界。
一、OpenGL中的三維物體的顯示
(一)坐標系統
在現實世界中,所有的物體都具有三維特徵,但計算機本身只能處理數字,顯示二維的圖形,將三維物體及二維數據聯系在一起的唯一紐帶就是坐標。
為了使被顯示的三維物體數字化,要在被顯示的物體所在的空間中定義一個坐標系。這個坐標系的長度單位和坐標軸的方向要適合對被顯示物體的描述,這個坐標系稱為世界坐標系。世界坐標系是始終固定不變的。
OpenGL還定義了局部坐標系的概念,所謂局部坐標系,也就是坐標系以物體的中心為坐標原點,物體的旋轉或平移等操作都是圍繞局部坐標系進行的,這時,當物體模型進行旋轉或平移等操作時,局部坐標系也執行相應的旋轉或平移操作。需要注意的是,如果對物體模型進行縮放操作,則局部坐標系也要進行相應的縮放,如果縮放比例在案各坐標軸上不同,那麼再經過旋轉操作後,局部坐標軸之間可能不再相互垂直。無論是在世界坐標系中進行轉換還是在局部坐標系中進行轉換,程序代碼是相同的,只是不同的坐標系考慮的轉換方式不同罷了。
計算機對數字化的顯示物體作了加工處理後,要在圖形顯示器上顯示,這就要在圖形顯示器屏幕上定義一個二維直角坐標系,這個坐標系稱為屏幕坐標系。這個坐標系坐標軸的方向通常取成平行於屏幕的邊緣,坐標原點取在左下角,長度單位常取成一個象素。
(二)三維物體的相機模擬
為了說明在三維物體到二維圖象之間,需要經過什麼樣的變換,我們引入了相機(Camera)模擬的方式,假定用相機來拍攝這個世界,那麼在相機的取景器中,就存在人眼和現實世界之間的一個變換過程。
圖一、相機模擬OpenGL中的各種坐標變換
從三維物體到二維圖象,就如同用相機拍照一樣,通常都要經歷以下幾個步驟:
1、將相機置於三角架上,讓它對准三維景物,它相當於OpenGL中調整視點的位置,即視點變換(Viewing Transformation)。
2、將三維物體放在場景中的適當位置,它相當於OpenGL中的模型變換(Modeling Transformation),即對模型進行旋轉、平移和縮放。
3、選擇相機鏡頭並調焦,使三維物體投影在二維膠片上,它相當於OpenGL中把三維模型投影到二維屏幕上的過程,即OpenGL的投影變換(Projection Transformation),OpenGL中投影的方法有兩種,即正射投影和透視投影。為了使顯示的物體能以合適的位置、大小和方向顯示出來,必須要通過投影。有時為了突出圖形的一部分,只把圖形的某一部分顯示出來,這時可以定義一個三維視景體(Viewing Volume)。正射投影時一般是一個長方體的視景體,透視投影時一般是一個稜台似的視景體。只有視景體內的物體能被投影在顯示平面上,其他部分則不能。
4、沖洗底片,決定二維相片的大小,它相當與OpenGL中的視口變換(Viewport Transformation)(在屏幕窗口內可以定義一個矩形,稱為視口(Viewport),視景體投影後的圖形就在視口內顯示)規定屏幕上顯示場景的范圍和尺寸。
通過上面的幾個步驟,一個三維空間里的物體就可以用相應的二維平面物體表示了,也就能在二維的電腦屏幕上正確顯示了。總的來說,三維物體的顯示過程如下:
圖二、三維物體的顯示過程
二、OpenGL中的幾種變換
OpenGL中的各種轉換是通過矩陣運算實現的,具體的說,就是當發出一個轉換命令時,該命令會生成一個4X4階的轉換矩陣(OpenGL中的物體坐標一律採用齊次坐標,即(x, y, z, w),故所有變換矩陣都採用4X4矩陣),當前矩陣與這個轉換矩陣相乘,從而生成新的當前矩陣。例如,對於頂點坐標v ,轉換命令通常在頂點坐標命令之前發出,若當前矩陣為C,轉換命令構成的矩陣為M,則發出轉換命令後,生成的新的當前矩陣為CM,這個矩陣再乘以頂點坐標v,從而構成新的頂點坐標CMv。上述過程說明,程序中繪制頂點前的最後一個變換命令最先作用於頂點之上。這同時也說明,OpenGL編程中,實際的變換順序與指定的順序是相反的。
(一)視點變換
視點變換確定了場景中物體的視點位置和方向,就向上邊提到的,它象是在場景中放置了一架照相機,讓相機對准要拍攝的物體。確省時,相機(即視點)定位在坐標系的原點(相機初始方向都指向Z負軸),它同物體模型的預設位置是一致的,顯然,如果不進行視點變換,相機和物體是重疊在一起的。
執行視點變換的命令和執行模型轉換的命令是相同的,想一想,在用相機拍攝物體時,我們可以保持物體的位置不動,而將相機移離物體,這就相當於視點變換;另外,我們也可以保持相機的固定位置,將物體移離相機,這就相當於模型轉換。這樣,在OpenGL中,以逆時針旋轉物體就相當於以順時針旋轉相機。因此,我們必須把視點轉換和模型轉換結合在一起考慮,而對這兩種轉換單獨進行考慮是毫無意義的。
除了用模型轉換命令執行視點轉換之外,OpenGL實用庫還提供了gluLookAt()函數,該函數有三個變數,分別定義了視點的位置、相機瞄準方向的參考點以及相機的向上方向。該函數的原型為:
void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble upx,GLdouble upy,GLdouble upz);
該函數定義了視點矩陣,並用該矩陣乘以當前矩陣。eyex,eyey,eyez定義了視點的位置;centerx、centery和centerz變數指定了參考點的位置,該點通常為相機所瞄準的場景中心軸線上的點;upx、upy、upz變數指定了向上向量的方向。
通常,視點轉換操作在模型轉換操作之前發出,以便模型轉換先對物體發生作用。場景中物體的頂點經過模型轉換之後移動到所希望的位置,然後再對場景進行視點定位等操作。模型轉換和視點轉換共同構成模型視景矩陣。
(二)模型變換
模型變換是在世界坐標系中進行的。預設時,物體模型的中心定位在坐標系的中心處。OpenGL在這個坐標系中,有三個命令,可以模型變換。
1、模型平移
glTranslate{fd}(TYPE x,TYPE y,TYPE z);
該函數用指定的x,y,z值沿著x軸、y軸、z軸平移物體(或按照相同的量值移動局部坐標系)。
2、模型旋轉
glRotate{fd}(TYPE angle,TYPE x,TYPE,y,TYPE z);
該函數中第一個變數angle制定模型旋轉的角度,單位為度,後三個變數表示以原點(0,0,0)到點(x,y,z)的連線為軸線逆時針旋轉物體。例如,glRotatef(45.0,0.0,0.0,1.0)的結果是繞z軸旋轉45度。
3、模型縮放
glScale{fd}(TYPE x,TYPE y,TYPE z);
該函數可以對物體沿著x,y,z軸分別進行放大縮小。函數中的三個參數分別是x、y、z軸方向的比例變換因子。預設時都為1.0,即物體沒變化。程序中物體Y軸比例為2.0,其餘都為1.0,就是說將立方體變成長方體。
(三)投影變換
經過模型視景的轉換後,場景中的物體放在了所希望的位置上,但由於顯示器只能用二維圖象顯示三維物體,因此就要靠投影來降低維數(投影變換類似於選擇相機的鏡頭)。
事實上,投影變換的目的就是定義一個視景體,使得視景體外多餘的部分裁剪掉,最終進入圖像的只是視景體內的有關部分。投影包括透視投影(Perspective Projection)和正視投影(Orthographic Projection)兩種。
透視投影,符合人們心理習慣,即離視點近的物體大,離視點遠的物體小,遠到極點即為消失,成為滅點。它的視景體類似於一個頂部和底部都被進行切割過的棱椎,也就是稜台。這個投影通常用於動畫、視覺模擬以及其它許多具有真實性反映的方面。
OpenGL透視投影函數有兩個,其中函數glFrustum()的原型為:
void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);
它創建一個透視視景體。其操作是創建一個透視投影矩陣,並且用這個矩陣乘以當前矩陣。這個函數的參數只定義近裁剪平面的左下角點和右上角點的三維空間坐標,即(left,bottom,-near)和(right,top,-near);最後一個參數far是遠裁剪平面的Z負值,其左下角點和右上角點空間坐標由函數根據透視投影原理自動生成。near和far表示離視點的遠近,它們總為正值。該函數形成的視景體如圖三所示。
圖三、透視投影視景體
另一個透視函數是:
void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear, GLdouble zFar);
它也創建一個對稱透視視景體,但它的參數定義於前面的不同,參數fovy定義視野在X-Z平面的角度,范圍是[0.0, 180.0];參數aspect是投影平面寬度與高度的比率;參數zNear和Far分別是遠近裁剪面沿Z負軸到視點的距離,它們總為正值。
圖四、透視投影視景體
以上兩個函數預設時,視點都在原點,視線沿Z軸指向負方向。
正射投影,又叫平行投影。這種投影的視景體是一個矩形的平行管道,也就是一個長方體,如圖五所示。正射投影的最大一個特點是無論物體距離相機多遠,投影後的物體大小尺寸不變。這種投影通常用在建築藍圖繪制和計算機輔助設計等方面,這些行業要求投影後的物體尺寸及相互間的角度不變,以便施工或製造時物體比例大小正確。
圖五、正射投影視景體
OpenGL正射投影函數也有兩個,一個函數是:
void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top, GLdouble near,GLdouble far)
它創建一個平行視景體。實際上這個函數的操作是創建一個正射投影矩陣,並且用這個矩陣乘以當前矩陣。其中近裁剪平面是一個矩形,矩形左下角點三維空間坐標是(left,bottom,-near),右上角點是(right,top,-near);遠裁剪平面也是一個矩形,左下角點空間坐標是(left,bottom,-far),右上角點是(right,top,-far)。所有的near和far值同時為正或同時為負。如果沒有其他變換,正射投影的方向平行於Z軸,且視點朝向Z負軸。這意味著物體在視點前面時far和near都為負值,物體在視點後面時far和near都為正值。
另一個函數是:
void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
它是一個特殊的正射投影函數,主要用於二維圖像到二維屏幕上的投影。它的near和far預設值分別為-1.0和1.0,所有二維物體的Z坐標都為0.0。因此它的裁剪面是一個左下角點為(left,bottom)、右上角點為(right,top)的矩形。
(四)視口變換。
視口變換就是將視景體內投影的物體顯示在二維的視口平面上。運用相機模擬方式,我們很容易理解視口變換就是類似於照片的放大與縮小。在計算機圖形學中,它的定義是將經過幾何變換、投影變換和裁剪變換後的物體顯示於屏幕窗口內指定的區域內,這個區域通常為矩形,稱為視口。OpenGL中相關函數是:
glViewport(GLint x,GLint y,GLsizei width, GLsizei height);
這個函數定義一個視口。函數參數(x, y)是視口在屏幕窗口坐標系中的左下角點坐標,參數width和height分別是視口的寬度和高度。預設時,參數值即(0, 0, winWidth, winHeight) 指的是屏幕窗口的實際尺寸大小。所有這些值都是以象素為單位,全為整型數。
(5)裁剪變換
在OpenGL中,除了視景體定義的六個裁剪平面(上、下、左、右、前、後)外,用戶還可自己再定義一個或多個附加裁剪平面,以去掉場景中無關的目標,如圖六所示。
圖六、附加裁剪平面
附加平面裁剪函數為:
1、void glClipPlane(GLenum plane,Const GLdouble *equation);
函數參數equation指向一個擁有四個系數值的數組,這四個系數分別是裁剪平面Ax+By+Cz+D=0的A、B、C、D值。因此,由這四個系數就能確定一個裁剪平面。參數plane是GL_CLIP_PLANEi(i=0,1,...),指定裁剪面號。
在調用附加裁剪函數之前,必須先啟動glEnable(GL_CLIP_PLANEi),使得當前所定義的裁剪平面有效;當不再調用某個附加裁剪平面時,可用glDisable(GL_CLIP_PLANEi)關閉相應的附加裁剪功能。
下面這個例子不僅說明了附加裁剪函數的用法,而且調用了gluPerspective()透視投影函數,讀者可以細細體會其中的用法。常式如下:
#i nclude "glos.h"
#i nclude <GL/gl.h>
#i nclude <GL/glu.h>
#i nclude <GL/glaux.h>
void myinit(void);
void CALLBACK myReshape(GLsizei w, GLsizei h);
void CALLBACK display(void);
void CALLBACK display(void)
{
GLdouble eqn[4] = {1.0, 0.0, 0.0, 0.0};
glClear(GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 0.0, 1.0);
glPushMatrix();
glTranslatef (0.0, 0.0, -5.0);
/* clip the left part of wire_sphere : x<0 */
glClipPlane (GL_CLIP_PLANE0, eqn);
glEnable (GL_CLIP_PLANE0);
glRotatef (-90.0, 1.0, 0.0, 0.0);
auxWireSphere(1.0);
glPopMatrix();
glFlush();
}
void myinit (void)
{
glShadeModel (GL_FLAT);
}
void CALLBACK myReshape(GLsizei w, GLsizei h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
}
void main(void)
{
auxInitDisplayMode (AUX_SINGLE | AUX_RGB);
auxInitPosition (0, 0, 500, 500);
auxInitWindow ("Arbitrary Clipping Planes");
myinit ();
auxReshapeFunc (myReshape);
auxMainLoop(display);
}
閱讀全文(32) | 回復(0) | 引用通告(0) | 編輯 | 推薦
發表評論:昵稱:密碼: (遊客無須輸入密碼)主頁:標題: 字型大小1234567
心中的夢想 導航 : ChinaITLab | Cisco | Windows | Linux | Java | Oracle | 論壇
中國IT實驗室博客首頁我的首頁 我的相冊VC隨寫(13) 心情隨筆(0)
人們回眸本世紀的滄桑巨變,心中棲息著許多期盼和夢想,其中最宏偉
壯麗、最朴實純真的夢想之一莫過於人類不再被拖入戰爭的深淵,化干戈為
玉帛,營造和維護一個和平、穩定、繁榮的世界.......
⑽ OpenCV 基礎功能簡介
OpenCV(開源計算機視覺庫 http://opencv.org ) 是一個開源的BSD許可庫,包含數百種計算機視覺演算法。由於功能強大,幾乎所有用到的復雜的圖片分析處理都會用到,所以有必要了解下它具體都有什麼功能,方便我們使用。
官方文檔: OpenCV 教程 — OpenCV 2.3.2 documentation http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html
Core functionality :基礎數據模塊,包含一些發雜數據結構和基本函數方法,主要包含如下的內容:
OpenCV基本數據結構(Basic Structures);
基本的C語言數據結構和操作(Basic C Structures and Operations);
動態數據結構(Dynamic Structures);
數組操作相關函數(Operations on Arrays);
繪圖功能(Drawing Functions);
XML和YAML語法的支持(XML/YAML Persistence);
XML和YAML語法的支持的C語言介面(XML/YAML Persistence (C API));
聚類(Clustering);
輔助功能與系統函數和宏(Utility and System Functions and Macros);
與OpenGL的互操作(OpenGL interoperability);
Image processing :圖像處理模塊,包括線性和非線性圖像濾波,幾何圖像變換(調整大小,仿射和透視扭曲,基於通用表的重新映射),顏色空間轉換,直方圖等。imgproc,是Image Processing的簡寫。圖像處理模塊,主要包含以下內容:
線性和非線性的圖像濾波(Image Filtering);
圖像的幾何變換(Geometric Image Transformations);
圖像的其他變換(Miscellaneous Image Transformations);
直方圖(Histograms);
結構分析和形狀描述(Structural Analysis and Shape Descriptors);
運動分析和目標跟蹤(Motion Analysis and Object Tracking);
特徵檢測(Feature Detection);
目標檢測(Object Detection);
是High-level GUI and Media I/O的簡寫。高層用戶界面模塊和媒體輸入/輸出模塊,主要包含以下內容:
用戶界面(User Interface);
圖片和視頻的讀寫(Reading and Writing Images and Video);
QT新功能(Qt New Functions);
2D Features Framework的簡寫。二維特徵框架模塊,主要包含以下內容:
人臉識別
VR和AR
特徵的檢測和描述(Feature Detection and Description);
特徵檢測器的通用介面(Common Interfaces of Feature Detectors);
描述符提取器的通用介面(Common Interfaces of Descriptor Extractors);
描述符匹配器的通用介面(Common Interfaces of Descriptor Matchers);
通用描述符匹配器通用介面(Common Interfaces of Generic Descriptor Matchers);
關鍵點和匹配結果的繪制功能(Drawing Function of Keypoints and Matches);
目標分類(Object Categorization);
Clustering and Search in Multi-Dimensional Spaces,多維空間聚類和搜索模塊,主要包含以下內容:
快速近視最近鄰搜索(Fast Approximate Nearest Neighbor Search);
聚類(Clustering);
是Video Analysis的簡寫。視頻分析模塊,主要包含以下內容:
運動分析和目標跟蹤(Motion Analysis and Object Tracking),視頻相關的,上面提到的是圖片相關的;
是Camera Calibration and 3D Reconstruction的簡寫。這個模塊主要是相機校準和三維重建相關的內容,包括基本的多視角幾何演算法、單個立體攝像頭標定、物體姿態估計、立體相似性演算法,3D信息的重建等
機器學習庫:統計模型、隨機樹、神經網路等等…
檢測預定義類的對象和實例(例如,面部,眼睛,馬克杯,人,汽車等)。
視頻分析模塊,包括運動估計,背景減法和對象跟蹤演算法。
圖像修復和圖像去噪兩部分