原標(biāo)題:數(shù)控車床編程教程,圖文實例詳解!
十余年的成武網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整成武建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“成武網(wǎng)站設(shè)計”,“成武網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
第一節(jié)數(shù)控車床編程基礎(chǔ)
一、數(shù)控車編程特點
(1) 可以采用絕對值編程(用X、Z表示)、增量值編程(用U、W表示)或者二者混合編程。
(2) 直徑方向(X方向) 系統(tǒng)默認(rèn)為直徑編程,也可以采用半徑編程,但必須更改系統(tǒng)設(shè)定。
(3) X向的脈沖當(dāng)量應(yīng)取Z向的一半。
(4)采用固定循環(huán),簡化編程。
(5) 編程時,常認(rèn)為車刀刀尖是一個點,而實際上為圓弧,因此,當(dāng)編制加工程序時,需要考慮對刀具進行半徑補償。
二、數(shù)控車的坐標(biāo)系統(tǒng)
加工坐標(biāo)系應(yīng)與機床坐標(biāo)系的坐標(biāo)方向一致,X軸對應(yīng)徑向,Z軸對應(yīng)軸向,C軸(主軸)的運動方向則以從機床尾架向主軸看,逆時針為+C向,順時針為-C向,如圖2.1.1所示:
加工坐標(biāo)系的原點選在便于測量或?qū)Φ兜幕鶞?zhǔn)位置,一般在工件的右端面或左端面上。
三、直徑編程方式
在車削加工的數(shù)控程序中,X軸的坐標(biāo)值取為零件圖樣上的直徑值,如圖2.1.2所示:圖中A點的坐標(biāo)值為(30,80),B點的坐標(biāo)值為(40,60)。采用直徑尺寸編程與零件圖樣中的尺寸標(biāo)注一致,這樣可避免尺寸換算過程中可能造成的錯誤,給編程帶來很大方便。
四、進刀和退刀方式
對于車削加工,進刀時采用快速走刀接近工件切削起點附近的某個點,再改用切削進給,以減少空走刀的時間,提高加工效率。切削起點的確定與工件毛坯余量大小有關(guān),應(yīng)以刀具快速走到該點時刀尖不與工件發(fā)生碰撞為原則。如圖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節(jié)數(shù)控車床的基本編程方法
數(shù)控車削加工包括內(nèi)外圓柱面的車削加工、端面車削加工、鉆孔加工、螺紋加工、復(fù)雜外形輪廓回轉(zhuǎn)面的車削加工等,在分析了數(shù)控車床工藝裝備和數(shù)控車床編程特點的基礎(chǔ)上,下面將結(jié)合配置FANUC-0i數(shù)控系統(tǒng)的數(shù)控車床重點討論數(shù)控車床基本編程方法。
一、坐標(biāo)系設(shè)定
編程格式G50 X~ Z~
式中X、Z的值是起刀點相對于加工原點的位置。G50使用方法與G92類似。
在數(shù)控車床編程時,所有X坐標(biāo)值均使用直徑值,如圖2.1.5所示。
例:按圖2.1.5設(shè)置加工坐標(biāo)的程序段如下:
G50 X 121.8 Z 33.9
工件坐標(biāo)系的選擇指令G54~G59
例如,用G54指令設(shè)定如圖所示的工件坐標(biāo)系。
首先設(shè)置G54原點偏置寄存器:
G54 X0 Z85.0;
然后再在程序中調(diào)用:
N010 G54;
說明:
1、G54~G59是系統(tǒng)預(yù)置的六個坐標(biāo)系,可根據(jù)需要選用。
2、G54~G59建立的工件坐標(biāo)原點是相對于機床原點而言的,在程序運行前已設(shè)定好,在程序運行中是無法重置的。
3、G54~G59預(yù)置建立的工件坐標(biāo)原點在機床坐標(biāo)系中的坐標(biāo)值可用 MDI 方式輸入,系統(tǒng)自動記憶。
4、使用該組指令前,必須先回參考點。
5、G54~G59為模態(tài)指令,可相互注銷。
二、基本指令G00、G01、G02、G03、G04、G28
1.快速點位移動G00
格式:G00X(U)_Z(W)_;
其中,X(U)_、Z(W)_為目標(biāo)點坐標(biāo)值。
2.直線插補G01
格式:G01 X(U)_Z(W)_ F_;
其中,X(U)、Z(W)為目標(biāo)點坐標(biāo),F(xiàn)為進給速度。
機床執(zhí)行G01指令時,如果之前的程序段中無F指令,在該程序段中必須含有F指令。G01和F都是模態(tài)指令。
3.圓弧插補G02、G03
順時針圓弧插補用G02指令,逆時針圓弧插補用G03指令。
1) 用圓弧半徑R和終點坐標(biāo)進行圓弧插補
格式:G18 G02(G03)X(U)_Z(W)_ R _ F_;
其中:X(U)和Z(W)為圓弧的終點坐標(biāo)值,
絕對值編程方式下用X和Z,增量值編程方式下用U和W。規(guī)定圓弧對應(yīng)的圓心角小于等于180°時,用“+R”表示;反之,用“-R”表示。
F為加工圓弧時的進給量。
2) 用分矢量和終點坐標(biāo)進行圓弧插補
格式:G18 G02(G03)X(U)_Z(W)_I _K _F_;
其中:
X(U)和Z(W)為圓弧的終點坐標(biāo)值,絕對值編程方式下用X和Z,增量值編程方式下用U和W。
I、K分別為圓弧的方向矢量在X軸和Z軸上的投影(I為半徑值)。當(dāng)分矢量的方向與坐標(biāo)軸的方向不一致時取負(fù)號。如圖2.1.7所示,圖中所示I和K均為負(fù)值。
4.暫停指令G04
格式:G04 X(P)_;
其中,X(P)為暫停時間。
X后用小數(shù)表示,單位為秒;
P后用整數(shù)表示,單位為毫秒。
如 :
G04 X2.0表示暫停2秒;
G04 P1000表示暫停1000毫秒。
5.返回參考點指令G28
G28指令可以使刀具從任何位置以快速點定位方式經(jīng)過中間點返回參考點。
格式:G28 X _Z _;
其中,X、Z是中間點的坐標(biāo)值。
三、有關(guān)單位設(shè)定
1、尺寸單位選擇:
格式:G 20 英制輸入制式 英寸輸入
G 21 公制輸入制式 毫米輸入 (默認(rèn))
2、進給速度單位的設(shè)定
每轉(zhuǎn)進給量 編程格式 G95 F~
F后面的數(shù)字表示的是主軸每轉(zhuǎn)進給量,單位為mm/r。
例:G95 F0.2 表示進給量為0.2 mm/r。
每分鐘進給量 編程格式G94 F~
F后面的數(shù)字表示的是每分鐘進給量,單位為 mm/min。
例:G94 F100 表示進給量為100mm/min。
分為兩類:功能型工具箱和領(lǐng)域型工具箱。
功能型工具箱主要用來擴充MATLAB的符號計算功能、圖形建模仿真功能、文字處理功能以及與硬件實時交互功能,能用于多種學(xué)科。
領(lǐng)域型工具箱是專業(yè)性很強的。如圖像處理工具箱(Image Processing Toolbox)、控制工具箱(Control Toolbox)、信號處理工具箱(Signal Processing Toolbox)等。下面,將MATLAB工具箱內(nèi)所包含的主要內(nèi)容做簡要介紹:
1) 圖像處理工具箱(Image Processing Toolbox)。
* 二維濾波器設(shè)計和濾波
* 圖像恢復(fù)增強
* 色彩、集合及形態(tài)操作
* 二維變換
* 圖像分析和統(tǒng)計
可由結(jié)構(gòu)圖直接生成可應(yīng)用的C語言源代碼。
2)控制系統(tǒng)工具箱(Control System Toolbox)。
魯連續(xù)系統(tǒng)設(shè)計和離散系統(tǒng)設(shè)計
* 狀態(tài)空間和傳遞函數(shù)
* 模型轉(zhuǎn)換
* 頻域響應(yīng):Bode圖、Nyquist圖、Nichols圖
* 時域響應(yīng):沖擊響應(yīng)、階躍響應(yīng)、斜波響應(yīng)等
* 根軌跡、極點配置、LQG
3)財政金融工具箱(FinancialTooLbox)。
* 成本、利潤分析,市場靈敏度分析
* 業(yè)務(wù)量分析及優(yōu)化
* 偏差分析
* 資金流量估算
* 財務(wù)報表
4)頻率域系統(tǒng)辨識工具箱(Frequency Domain System ldentification Toolbox
* 辨識具有未知延遲的連續(xù)和離散系統(tǒng)
* 計算幅值/相位、零點/極點的置信區(qū)間
* 設(shè)計周期激勵信號、最小峰值、最優(yōu)能量諾等
5)模糊邏輯工具箱(Fuzzy Logic Toolbox)。
* 友好的交互設(shè)計界面
* 自適應(yīng)神經(jīng)—模糊學(xué)習(xí)、聚類以及Sugeno推理
* 支持SIMULINK動態(tài)仿真
* 可生成C語言源代碼用于實時應(yīng)用
(6)高階譜分析工具箱(Higher—Order SpectralAnalysis Toolbox
* 高階譜估計
* 信號中非線性特征的檢測和刻畫
* 延時估計
* 幅值和相位重構(gòu)
* 陣列信號處理
* 諧波重構(gòu)
(7) 通訊工具箱(Communication Toolbox)。
令提供100多個函數(shù)和150多個SIMULINK模塊用于通訊系統(tǒng)的仿真和分析
——信號編碼
——調(diào)制解調(diào)
——濾波器和均衡器設(shè)計
——通道模型
——同步
(8)線性矩陣不等式控制工具箱(LMI Control Toolbox)。
* LMI的基本用途
* 基于GUI的LMI編輯器
* LMI問題的有效解法
* LMI問題解決方案
(9)模型預(yù)測控制工具箱(ModelPredictive Control Toolbox
* 建模、辨識及驗證
* 支持MISO模型和MIMO模型
* 階躍響應(yīng)和狀態(tài)空間模型
(10)u分析與綜合工具箱(u-Analysis and Synthesis Toolbox)
* u分析與綜合
* H2和H無窮大最優(yōu)綜合
* 模型降階
* 連續(xù)和離散系統(tǒng)
* u分析與綜合理論
(11)神經(jīng)網(wǎng)絡(luò)工具箱(Neursl Network Toolbox)。
* BP,Hopfield,Kohonen、自組織、徑向基函數(shù)等網(wǎng)絡(luò)
* 競爭、線性、Sigmoidal等傳遞函數(shù)
* 前饋、遞歸等網(wǎng)絡(luò)結(jié)構(gòu)
* 性能分析及應(yīng)用
(12)優(yōu)化工具箱(Optimization Toolbox)。
* 線性規(guī)劃和二次規(guī)劃
* 求函數(shù)的最大值和最小位
* 多目標(biāo)優(yōu)化
* 約束條件下的優(yōu)化
* 非線性方程求解
(13)偏微分方程工具箱(Partial DifferentialEquation Toolbox)。
* 二維偏微分方程的圖形處理
* 幾何表示
* 自適應(yīng)曲面繪制,
* 有限元方法
(14)魯棒控制工具箱(Robust Control Toolbox)。
* LQG/LTR最優(yōu)綜合
* H2和H無窮大最優(yōu)綜合
* 奇異值模型降階
* 譜分解和建模
(15)信號處理工具箱(signal Processing Toolbox)
* 數(shù)字和模擬濾波器設(shè)計、應(yīng)用及仿真
* 譜分析和估計
* FFT,DCT等變換
* 參數(shù)化模型
(16)樣條工具箱(SPline Toolbox)。
* 分段多項式和B樣條
* 樣條的構(gòu)造
* 曲線擬合及平滑
* 函數(shù)微分、積分
(17)統(tǒng)計工具箱(Statistics Toolbox)。
* 概率分布和隨機數(shù)生成
* 多變量分析
* 回歸分析
* 主元分析
* 假設(shè)檢驗
(18)符號數(shù)學(xué)工具箱(Symbolic Math Toolbox)。
* 符號表達式和符號矩陣的創(chuàng)建
* 符號微積分、線性代數(shù)、方程求解
* 因式分解、展開和簡化
* 符號函數(shù)的二維圖形
* 圖形化函數(shù)計算器
(19)系統(tǒng)辨識工具箱(SystEm Identification Toolbox)
* 狀態(tài)空間和傳遞函數(shù)模型
* 模型驗證
* MA,AR,ARMA等
* 基于模型的信號處理
* 譜分析
(20)小波工具箱(Wavelet Toolbox)。
* 基于小波的分析和綜合
* 圖形界面和命令行接口
* 連續(xù)和離散小波變換及小波包
* 一維、二維小波
* 自適應(yīng)去噪和壓縮
原文標(biāo)題:10 Python image manipulation tools.
作者 | Parul Pandey
翻譯 | 安其羅喬爾、JimmyHua
今天,在我們的世界里充滿了數(shù)據(jù),圖像成為構(gòu)成這些數(shù)據(jù)的重要組成部分。但無論是用于何種用途,這些圖像都需要進行處理。圖像處理就是分析和處理數(shù)字圖像的過程,主要旨在提高其質(zhì)量或從中提取一些信息,然后可以將其用于某種用途。
圖像處理中的常見任務(wù)包括顯示圖像,基本操作如裁剪、翻轉(zhuǎn)、旋轉(zhuǎn)等,圖像分割,分類和特征提取,圖像恢復(fù)和圖像識別。Python成為這種圖像處理任務(wù)是一個恰當(dāng)選擇,這是因為它作為一種科學(xué)編程語言正在日益普及,并且在其生態(tài)系統(tǒng)中免費提供許多最先進的圖像處理工具供大家使用。
讓我們看一下可以用于圖像處理任務(wù)中的常用 Python 庫有哪些吧。
1.scikit-image
scikit-image是一個開源的Python包,適用于numpy數(shù)組。它實現(xiàn)了用于研究,教育和工業(yè)應(yīng)用的算法和實用工具。即使是那些剛接觸Python生態(tài)系統(tǒng)的人,它也是一個相當(dāng)簡單直接的庫。此代碼是由活躍的志愿者社區(qū)編寫的,具有高質(zhì)量和同行評審的性質(zhì)。
資源
文檔里記錄了豐富的例子和實際用例,閱讀下面的文檔:
用法
該包作為skimage導(dǎo)入,大多數(shù)功能都在子模塊中找的到。下面列舉一些skimage的例子:
圖像過濾
使用match_template函數(shù)進行模板匹配
你可以通過此處查看圖庫找到更多示例。
2. Numpy
Numpy是Python編程的核心庫之一,并為數(shù)組提供支持。圖像本質(zhì)上是包含數(shù)據(jù)點像素的標(biāo)準(zhǔn)Numpy數(shù)組。因此,我們可以通過使用基本的NumPy操作,例如切片、掩膜和花式索引,來修改圖像的像素值??梢允褂胹kimage加載圖像并使用matplotlib顯示圖像。
資源
Numpy的官方文檔頁面提供了完整的資源和文檔列表:
用法
使用Numpy來掩膜圖像.
3.Scipy
scipy是Python的另一個類似Numpy的核心科學(xué)模塊,可用于基本的圖像操作和處理任務(wù)。特別是子模塊scipy.ndimage,提供了在n維NumPy數(shù)組上操作的函數(shù)。該包目前包括線性和非線性濾波,二值形態(tài)學(xué),B樣條插值和對象測量等功能函數(shù)。
資源
有關(guān)scipy.ndimage包提供的完整功能列表,請參閱下面的鏈接:
用法
使用SciPy通過高斯濾波器進行模糊:
4. PIL/ Pillow
PIL( Python圖像庫 )是Python編程語言的一個免費庫,它支持打開、操作和保存許多不同的文件格式的圖像。然而, 隨著2009年的最后一次發(fā)布,它的開發(fā)停滯不前。但幸運的是還有有Pillow,一個PIL積極開發(fā)的且更容易安裝的分支,它能運行在所有主要的操作系統(tǒng),并支持Python3。這個庫包含了基本的圖像處理功能,包括點運算、使用一組內(nèi)置卷積核的濾波和色彩空間的轉(zhuǎn)換。
資源
文檔中有安裝說明,以及涵蓋庫的每個模塊的示例:
用法
在 Pillow 中使用 ImageFilter 增強圖像:
5. OpenCV-Python
OpenCV( 開源計算機視覺庫 )是計算機視覺應(yīng)用中應(yīng)用最廣泛的庫之一 。OpenCV-Python 是OpenCV的python版API。OpenCV-Python的優(yōu)點不只有高效,這源于它的內(nèi)部組成是用C/C++編寫的,而且它還容易編寫和部署(因為前端是用Python包裝的)。這使得它成為執(zhí)行計算密集型計算機視覺程序的一個很好的選擇。
資源
OpenCV-Python-Guide指南可以讓你使用OpenCV-Python更容易:
用法
下面是一個例子,展示了OpenCV-Python使用金字塔方法創(chuàng)建一個名為“Orapple”的新水果圖像融合的功能。
6. SimpleCV
SimpleCV 也是一個用于構(gòu)建計算機視覺應(yīng)用程序的開源框架。有了它,你就可以訪問幾個高性能的計算機視覺庫,如OpenCV,而且不需要先學(xué)習(xí)了解位深度、文件格式、顏色空間等。
它的學(xué)習(xí)曲線大大小于OpenCV,正如它們的口號所說“計算機視覺變得簡單”。一些支持SimpleCV的觀點有:
即使是初學(xué)者也可以編寫簡單的機器視覺測試攝像機、視頻文件、圖像和視頻流都是可互操作的資源
官方文檔非常容易理解,而且有大量的例子和使用案例去學(xué)習(xí):
用法
7. Mahotas
Mahotas 是另一個計算機視覺和圖像處理的Python庫。它包括了傳統(tǒng)的圖像處理功能例如濾波和形態(tài)學(xué)操作以及更現(xiàn)代的計算機視覺功能用于特征計算,包括興趣點檢測和局部描述符。該接口是Python語言,適合于快速開發(fā),但是算法是用C語言實現(xiàn)的,并根據(jù)速度進行了調(diào)優(yōu)。Mahotas庫速度快,代碼簡潔,甚至具有最小的依賴性。通過原文閱讀它們的官方論文以獲得更多的了解。
資源
文檔包括安裝指導(dǎo),例子,以及一些教程,可以更好的幫助你開始使用mahotas。
用法
Mahotas庫依賴于使用簡單的代碼來完成任務(wù)。關(guān)于‘Finding Wally’的問題,Mahotas做的很好并且代碼量很少。下面是源碼:
8. SimpleITK
ITK 或者 Insight Segmentation and Registration Toolkit是一個開源的跨平臺系統(tǒng),為開發(fā)人員提供了一套廣泛的圖像分析軟件工具 。其中, SimpleITK是建立在ITK之上的簡化層,旨在促進其在快速原型設(shè)計、教育、解釋語言中的應(yīng)用。SimpleITK 是一個圖像分析工具包,包含大量支持一般過濾操作、圖像分割和匹配的組件。SimpleITK本身是用C++寫的,但是對于包括Python以內(nèi)的大部分編程語言都是可用的。
資源
大量的Jupyter Notebooks 表明了SimpleITK在教育和研究領(lǐng)域已經(jīng)被使用。Notebook展示了用Python和R編程語言使用SimpleITK來進行交互式圖像分析。
用法
下面的動畫是用SimpleITK和Python創(chuàng)建的剛性CT/MR匹配過程的可視化 。點擊此處可查看源碼!
9. pgmagick
pgmagick是GraphicsMagick庫的一個基于python的包裝。 GraphicsMagick圖像處理系統(tǒng)有時被稱為圖像處理的瑞士軍刀。它提供了一個具有強大且高效的工具和庫集合,支持以88種主要格式(包括重要格式,如DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF)讀取、寫入和操作圖像。
資源
有一個專門用于PgMagick的Github庫 ,其中包含安裝和需求說明。還有關(guān)于這個的一個詳細(xì)的用戶指導(dǎo):
用法
使用pgmagick可以進行的圖像處理活動很少,比如:
圖像縮放
邊緣提取
10. Pycairo
Pycairo是圖像處理庫cairo的一組Python捆綁。Cairo是一個用于繪制矢量圖形的2D圖形庫。矢量圖形很有趣,因為它們在調(diào)整大小或轉(zhuǎn)換時不會失去清晰度 。Pycairo是cairo的一組綁定,可用于從Python調(diào)用cairo命令。
資源
Pycairo的GitHub庫是一個很好的資源,有關(guān)于安裝和使用的詳細(xì)說明。還有一個入門指南,其中有一個關(guān)于Pycairo的簡短教程。
庫:指南:用法
使用Pycairo繪制線條、基本形狀和徑向梯度:
總結(jié)
有一些有用且免費的Python圖像處理庫可以使用,有的是眾所周知的,有的可能對你來說是新的,試著多去了解它們。
從這一部分開始,進入了圖形編程的比較煩瑣的部分,要真正對圖形編程有所了解,這一部分的內(nèi)容是必須要掌握的。
在計算機繪圖過程中,經(jīng)常需要進行繪圖變換,主要包括二維圖形變換和三維圖形變換。這一部分討論二維圖形變換,其內(nèi)容有用戶坐標(biāo)到屏幕坐標(biāo)的變換、圖形的比例變換、對稱變換、錯切變換、旋轉(zhuǎn)變換、平移變換和復(fù)合變換等。后面講到了二維剪裁,即線段裁剪與多邊形裁剪。
第一節(jié) 用戶坐標(biāo)到屏幕坐標(biāo)變換
假設(shè)紙上有一個圖形,要用計算機把它在屏幕上畫出來。那么首先遇到的問題是,紙上的圖形采用的坐標(biāo)是實數(shù)域域中的直角坐標(biāo)系或是極坐標(biāo)系,統(tǒng)稱為用戶坐標(biāo)系。而屏幕上采用的坐標(biāo)系是整數(shù)域中直角坐標(biāo)系,這類坐標(biāo)系統(tǒng)稱為設(shè)備坐標(biāo)系。因此用戶坐標(biāo)系中圖形需要經(jīng)過變換才能繪制在屏幕上,顯然這個變換的內(nèi)容包括: 1)將用戶坐標(biāo)系中任意范圍區(qū)域轉(zhuǎn)換到屏幕某個范圍區(qū)域,從而用戶坐標(biāo)系此范圍區(qū)域內(nèi)的圖形也轉(zhuǎn)換到屏幕上該范圍區(qū)域內(nèi)。 2)用戶坐標(biāo)系此區(qū)域內(nèi)圖形上的坐標(biāo)值轉(zhuǎn)換到屏幕上該范圍區(qū)域內(nèi)后不一定是整數(shù),取整后才成為該范圍區(qū)域內(nèi)的屏幕坐標(biāo)值。 3)用戶坐標(biāo)右手系到屏幕坐標(biāo)左手系的坐標(biāo)軸方向變換。 4)當(dāng)屏幕坐標(biāo)系水平方向與垂直方向刻度不等(即像素間距不等)時,為保持圖形不走樣,還要進行比例變換。下面介紹這些內(nèi)容的具體計算問題。
1.窗口到視口的變換
更確切地說,是實際圖形到屏幕圖形的轉(zhuǎn)換。有時也稱為數(shù)據(jù)規(guī)格化。
在用戶坐標(biāo)系中,指定一矩形域以確定要顯示(或繪制)的圖形部分,這個矩形區(qū)域稱為窗口。在屏幕上可任選一矩形域以顯示(或繪制)窗口內(nèi)的圖形,該域稱為視口。如圖2-1所示。
一般視窗口的四條邊界分別為:
左邊界 x=x1、右邊界 x=x2.下邊界 y=y1,上邊界y=y2。
視口的四條邊界分別為:
左邊界sx=sx1,右邊界sx=sx2,上邊界sy=sy1,下邊界sy=sy2。
經(jīng)變換后應(yīng)有,窗口的上邊界線段(或下邊界線段)長x2-x1變換成視口上邊界線段(或下邊界線段)長sx2-sx1。設(shè)其比例變換因子為k1,則可得
k1*(x2-x1)=sx2-sx1
k1=(sx2-sx1)/(x2-x1)
對窗口內(nèi)任一x坐標(biāo)(x1=x=x2)變換后為視口內(nèi)水平方向sx坐標(biāo)(sx1=sx=sx2)。由上述有:
k1*(x-x1)=sx-sx1
sx=sx1+k1*(x-x1)
=sx1+(x-x1)*(sx2-sx1)/(x2-x1)
同樣,經(jīng)變換后窗口的左邊界線段(或右邊界線段)長y2-y1變換成視口左邊界線段(或右邊界線段)長sy2-sy1。設(shè)其比例變換因子為k2,則可得
k2*(y2-y1)=sy2-sy1
k2=(sy2-sy1)/(y2-y1)
對窗口內(nèi)任一y坐標(biāo)(y1=y=y2)變換后為視口內(nèi)垂直sy坐標(biāo)(sy1=sy=sy2),應(yīng)有
k2*(y-y1)=sy-sy1
sy=sy1+k2*(y-y1)
=sy1+(y-y1)*(sy2-sy1)/(y2-y1)
于是對窗口內(nèi)圖形上任一點坐標(biāo)(x,y)變換到屏幕上視口內(nèi)成為(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. 實型值到整型值的變換
上面對窗口內(nèi)圖形上任一點坐標(biāo)(x,y)變換到屏幕上視口內(nèi)成為(sx,sy),
sx=k1*x+a
sy=k2*y+b k1,k2,a,b同上
這樣計算出來的sx,sy一般是實型值,而屏幕上視口內(nèi)屏幕坐標(biāo)是整型值,因此要將sx,sy實型值轉(zhuǎn)換成屏幕坐標(biāo)系的整型值。這可以通過四舍五入的方法將實型值的絕對值圓整化。由于C語言中已經(jīng)替我們想到了這點,它提供的函數(shù)可以自動取整,因此用戶在調(diào)用標(biāo)準(zhǔn)函數(shù)在屏幕上繪圖時一般不需要考慮這個問題。當(dāng)然也可以用賦值的類型轉(zhuǎn)換規(guī)則來實現(xiàn)實型值到整型值的變換。
3. y坐標(biāo)值方向變換
一般屏幕坐標(biāo)系是直角左手系,y軸方向向下為正,原點在屏幕的左上角,如圖2-2所示。
窗口內(nèi)圖形上任一點(x,y)變換到視口內(nèi)成為(sx,xy),而(x,y)是相對用戶坐標(biāo)系(直角右手系)的。(sx,sy)是相對屏幕坐標(biāo)系(直角左手系)的,因此y軸方向相反。為使窗口內(nèi)圖形變換到視口上圖形其形狀一致,需將視口上圖形y軸方向變換成窗口內(nèi)圖形y軸方向。這只要將求得的視口內(nèi)各點的sy整型坐標(biāo)均用sy2去減,即sy2-sy(整型)代替sy(整型)即可,經(jīng)這樣的坐標(biāo)軸方向變換后得到的視口內(nèi)圖形與窗口內(nèi)圖形一致。
4.長寬比例變換
屏幕坐標(biāo)系x方向與y方向上的刻度可能不一樣,這取決于水平方向像素間距與垂直方向偈素間距大小是否一致。如果兩個方向的刻度不相等,那么用戶坐標(biāo)系下一個正方形將顯示(或繪制)成為一個長方形有,一個圓將成為一個橢圓。
為保持原圖形的長寬比。使圖形顯示(或繪制)后不走樣,需求出屏幕上兩侍標(biāo)軸刻度的比值(即縱橫比)??梢杂煤瘮?shù)getaspectratio()(見前文所述)返回x方向和y方向的比例數(shù),從而求得這個比值。再瘵原圖形y方向坐標(biāo)乘以該比值,這樣顯示(或繪制)出來的圖形應(yīng)不走樣。若不考慮圖形的走樣,就不必作這個變換。
第二節(jié) 二維幾何變換
圖形的幾何變換一般是指對圖形的幾何信息經(jīng)過變換后產(chǎn)生新的圖形,圖形幾何變換既可以看作是坐標(biāo)系不動而圖形變動,變動后的圖形在坐標(biāo)系中的坐標(biāo)值發(fā)生變化;出可以看作圖形不動而坐標(biāo)系變動,變動后的圖形在新坐標(biāo)系下具有新的坐標(biāo)值。這兩種情況本質(zhì)上都是一樣的,都是圖形由新的坐標(biāo)值表示,因此是新產(chǎn)生的圖形。圖形幾何變換包括比例變換、對稱變換、錯切變換、旋轉(zhuǎn)變換、平移變換及其復(fù)合變換。圖形上所有的點在幾何變換前后的坐標(biāo)關(guān)系一般用解析幾何方法可以求得,但這些幾何關(guān)系用矩陣方法表示,運算更為方便。
一、基本變換
圖形基本幾何變換是指比例變換、對稱變換、錯切變換、旋轉(zhuǎn)變換和平移變換等。除平移變換外,這里其它四種幾何變換都可以用組成圖形的點向量(或稱1×2階矩陣)和2×2階變換矩陣相乘表示,而平移變換需引入新方法來實現(xiàn)。
1、比例變換
設(shè)圖形上一點P(x,y),經(jīng)比例變換后成為新的菜上一點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坐標(biāo)按同一比例變換。
0 d
當(dāng)a=d1時,圖形放大;當(dāng)0a=d1時,圖形縮小。
若a≠d,則x,y坐標(biāo)按各自不同比例變換。
3 0
例 1: 設(shè)有比例變換矩陣 T= , 三角形abc經(jīng)過比例變換成為三角形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)經(jīng)關(guān)于原點對稱變換后成為新圖形上一點P'(x',y'),則
x' = -x
y' = -y
寫成矩陣形式成為
-1 0
[x' y'] = [x y] = [x y] * T
0 -1
-1 0
這里 T = 為關(guān)于原點對稱變換矩陣。
0 -1
若關(guān)于x軸對稱,則對稱變換的矩陣表示為
1 0
[x' y'] = [x y] = [x y] * T
0 -1
1 0
于是關(guān)于x軸對稱變換矩陣 T =
0 -1
若關(guān)于y軸對稱,則對稱變換的矩陣表示為
-1 0
[x' y'] = [x y] = [x y] * T
0 1
-1 0
于是關(guān)于y軸對稱變換矩陣 T =
0 1
若關(guān)于直線y = -x對稱,則對稱變換矩陣表示為
0 -1
[x' y'] = [x y] = [x y] * T
-1 0
0 1
于是關(guān)于直線 y = x對稱變換矩陣 T =
1 0
各種對稱變換的圖形均可由實例程序繪出,參見實例程序圖形。
3. 錯切變換
對圖形的任一點P(x,y),作線性變換如下
x' = x + by
y' = y + dx
式中b,d為不全為零的常 數(shù),點P'(x',y')為新圖形上相應(yīng)的點,這個變換稱為圖形的錯切變換。
錯切變換的矩陣表示為
1 d
[x' y'] = [x y] = [x y] * T
b 1
1 d
T = 叫做錯切變換矩陣(b,d不全為零)。
b 1
① 當(dāng)d=0時,x'=x+by,y'=y,這時圖形的y坐標(biāo)不變,x坐標(biāo)值隨(x,y)及系數(shù)b作線性變化。若b0時,圖形沿x軸作錯切位移;若b0,圖形沿x軸負(fù)向作錯切位移。
② 當(dāng)b=0時,x'=x,y'=dx+y,此時圖形的x坐標(biāo)不變y坐標(biāo)隨(x,y)及系數(shù)d作線性變化。如d0,圖形沿y軸正向作錯切位移;如d0,圖形沿y軸負(fù)向作錯切位移。
③ 當(dāng)b≠0且d≠0時,x'=x+by,y'=y+dx,圖形沿x,y兩個方向作錯切位移。
1 2
例 2: 設(shè)有錯切變換 矩陣 T = ,正方形abcd經(jīng)此錯切變換成為四邊形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. 旋轉(zhuǎn)變換
設(shè)圖形上一點P(x,y)繞原點逆時針旋轉(zhuǎn)θ角后成為新的圖形上一點P'(x',y'),則由解析幾何方法可得
x' = xcosθ + ysinθ
y' = -xsinθ + ycosθ
用矩陣表示為
cosθ -sinθ
[x' y'] = [x y] = [x y] * T
sinθ cosθ
cosθ -sinθ
這里 T = 為繞原點逆時針變換矩陣。若順時針旋轉(zhuǎn)時,θ角為負(fù)值。
sinθ cosθ
5. 平移變換
若圖形上一點P(x,y)沿x軸平移 l距離,沿y軸平移m距離后成為新的圖形上一點P'(x',y'),則有
x' = x + l
y' = y + m
式中l(wèi),m不全為零,這稱為平移變換。但此變換無法用組成圖形的點向量和2×2階變換矩陣相乘來實現(xiàn)。
用二維點向量和2×2階矩陣相乘不能表示圖形的平移變換,那么自然會想到用三維點向量和3×3階矩陣相乘來實現(xiàn)圖形的平移變換。因此對圖形上二個坐標(biāo)的點向量需要添加一個坐標(biāo),使之成為三維點向量以便與三階矩陣相乘,進而實現(xiàn)用矩陣表示平移變換。實際上就是對上面的二個坐標(biāo)變換式添加第三個坐標(biāo)變換式,即成為
x' = x + l
y' = y + m
k = k
這第三個坐標(biāo)變換式(即k=k)必須是恒等式,因為不需作變換,本質(zhì)上是為了進行矩陣運算而引入的。
將此三個變換式(仍然是圖形的平移變換,不妨將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
這里通過對原圖形上二維點向量引進第三個坐標(biāo)成為三維點向量,從而使原圖形的平移變換 能用矩陣表示。同樣其它基本變換也可以如此用矩陣表示。因此圖形的基本變換都可以在這樣的三維點向量下統(tǒng)一、整齊用矩陣表示。這樣的三維點向量稱為齊次點向量,也叫三維齊次坐標(biāo)點,簡稱三維齊次坐標(biāo)。只有在三維齊次坐標(biāo)下,二維幾何變換才都可以用矩陣表示。下面再進一步討論一下齊次坐標(biāo)的優(yōu)點。
引用齊次坐標(biāo)后,可將上面各種基本變換矩陣統(tǒng)一在一個三階矩陣中。即
a b 0
T = c d 0
l m 1
式中左上角二階矩陣實現(xiàn)比例、對稱、錯切、旋轉(zhuǎn)等變換,左下角1×2階矩陣實現(xiàn)平移變換,其中a,b,c,d,l,m只要賦以相應(yīng)的值,并建立圖形上點的齊次坐標(biāo)(即在圖形上點的坐標(biāo)后引入第三個坐標(biāo)1),這樣就可以用圖形上點的三維齊次坐標(biāo)與此三階矩陣相乘來表示三維圖形的基本幾何變換了。而變換后,不用考慮第三個坐標(biāo)1,前面兩個坐標(biāo)就反映了圖形的整個變換情況。
用齊次坐標(biāo)表示一個圖形上的點,可以有多種表示,如(6,8,1)、(12,16,2)、(30,40,5)等均表示圖形上同一個點(6,8)。這樣,齊次坐標(biāo)可以表示計算機無法容納的數(shù)。例如當(dāng)計算機的字長為16位時,它能表示的最大整數(shù)為216-1=32767。若點坐標(biāo)為(80 000,40 000),則計算機無法表示。但用齊次坐標(biāo)可表示為(20 000,10 000,1/4),經(jīng)過處理后再用第三個坐標(biāo)支除前面兩個坐標(biāo),從而得到原來通常的坐標(biāo)。
齊次坐標(biāo)優(yōu)點很多,在計算機繪圖中都采用這種表示來處理圖形。下面介紹的圖形復(fù)合幾何變換就是如此。
二、復(fù)合變換
圖形的復(fù)合幾何變換是指圖形作一次以上的基本幾何變換,變換結(jié)果是每次基本變換矩陣的乘積。圖殂的復(fù)合幾何變換簡稱復(fù)合變換。
1. 復(fù)合平移
若對圖形首先作平移變換 T1,然后再作平移變換T2,相應(yīng)的平移變換矩陣分別為
1 0 0
T1 = 0 1 0
l1 m1 1
1 0 0
T2 = 0 1 0
l2 m2 1
則變換結(jié)果為復(fù)合平移變換T,其復(fù)合平移變換矩陣為
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