当前位置:首页 » 编程语言 » 图像几何变换c语言

图像几何变换c语言

发布时间: 2022-11-26 12:16:53

⑴ 怎么用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信息的重建等

机器学习库:统计模型、随机树、神经网络等等…

检测预定义类的对象和实例(例如,面部,眼睛,马克杯,人,汽车等)。

视频分析模块,包括运动估计,背景减法和对象跟踪算法。

图像修复和图像去噪两部分

热点内容
幼儿园源码php 发布:2025-01-17 02:41:45 浏览:401
win引导Linux 发布:2025-01-17 02:36:49 浏览:263
ftp是传输类协议吗 发布:2025-01-17 02:36:47 浏览:311
查看电视配置下载什么软件 发布:2025-01-17 02:36:41 浏览:159
宝马x330i比28i多哪些配置 发布:2025-01-17 02:35:59 浏览:573
服务器运维安全云帮手 发布:2025-01-17 02:35:48 浏览:72
c应用编程 发布:2025-01-17 02:35:16 浏览:941
ios清除app缓存数据免费 发布:2025-01-17 02:34:33 浏览:375
微信企业号上传文件 发布:2025-01-17 02:10:28 浏览:64
孩子几岁可以学习编程 发布:2025-01-17 02:09:55 浏览:602