符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
原标题:数控车床编程教程,图文实例详解!
十余年的成武网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整成武建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“成武网站设计”,“成武网站推广”以来,每个客户项目都认真落实执行。
第一节数控车床编程基础
一、数控车编程特点
(1) 可以采用绝对值编程(用X、Z表示)、增量值编程(用U、W表示)或者二者混合编程。
(2) 直径方向(X方向) 系统默认为直径编程,也可以采用半径编程,但必须更改系统设定。
(3) X向的脉冲当量应取Z向的一半。
(4)采用固定循环,简化编程。
(5) 编程时,常认为车刀刀尖是一个点,而实际上为圆弧,因此,当编制加工程序时,需要考虑对刀具进行半径补偿。
二、数控车的坐标系统
加工坐标系应与机床坐标系的坐标方向一致,X轴对应径向,Z轴对应轴向,C轴(主轴)的运动方向则以从机床尾架向主轴看,逆时针为+C向,顺时针为-C向,如图2.1.1所示:
加工坐标系的原点选在便于测量或对刀的基准位置,一般在工件的右端面或左端面上。
三、直径编程方式
在车削加工的数控程序中,X轴的坐标值取为零件图样上的直径值,如图2.1.2所示:图中A点的坐标值为(30,80),B点的坐标值为(40,60)。采用直径尺寸编程与零件图样中的尺寸标注一致,这样可避免尺寸换算过程中可能造成的错误,给编程带来很大方便。
四、进刀和退刀方式
对于车削加工,进刀时采用快速走刀接近工件切削起点附近的某个点,再改用切削进给,以减少空走刀的时间,提高加工效率。切削起点的确定与工件毛坯余量大小有关,应以刀具快速走到该点时刀尖不与工件发生碰撞为原则。如图2.1.3所示。
五、绝对编程与增量编程
X、Z表示绝对编程,U、W表示增量编程,允许同一程序段中二者混合使用。
如图2.1.4所示,直线A→B ,可用:
绝对:G01 X100.0 Z50.0;
相对: G01 U60.0 W-100.0;
混用:G01 X100.0 W-100.0;
或 G01 U60.0 Z50.0;
第2节数控车床的基本编程方法
数控车削加工包括内外圆柱面的车削加工、端面车削加工、钻孔加工、螺纹加工、复杂外形轮廓回转面的车削加工等,在分析了数控车床工艺装备和数控车床编程特点的基础上,下面将结合配置FANUC-0i数控系统的数控车床重点讨论数控车床基本编程方法。
一、坐标系设定
编程格式G50 X~ Z~
式中X、Z的值是起刀点相对于加工原点的位置。G50使用方法与G92类似。
在数控车床编程时,所有X坐标值均使用直径值,如图2.1.5所示。
例:按图2.1.5设置加工坐标的程序段如下:
G50 X 121.8 Z 33.9
工件坐标系的选择指令G54~G59
例如,用G54指令设定如图所示的工件坐标系。
首先设置G54原点偏置寄存器:
G54 X0 Z85.0;
然后再在程序中调用:
N010 G54;
说明:
1、G54~G59是系统预置的六个坐标系,可根据需要选用。
2、G54~G59建立的工件坐标原点是相对于机床原点而言的,在程序运行前已设定好,在程序运行中是无法重置的。
3、G54~G59预置建立的工件坐标原点在机床坐标系中的坐标值可用 MDI 方式输入,系统自动记忆。
4、使用该组指令前,必须先回参考点。
5、G54~G59为模态指令,可相互注销。
二、基本指令G00、G01、G02、G03、G04、G28
1.快速点位移动G00
格式:G00X(U)_Z(W)_;
其中,X(U)_、Z(W)_为目标点坐标值。
2.直线插补G01
格式:G01 X(U)_Z(W)_ F_;
其中,X(U)、Z(W)为目标点坐标,F为进给速度。
机床执行G01指令时,如果之前的程序段中无F指令,在该程序段中必须含有F指令。G01和F都是模态指令。
3.圆弧插补G02、G03
顺时针圆弧插补用G02指令,逆时针圆弧插补用G03指令。
1) 用圆弧半径R和终点坐标进行圆弧插补
格式:G18 G02(G03)X(U)_Z(W)_ R _ F_;
其中:X(U)和Z(W)为圆弧的终点坐标值,
绝对值编程方式下用X和Z,增量值编程方式下用U和W。规定圆弧对应的圆心角小于等于180°时,用“+R”表示;反之,用“-R”表示。
F为加工圆弧时的进给量。
2) 用分矢量和终点坐标进行圆弧插补
格式:G18 G02(G03)X(U)_Z(W)_I _K _F_;
其中:
X(U)和Z(W)为圆弧的终点坐标值,绝对值编程方式下用X和Z,增量值编程方式下用U和W。
I、K分别为圆弧的方向矢量在X轴和Z轴上的投影(I为半径值)。当分矢量的方向与坐标轴的方向不一致时取负号。如图2.1.7所示,图中所示I和K均为负值。
4.暂停指令G04
格式:G04 X(P)_;
其中,X(P)为暂停时间。
X后用小数表示,单位为秒;
P后用整数表示,单位为毫秒。
如 :
G04 X2.0表示暂停2秒;
G04 P1000表示暂停1000毫秒。
5.返回参考点指令G28
G28指令可以使刀具从任何位置以快速点定位方式经过中间点返回参考点。
格式:G28 X _Z _;
其中,X、Z是中间点的坐标值。
三、有关单位设定
1、尺寸单位选择:
格式:G 20 英制输入制式 英寸输入
G 21 公制输入制式 毫米输入 (默认)
2、进给速度单位的设定
每转进给量 编程格式 G95 F~
F后面的数字表示的是主轴每转进给量,单位为mm/r。
例:G95 F0.2 表示进给量为0.2 mm/r。
每分钟进给量 编程格式G94 F~
F后面的数字表示的是每分钟进给量,单位为 mm/min。
例:G94 F100 表示进给量为100mm/min。
分为两类:功能型工具箱和领域型工具箱。
功能型工具箱主要用来扩充MATLAB的符号计算功能、图形建模仿真功能、文字处理功能以及与硬件实时交互功能,能用于多种学科。
领域型工具箱是专业性很强的。如图像处理工具箱(Image Processing Toolbox)、控制工具箱(Control Toolbox)、信号处理工具箱(Signal Processing Toolbox)等。下面,将MATLAB工具箱内所包含的主要内容做简要介绍:
1) 图像处理工具箱(Image Processing Toolbox)。
* 二维滤波器设计和滤波
* 图像恢复增强
* 色彩、集合及形态操作
* 二维变换
* 图像分析和统计
可由结构图直接生成可应用的C语言源代码。
2)控制系统工具箱(Control System Toolbox)。
鲁连续系统设计和离散系统设计
* 状态空间和传递函数
* 模型转换
* 频域响应:Bode图、Nyquist图、Nichols图
* 时域响应:冲击响应、阶跃响应、斜波响应等
* 根轨迹、极点配置、LQG
3)财政金融工具箱(FinancialTooLbox)。
* 成本、利润分析,市场灵敏度分析
* 业务量分析及优化
* 偏差分析
* 资金流量估算
* 财务报表
4)频率域系统辨识工具箱(Frequency Domain System ldentification Toolbox
* 辨识具有未知延迟的连续和离散系统
* 计算幅值/相位、零点/极点的置信区间
* 设计周期激励信号、最小峰值、最优能量诺等
5)模糊逻辑工具箱(Fuzzy Logic Toolbox)。
* 友好的交互设计界面
* 自适应神经—模糊学习、聚类以及Sugeno推理
* 支持SIMULINK动态仿真
* 可生成C语言源代码用于实时应用
(6)高阶谱分析工具箱(Higher—Order SpectralAnalysis Toolbox
* 高阶谱估计
* 信号中非线性特征的检测和刻画
* 延时估计
* 幅值和相位重构
* 阵列信号处理
* 谐波重构
(7) 通讯工具箱(Communication Toolbox)。
令提供100多个函数和150多个SIMULINK模块用于通讯系统的仿真和分析
——信号编码
——调制解调
——滤波器和均衡器设计
——通道模型
——同步
(8)线性矩阵不等式控制工具箱(LMI Control Toolbox)。
* LMI的基本用途
* 基于GUI的LMI编辑器
* LMI问题的有效解法
* LMI问题解决方案
(9)模型预测控制工具箱(ModelPredictive Control Toolbox
* 建模、辨识及验证
* 支持MISO模型和MIMO模型
* 阶跃响应和状态空间模型
(10)u分析与综合工具箱(u-Analysis and Synthesis Toolbox)
* u分析与综合
* H2和H无穷大最优综合
* 模型降阶
* 连续和离散系统
* u分析与综合理论
(11)神经网络工具箱(Neursl Network Toolbox)。
* BP,Hopfield,Kohonen、自组织、径向基函数等网络
* 竞争、线性、Sigmoidal等传递函数
* 前馈、递归等网络结构
* 性能分析及应用
(12)优化工具箱(Optimization Toolbox)。
* 线性规划和二次规划
* 求函数的最大值和最小位
* 多目标优化
* 约束条件下的优化
* 非线性方程求解
(13)偏微分方程工具箱(Partial DifferentialEquation Toolbox)。
* 二维偏微分方程的图形处理
* 几何表示
* 自适应曲面绘制,
* 有限元方法
(14)鲁棒控制工具箱(Robust Control Toolbox)。
* LQG/LTR最优综合
* H2和H无穷大最优综合
* 奇异值模型降阶
* 谱分解和建模
(15)信号处理工具箱(signal Processing Toolbox)
* 数字和模拟滤波器设计、应用及仿真
* 谱分析和估计
* FFT,DCT等变换
* 参数化模型
(16)样条工具箱(SPline Toolbox)。
* 分段多项式和B样条
* 样条的构造
* 曲线拟合及平滑
* 函数微分、积分
(17)统计工具箱(Statistics Toolbox)。
* 概率分布和随机数生成
* 多变量分析
* 回归分析
* 主元分析
* 假设检验
(18)符号数学工具箱(Symbolic Math Toolbox)。
* 符号表达式和符号矩阵的创建
* 符号微积分、线性代数、方程求解
* 因式分解、展开和简化
* 符号函数的二维图形
* 图形化函数计算器
(19)系统辨识工具箱(SystEm Identification Toolbox)
* 状态空间和传递函数模型
* 模型验证
* MA,AR,ARMA等
* 基于模型的信号处理
* 谱分析
(20)小波工具箱(Wavelet Toolbox)。
* 基于小波的分析和综合
* 图形界面和命令行接口
* 连续和离散小波变换及小波包
* 一维、二维小波
* 自适应去噪和压缩
原文标题:10 Python image manipulation tools.
作者 | Parul Pandey
翻译 | 安其罗乔尔、JimmyHua
今天,在我们的世界里充满了数据,图像成为构成这些数据的重要组成部分。但无论是用于何种用途,这些图像都需要进行处理。图像处理就是分析和处理数字图像的过程,主要旨在提高其质量或从中提取一些信息,然后可以将其用于某种用途。
图像处理中的常见任务包括显示图像,基本操作如裁剪、翻转、旋转等,图像分割,分类和特征提取,图像恢复和图像识别。Python成为这种图像处理任务是一个恰当选择,这是因为它作为一种科学编程语言正在日益普及,并且在其生态系统中免费提供许多最先进的图像处理工具供大家使用。
让我们看一下可以用于图像处理任务中的常用 Python 库有哪些吧。
1.scikit-image
scikit-image是一个开源的Python包,适用于numpy数组。它实现了用于研究,教育和工业应用的算法和实用工具。即使是那些刚接触Python生态系统的人,它也是一个相当简单直接的库。此代码是由活跃的志愿者社区编写的,具有高质量和同行评审的性质。
资源
文档里记录了丰富的例子和实际用例,阅读下面的文档:
用法
该包作为skimage导入,大多数功能都在子模块中找的到。下面列举一些skimage的例子:
图像过滤
使用match_template函数进行模板匹配
你可以通过此处查看图库找到更多示例。
2. Numpy
Numpy是Python编程的核心库之一,并为数组提供支持。图像本质上是包含数据点像素的标准Numpy数组。因此,我们可以通过使用基本的NumPy操作,例如切片、掩膜和花式索引,来修改图像的像素值。可以使用skimage加载图像并使用matplotlib显示图像。
资源
Numpy的官方文档页面提供了完整的资源和文档列表:
用法
使用Numpy来掩膜图像.
3.Scipy
scipy是Python的另一个类似Numpy的核心科学模块,可用于基本的图像操作和处理任务。特别是子模块scipy.ndimage,提供了在n维NumPy数组上操作的函数。该包目前包括线性和非线性滤波,二值形态学,B样条插值和对象测量等功能函数。
资源
有关scipy.ndimage包提供的完整功能列表,请参阅下面的链接:
用法
使用SciPy通过高斯滤波器进行模糊:
4. PIL/ Pillow
PIL( Python图像库 )是Python编程语言的一个免费库,它支持打开、操作和保存许多不同的文件格式的图像。然而, 随着2009年的最后一次发布,它的开发停滞不前。但幸运的是还有有Pillow,一个PIL积极开发的且更容易安装的分支,它能运行在所有主要的操作系统,并支持Python3。这个库包含了基本的图像处理功能,包括点运算、使用一组内置卷积核的滤波和色彩空间的转换。
资源
文档中有安装说明,以及涵盖库的每个模块的示例:
用法
在 Pillow 中使用 ImageFilter 增强图像:
5. OpenCV-Python
OpenCV( 开源计算机视觉库 )是计算机视觉应用中应用最广泛的库之一 。OpenCV-Python 是OpenCV的python版API。OpenCV-Python的优点不只有高效,这源于它的内部组成是用C/C++编写的,而且它还容易编写和部署(因为前端是用Python包装的)。这使得它成为执行计算密集型计算机视觉程序的一个很好的选择。
资源
OpenCV-Python-Guide指南可以让你使用OpenCV-Python更容易:
用法
下面是一个例子,展示了OpenCV-Python使用金字塔方法创建一个名为“Orapple”的新水果图像融合的功能。
6. SimpleCV
SimpleCV 也是一个用于构建计算机视觉应用程序的开源框架。有了它,你就可以访问几个高性能的计算机视觉库,如OpenCV,而且不需要先学习了解位深度、文件格式、颜色空间等。
它的学习曲线大大小于OpenCV,正如它们的口号所说“计算机视觉变得简单”。一些支持SimpleCV的观点有:
即使是初学者也可以编写简单的机器视觉测试摄像机、视频文件、图像和视频流都是可互操作的资源
官方文档非常容易理解,而且有大量的例子和使用案例去学习:
用法
7. Mahotas
Mahotas 是另一个计算机视觉和图像处理的Python库。它包括了传统的图像处理功能例如滤波和形态学操作以及更现代的计算机视觉功能用于特征计算,包括兴趣点检测和局部描述符。该接口是Python语言,适合于快速开发,但是算法是用C语言实现的,并根据速度进行了调优。Mahotas库速度快,代码简洁,甚至具有最小的依赖性。通过原文阅读它们的官方论文以获得更多的了解。
资源
文档包括安装指导,例子,以及一些教程,可以更好的帮助你开始使用mahotas。
用法
Mahotas库依赖于使用简单的代码来完成任务。关于‘Finding Wally’的问题,Mahotas做的很好并且代码量很少。下面是源码:
8. SimpleITK
ITK 或者 Insight Segmentation and Registration Toolkit是一个开源的跨平台系统,为开发人员提供了一套广泛的图像分析软件工具 。其中, SimpleITK是建立在ITK之上的简化层,旨在促进其在快速原型设计、教育、解释语言中的应用。SimpleITK 是一个图像分析工具包,包含大量支持一般过滤操作、图像分割和匹配的组件。SimpleITK本身是用C++写的,但是对于包括Python以内的大部分编程语言都是可用的。
资源
大量的Jupyter Notebooks 表明了SimpleITK在教育和研究领域已经被使用。Notebook展示了用Python和R编程语言使用SimpleITK来进行交互式图像分析。
用法
下面的动画是用SimpleITK和Python创建的刚性CT/MR匹配过程的可视化 。点击此处可查看源码!
9. pgmagick
pgmagick是GraphicsMagick库的一个基于python的包装。 GraphicsMagick图像处理系统有时被称为图像处理的瑞士军刀。它提供了一个具有强大且高效的工具和库集合,支持以88种主要格式(包括重要格式,如DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF)读取、写入和操作图像。
资源
有一个专门用于PgMagick的Github库 ,其中包含安装和需求说明。还有关于这个的一个详细的用户指导:
用法
使用pgmagick可以进行的图像处理活动很少,比如:
图像缩放
边缘提取
10. Pycairo
Pycairo是图像处理库cairo的一组Python捆绑。Cairo是一个用于绘制矢量图形的2D图形库。矢量图形很有趣,因为它们在调整大小或转换时不会失去清晰度 。Pycairo是cairo的一组绑定,可用于从Python调用cairo命令。
资源
Pycairo的GitHub库是一个很好的资源,有关于安装和使用的详细说明。还有一个入门指南,其中有一个关于Pycairo的简短教程。
库:指南:用法
使用Pycairo绘制线条、基本形状和径向梯度:
总结
有一些有用且免费的Python图像处理库可以使用,有的是众所周知的,有的可能对你来说是新的,试着多去了解它们。
从这一部分开始,进入了图形编程的比较烦琐的部分,要真正对图形编程有所了解,这一部分的内容是必须要掌握的。
在计算机绘图过程中,经常需要进行绘图变换,主要包括二维图形变换和三维图形变换。这一部分讨论二维图形变换,其内容有用户坐标到屏幕坐标的变换、图形的比例变换、对称变换、错切变换、旋转变换、平移变换和复合变换等。后面讲到了二维剪裁,即线段裁剪与多边形裁剪。
第一节 用户坐标到屏幕坐标变换
假设纸上有一个图形,要用计算机把它在屏幕上画出来。那么首先遇到的问题是,纸上的图形采用的坐标是实数域域中的直角坐标系或是极坐标系,统称为用户坐标系。而屏幕上采用的坐标系是整数域中直角坐标系,这类坐标系统称为设备坐标系。因此用户坐标系中图形需要经过变换才能绘制在屏幕上,显然这个变换的内容包括: 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=d1时,图形放大;当0a=d1时,图形缩小。
若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作线性变化。若b0时,图形沿x轴作错切位移;若b0,图形沿x轴负向作错切位移。
② 当b=0时,x'=x,y'=dx+y,此时图形的x坐标不变y坐标随(x,y)及系数d作线性变化。如d0,图形沿y轴正向作错切位移;如d0,图形沿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