11/22/2006

電腦基礎概論

馮丁樹編著

概述:



一、產生背景:

十九世紀末,由於科技與工商業的發達,人類活動的項目與範圍,不斷增加與擴大,遂造成一個新的『資訊爆發』時代。再加上人類因時間與空間觀念的改變,對於即時與正確情報的需求也愈感迫切。在這種情況下,大量繁雜之資料需經迅速而正確的處理、傳遞或計算,方能滿足人類真正需求。傳統的人工作業方式只能處理較少量且較無時間性的資料,對於大量且需即時處理的資料,已難以滿足,而其方法亦漸不切實際。歐美國家乃殫精竭慮研究發明了電子計算機(俗稱電腦),以作為快速處理或運算大量資料之工具。

電腦的使用,在人類發展史上應屬第二次工業革命。在第一次工業革命中,人類藉著機械與動力之發明,延伸其工作能力;而第二次電腦的革命中,人類則使用計算機延伸其計算能力。由於積體電路技術日新月異,使電腦硬體價格不斷下降,更助長其推廣使用。不僅改變人類的日常活動,而且改變其思想觀念與組織結構。人類從此更離不開電腦的服侍了。在電腦的協助下,可以用最少的人力、時間與資源,但達到最大的工作效益,對講究勤能補拙、勤儉美德的中國人來,電腦正是實踐這些優良傳統的現代工具。目前電腦已不只是資訊工業產品而已,它是『生活』的一部份,在民眾的生活、行政效率與工商業發展等各方面都發生影響。

在軟體發展方面,過去資訊工業剛萌芽時,電腦硬體的價值佔八成,軟體只占二成;但近手來硬體價格逐年下降,而硬體則因不斷成熟的各種應用軟體的開發上市,使得硬體與軟體的價值逆轉為二比八,而中國人是一個具有高度智慧的民族,最適合發展軟體工業。


二、電腦的定義:

電腦之發展是以計算機Computer為基礎,經過長時間之研究發展而開發出來的一種高性能的資料處理裝置。因此在對電腦下定義之前我們必須先對計算機作個詮述。

2-1 計算機( Computer)

計算機一詞有很多種解釋,而就其基本功能而言,它是一種高性能的作業裝置,能接受資料之輸入,並對這些資料按照適當的程序加以處理後,將其結果輸出。


計算機
┌───┐ ┌──────┐ ┌────┐
│ 輸入 ├────┤ 資料處理 ├───┤ 輸出 │
└───┘ └──────┘ └────┘

2-2 電計算機(Electronic Digital Computer)
電腦(Electronic Brain)

電子計算機(俗稱電腦),係由許多具備不同功能之機械,電子設備所組成的一組機器。而其功能乃是利用輸入設備輸入資料(Data),然後將資料儲存在主儲存體(Main Memory)中然後再依使用者的控制(Control),將這些資料經過運算(Arithmetic)或邏輯分析(Logic ),使其產生有用的資訊(Information)後,經由輸出設備輸出資訊,以供使用者參考。

由於它具備了人腦處理問題的模式,一般人慣常稱呼它為電腦(Electronic Brain)。事實上,不管怎樣,一個是學名,而另一個則是俗名,只不過稱呼的場合罷了。

三、電腦的特性:

在基本上,電腦有下列三項功能:
  • 1. 快速且精確的運算能力。
  • 2. 強大而有彈性的記憶能力。
  • 3. 能回答邏輯思考性的問題。

這三點也正是人腦所缺乏的,所以它與人腦配合起來,可發揮神奇的效果。

四、電腦的應用:

電腦的應用範圍非常廣泛。凡是問題的解決方法與程序能被編寫成程式指令者,都可納入電腦處理。有一點值得注意的是,雖然電腦的功能強大,決算速度甚快,但並不是所有的工作都適宜使用電腦處理。有些工作太過份強調用電腦處理時,其效果反而會適得其反。較適合使電腦的事情大多是資料量龐大,強調正確計算或限時者。

科技之進步,已使過去之夢幻逐一成真,未來『秀才不出門,作遍天下事』之美景,將因『通訊到家 』目標之達成而實現。


(一)一般應用:

  1. 無人彈奏能自行演奏的鋼琴。
  2. 坐在家中即能向各中西餐廳點菜的電腦系統。除了點菜之外,其他娛樂方
  3. 面的信息亦可在家獲得立即的提供。
  4. 電腦護膚、理髮、定裝及購買衣服之配衣系統。以縮短女人上街的時間。
  5. 自動考照、換照、補發駕照系統。公路局監理站目前己開始使用此套系統,以縮短考照的時間。
  6. 休閒觀光資訊系統。要到某一個地方若不能先獲該地的資訊,有時其為不便。電腦的連線即可解決此一問題。學電腦的孩子不會變壞,將來電動玩具回到家裡來後,也比較容易管教了。
  7. 醫療保健系統。如行政院衛生署及民總院之職業病防治中心,提供職業病與環境之診斷、醫療及追蹤等並提供有關職業、環境因素對健康影響之諮詣服務等。
  8. 將來專家系統亦可以應用到醫療服務系統上,病人僅需按電腦的所詢問的病徵,即可由電腦獲得有關疾病的名稱及所需之用藥,以取代不耐煩的醫生。
  9. 學術教育資訊系統。學生與老師間的關係愈來愈緊張,利用電腦教學可以減輕這種顧慮。
  10. 衣食住行育樂資訊系統。
  11. 電話系統:影像電話高雄金門間已開放,可直接看到對方,每三分鐘一百元。這對當兵的好男而言未始不是一項福音。中文顥示型無線電叫人系統及大哥大實在方便,但也讓忙的人更加忙碌。整體服務數位網路(IDSN)可利用現有之銅纜提供語音、數據、影像及控制等多樣化之服務。使上述的方便更為顯著,電話恐嚇的案子應愈來愈少了。
  12. 家庭警報系統:竊盜增多,是目前治安之隱憂,利用電腦的控制與預警,可以使個家的安全更有保障。且其間亦可進行各種控制的工作,以彌補人手之不足。

(二)完整的個人及辦公室資訊管理系統

  1. 備忘錄:小型的文書處理系統。
  2. 行程管理/工作計劃/萬年曆/農民曆/鬧鐘:協助查詢過去或安排未來工作上各種約會及計劃。除每日之工作安排之外亦設定每週例行的工作計劃。
  3. 計算機:提供桌上型計算機之功能,具四則運算、記憶式運算、括弧與邏輯運算功能。
  4. 名片夾:將名片或客戶資料建立成名片檔,系統自動提供索引功能,以供快速之更新、查詣及列印。
  5. 資料管理工具:將日常生活上或工作上各種重要資料分類歸檔,以利查詢及更新。可以建立:客戶資料、書籍及剪報資料等管理系統。
  6. 萬用手冊:提供各種常用之資料庫,可供即時之檢索及查詢,包括:國際電話各國國碼及主要城市之區域號碼,主要家之國定假日。


(三)工商業方面之應用

  1. 國防科技方面:如工程的設計、摸擬與控制等作業。實際之過程如炸藥生產自動控制系統,運用電腦執行炸藥危險品生產自動控制。彈道設計、測試自動化系統,藉彈道設計、測試自動化系統運用電腦高速計算與分析能力,以找出最佳的參數。光電追蹤指揮自化系統,執行目標搜索、軌跡預測、追蹤及姿態穩定功能。
  2. 會計、統計方面:如薪資計算、成本分析、實用分析、統計事務...等。其中主要包括總帳會計作業、銀行票據作業及員工薪資作業等。
  3. 管理方面:生產管理、銷售管理、事務管理、人事管理、庫存管理...等。一般餐飲業、商店、工廠、批發、零售及加工業等之作業程序如貨品作業、客戶廠商、進貨作業、應付帳款、支援作業、庫存進出、銷貨作業及應收帳款等。
  4. 預測、分析及調查方面:生產預測、銷售預測、投資分析,財務分析,股票分析等。可提供成本分析、買進賣出判斷、價格排名表及券商大勢分析等。
  5. 金融方面:存放款、匯兌、股市行情分析、保費計算、票據交換...等。
  6. 教育方面:閱卷、圖書管理、電腦教學、成績統計...等。
  7. 交通方面:鐵、公路與航空之訂座、公路監理、港灣...等作業。
  8. 公共行政方面:民意調查、犯罪記錄分析、稅捐計算、選舉..等。
  9. 醫學方面:病歷管理、藥品管理、病患追蹤...等。
  10. 日常生活:微電腦控制家庭用品、家用電腦、電動玩具,...等。其他如
  11. 租屋資訊交換的崔媽媽服務中心、電腦擇偶中心。遊戲程式如電動玩具、三國志、俄羅斯方塊。
  12. 電傳視訊服務:現有之BBS網路、如電信局之電傳系統、農委會之農
  13. 情報導系統、勞委會職訓局之企業/職業訓練活動資訊系統,只要加入其系統,各訓練機構提供的課程研討會、演講會、考察團、職業訓練及檢定、兢賽等資訊活動均能從自已的電腦螢上查到。
  14. 多媒體系統:結合處理不同媒體的能力,包括文字、數據、圖形、靜態畫面、動畫、影像、聲音和特殊音效等,而由電腦微處理器控制做交談式對話的系統產品。

利用電腦影像、音響效果、光碟及中央處理機組成。其功能分:

  1. 多媒體數位化週邊處理裝置及控制軟體。
  2. 多媒體處理工作站。
  3. 多媒體發展系統。

可能用途:簡報系統、展示系統、大型視訊板、影音製作、導覽系統、查詢
系統、教育訓練、銷售促進等等。

  1. 簡報場合:提昇聲音、影像表現力與訴求力。如達文西、展昭
  2. 娛樂場合:提昇聲音及影像品質。屬低中層次之產品,以Video Game使用為主。
  3. 教育訓練場合:提高使用者人機介面品質。


(四)、農業方面之應用:

  1. 作業分析及系統模擬:農機成本分析、農家記帳系統、農機管理系統、農機修護物料管理系統、豬牛等生長及飼料管理系統。植物生長模擬、穀物乾燥模擬、農產物應力分析、風場流動分析,...
  2. 自動控制之應用:曳引機駕駛控制、水平控制、耗油量控制、打滑率控制、收穫機損失控制、脫粒筒轉速控制、田間作業速率控制、播種精度控制、插秧間距控制、溫室控制、乾燥機操作控制、農機作業安全之警示。
  3. 影像處理辨識及光電技術之應用:農漁產品、穀物之顏色選別、大小選別、異物選別、成熟度之辨識。
  4. 機器人之應用:噴藥作業、水果採摘、花卉之盆栽、高級農作物之選別、植物工廠、協助廢棄物之處理。
  5. 人工智慧及專家系統之應用:農機元件之製造、牲畜疾病之檢查與診斷、農機故障之診斷、引擎故障之診斷、農作物產量之預估、市場價格之警報等。
  6. 毛豬拍賣系統:早期毛豬拍賣市場幣端甚多,利用電腦可以自動過磅、買主身份及繳款額度控制、競價過程到成交後之各式報表產生等全部由腦連線控制。台北縣肉品拍賣市場每天要處理數千頭豬隻,平均每六秒即有頭豬成交。
  7. 其他應用:CAI、協助教學、協助農機試驗、檢查動物發情期、懷孕期、倉儲自動化作業等。


(五)、微電腦之一般應用(套裝軟體)----------------------------------------

  1. 文書處理、簡報系統、繪畫系統、排版系統PE II、KS2、慧星一號、天蠍星、WORD STAR、MS WORD、WORD PERFECT 達文西、變影 72、DR HALO、PC PAINT、PAINT BRUSH、MAC PAINT、GEM 雅墨、畢昇、漢通、天工、PAGE MAKER
  2. 速算表、資料庫處理國喬雙子星、LOTUS 1-2-3、EXCELL、 MULTIPLAN、... 慧星二號、DBASE III+、DBASE IV、FOXBASE、RBASE、 ...
  3. 工程繪圖及製造 AUTOCAD、CADKEY、VERSA CAD、MAC DRAW、...
  4. 統計及製表 STATGRAPH、SAS、SPSS、MS CHART、ENTERGRAPHICS
  5. 通訊軟體: PROCOMM、TELIX、CROSSTALK、PCTALK、APPLETALK


討論題目:

1. 什麼是電腦?他的功能如何?
--輸入輸出、大量記憶、快速運算及邏輯運算。

2. 電腦具有之特性:
--有容乃大,容量大佔空間小。
--電光石火,運算速度快。
--孔明神算,精確度高、品質劃一。
--千里一線牽,具備電傳能力。
--恆久忍耐、永不止息,永不疲乏。

3. 電腦的歷史:
--機械時期:1642-1946
--真空管時期:1946-1954 第一代
--電晶體時期:1954-1964 第二代
--積體電路時期:1964--? 第三代
-SSI
-MSI
-LSI
-VLSI 第四代

4. 什麼叫硬體? 什麼叫軟體 ?(韌體?)
--靈魂與軀體
--機體與程式

5. 電腦之基本結構:
--輸入部門
--記憶部門    ─┐
--計算及邏輯部門─┴─中央處理部門
--輸出部門
--控制部門

6. 電腦的分類:
--大型電腦:超級快速電腦
--中型電腦
--小型電腦:迷你級
--微型電腦:個人電腦或家用電腦

7. 中央處理部門:

a. 中央處理機 CPU
--6502、Z80、Z8
--8088、8086
--80286、80386、80486
--68000、68020、68030
b. 唯讀記憶體(ROM)
c. 隨機存取記憶體(RAM)
d. I/O通道
e. 資料、住址及控制用排線
8. 記憶體及資料之儲存
--位元(bit)
--位元組(byte)
--位址(address)


五、電腦的演進:

第八章、 電腦繪圖

第八章、 電腦繪圖




QUICK BASIC 提供相當強之繪圖指令,可在單色色或彩色顯示器上顯示各種形狀、
顏色及圖案。為執行繪圖功能,所用之電腦必須有繪圖能力者,如選用 CGA、EGA 或
VGA等介面,若使用 HERCULES 介面,則必須事先執行 QBHERC.COM 檔。為進行繪圖,
必須先設定螢幕規格及模式,如:

SCREEN n,coloron,apage,vpage

此處 n 值可為 0,1,2,3,7,8,9,10,11,12 或 13。其選擇依所用之監督器及介面而
定。coloron 為顏色之選擇開開,若為零,則僅黑白顯示,非零值則顯示彩色,在 n值
大於 2 時,此參數會被忽略。apage為實際繪製頁,vpage 則表示螢幕顯示頁。通常繪
製與顯示頁相同時,此兩參數均可省略。除 n 值必須存在外,其他參數均可省略,但
若省略中間之參數時,其逗點仍應保留。

式中之 n 值為模式值。n 值為零時屬文字模式,可使用於單色或彩色之螢幕。其
餘依其解析度之不同,可進行繪圖。有些則是文字與圖形混合模式。一般之設定模式分
別如下,其餘則可參考使用手冊。

1. 單色或 Hercules 卡時 n = 0, 3 ( 解析度 720 x 349), 10
2. CGA n = O, 1, 2
3. EGA n = 0, 1, 2, 7, 8, 9, 10
4. VGA n = 0, 1, 2, 7, 8, 9, 10, 11, 12, 13

各模式下之螢幕解析度如下:

n=1,7,13 : 320 x 200 文字 40 x 25
n=2,8 : 640 x 200 文字 80 x 25
n=3 : 720 x 349 文字 80 x 25
n=9,10 : 640 x 350 文字 80 x 25 或 80 x 43
n=11,12 : 640 x 480 文字 80 x 30 或 80 x 60


螢幕像點及座標:
==============

在螢幕上之圖形是由許多光點所組成,此稱之為像素(pixels)。BASIC 中之繪圖指
令主要功能在打開或關閉像點及改變其顏色。

典型之螢幕係由這些像點縱橫排列而成。其像素之數目及排列方法通常由所裝置之
硬體以及在 SCREEN 中所宣告之模式所決定。可打開之像素數目愈多,其所能繪製之圖
像也愈清析。列如,SCREEN 1 之解析度為 300 x 200 點(水平 300 點,垂直 200 點)
,而 SCREEN 2 則為 640 x 200 點。故模式 2 每列為 640 點,為模式 1 之兩倍,其
圖形會顯得更尖銳、更清析。

依據所裝置之系統之差異,可選用其他模式以獲得更高之解析度。其相關特性如上
表所示。只要所裝設之螢幕係屬於上面所列模式中之一種,你即可利用座標之表示方式
來指定某一像素點。一般所用之座標為成對的。在螢幕之左上角為座標原點(0,0)。以
圖 5.1 中所示之螢幕為例,螢幕之右下角座標為 (639,199),右上角為 (639,0),左
下角為 (0,199);而其上中、中央及下中分別為 (320,0)、(320,100)及 (320,199)。
基本上,BASIC 是採用這些螢幕座標作為決定顯示圖形之根據。

有一點值得注意的是,圖像座標與文字模式下所用之座標並不相同。前面曾提及
LOCATE 之定位座標則是以文字模式為基礎的。在螢幕上,標準之文字模式為 80 x 25
個字。故每一個字元所佔之像素為 8 x 8 個。LOCATE 之指令通常對圖型模式之螢幕不
發生任何影響。

畫點、線及框:
============
1. 畫點:

PSET [STEP](x,y),color
PRESET [STEP](x,y),color

一般簡單之圖形可利用 BASIC 之內建指令為之。PSET 與 PRESET 為畫點之指令。
此兩種指令之功能基本上是一樣,尤其當其後面之顏色參數均分別設時為然。在高解析
度繪圖型中,顏色如為 0 代表黑色,1 代表白色(或綠色)。在顏色均未設定之情況,
PSET 會自動設定為前景顏色;而 PRESET 則自動設定為背景顏色。換言之,利用
PSET 可以在螢幕上繪一點,而用 PRESET 則可在螢幕上擦去該點,因為後者將繪製之
顏色設定與背景顏色一樣。

在此兩個指令中,若不用 STEP 時,其 x,y 所表示者為絕對座標,若加上 STEP
則 x,y 所示者為與前一點之相對座標。

2. 畫線與框:

LINE (x1,y1)-(x2,y2)
LINE -[STEP](x2,y2)
LINE [STEP] (x1,y1)-[STEP](x2,y2),color,B[F],style

繪直線時,必須指出起始及終止座標,其間以『-』連接,如第一種型式。若是從
上一次之直線為開始,則可不必將第一點寫出,採用第二種型式即可。與前面畫點之情
況相同,若在座標前加上 STEP,表示該座標為與前一點相對之座標,否則即為絕對座
標。

第三種型式為 LINE 較完整之指令格式,其 color 參數所指為線本身之顏色代號
。有畫線之指令事實上很容易畫框,但在 LINE 指令本身亦提供一簡易繪製方框之方法
。只要在指令後面選 B,則同一指令變成繪製方框之指令,而其兩點座標則分別為方框
之左上角及右下角之座標。若在 B 參數之後加上 F 參數選項,則所繪製之框中,將塗
滿顏色。在選 B 時,其前面之 color 若不選,則其逗點仍應保留。

3. 畫虛線:

利用 LINE 指令亦可將直線繪成虛線顯示。在 LINE 之參數最後一項為 style 所
代表者為不同虛線之代碼。style 為十六位元之整數值,以十六進位表示。其每位元之
值若為零時表示該像素關閉,為 1 時表示打開。例如 style=&HCCCC 時,其二進位表
示法為 1100110011001100,故所得之虛線為二點開二點閉之情況。

畫圓、橢圓與弧:
==============

1. 畫圓:

CIRCLE (x,y),radius
CIRCLE STEP (x,y),radius
CIRCLE [STEP](x,y),radius,color,start,end,aspect

CIRCLE 之指令可繪製一般圓形、橢圓、橄欖形及其他弧形曲線。畫圓時,事先必
須知道兩件事,其一為圓心之座標,其二為半徑。圓心之座標亦分為絕對及相對兩種,
相對者必須在其座標前加上『STEP』之字樣。有上述資料後,保證你可以繪出一個漂亮
的圓形。下面為其中二例:

CIRCLE (200,100),75
CIRCLE STEP(-120,0),75 執行二敘述後,相等於執行 CIRCLE (80,100),75

2. 畫橢圓:

在螢幕上,有時所繪之圓並不很圓,主要是螢幕硬體上之關係。為此,可利用
CIRCLE 指令中之 aspect 參數。加此參數時,若其前面之某些參數省略,其逗點仍應
保留。此處 aspect 之值為圓形封閉線內,垂直直徑與水平直徑之比值。此項比值可以
由此參數進行調節。但若從有意設定之角度來看,利用此參數之改變,亦可獲得橢圓形
或橄欖形,前者為此參數愈大之情況,後為此值小於零的情況。不過在此必須注意的是
,由於半徑在水平及垂直之方向不同,指令中之半徑參數應為何者方正確?在 BASIC
語言中,若 aspect 之值小於一時,半徑係指水平方向;aspect 若大於或等於一,則
半徑為垂直方向。下面為其數例:

CIRCLE (60,100),80,,,,3 '高瘦橢圓
CIRCLE (60,100),80,,,,3/10 '矮胖橢圓

3. 畫弧:

弧為圓或橢圓之一部份,或為短曲線。在瞭解 CIRCLE 指令如何畫弧之前,須先瞭
解 BASIC 如何量測角度。在 BASIC 中其函數所用之角度單位均為弧度。故在 CIRCLE
之指令所用之角度參數亦不例外(唯一例外是使用 DRAW 指令時,須以度表示之)。

在 CIRCLE 中其角度均以反時針方向為基準,並且以此方向作為起始與結束之劃分
。繪製一弧線時,需提供起始角度及終了角度。其格式如下:

CIRCLE [STEP](x,y),radius,[color],start,end[,aspect]

式中之 start 及 end 分別為弧線之起始弧度及終了弧度。但記得若僅為畫弧線部
份時,則 start 與 end 所需之弧度均應為正值。

4. 畫餅:

CIRCLE 指令亦可用來畫切分之餅。上面所列參數 start 與 end 所需之弧度若均設
定為負值,則執行該指令之後,弧線之起始及終點均會與其圓心相連,構成一個被切開
之餅,可作為繪製派圖之用,如:

CIRCLE (100,50),30,,-2.5,-3.14

11/16/2006

如何畫圖

圓形是畫圖之重要項目之一,但是在MATLAB並無直接指令可進行畫圓。畫一個圓需要圓心及半徑,亦需要顏色的參數。問題是圓在繪製時,必須先清礎座標的比例,否則會造成楕圓或比例不對稱的圓,此點可以在畫圓前先作等軸的宣告,至於終端機本身之軸向若有不等比例,則必須由終端機之控制鈕調整。即:


>> axis equal;



>>axis image

後者之指令功能與前者大略相同,但它會將所繪的圖自動調整至中央部份,可以一覽全圖。無論如何,經由上述任一個宣告之後,兩軸之比例亦會相等,若不宣告,則必須自行調整視窗之長與寬,使其近似等比的情況。

基本上圓周之構成可用三角函數的關係式計算:
x=rcosθ
y=rsinθ
    1.1
其中角度θ則應自零至360度。而其區間應為θ/ Nb。

繪圓之指令(circle.m)則如下述,其輸入參數包括半徑、圓心位置及繪製之點數。本指令本身並不自行繪圖,主要提供圓周各點之座標,供其他座標操作用途,故必須配合一小程式執行繪圖之功能:


function [coords] = circle(r,x0,y0,nn)
% This function draws a circle in a radius r,
% at the center (x0,y0)
% The inputs:
% r = radius of circle
% x0, y0= coordinates of the circular center
% nn = number of drawing points
% coords(nn,1-2)= vectors to store the coordinates
% Example: circle(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[x0+r*cos(jj);y0+r*sin(jj)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


實例:繪一半徑為5,原點處之圓。

>> coord=circle(5,0,0,20)
coord =
Columns 1 through 8
5.0000 4.7553 4.0451 2.9389 1.5451 0.0000 -1.5451 -2.9389
0 1.5451 2.9389 4.0451 4.7553 5.0000 4.7553 4.0451
Columns 9 through 16
-4.0451 -4.7553 -5.0000 -4.7553 -4.0451-2.9389 -1.5451 -0.0000
2.9389 1.5451 0.0000 -1.5451 -2.9389-4.0451 -4.7553 -5.0000
Columns 17 through 21
1.5451 2.9389 4.0451 4.7553 5.0000
-4.7553 -4.0451 -2.9389 -1.5451 -0.0000
>> plot(coord(1,:),coord(2,:))
>> axis equal
>> grid on




上述指令中,plot()是常用的指令,但也可以用line()這個指令取代(讀者可以自行在MATLAB上測試)。兩個間之不同處是,可以同時繪多圖,亦可在其後面之參數添加顏色值,後則是僅能繪一組線資料,其顏色則必須利用set()之指令進行設定。一般認知上,應為圓滑之曲線,但就circle()指令之操作,實際上圓仍由線段組成。因此段數或點數nn愈多,所繪製之曲線會愈為平滑;而其平滑度仍然會與半徑大小有關。故nn值之設定在本例中也有其重要性。

上述circle()之繪圓指令,只是先獲得圓周點之資料,供其他程式計算之用途。指令若能直接繪圖,則其功能將更為強大。函數circle1()是另一種多功能的繪圓指令,其內容如下:

function h=circle1(r,x0,y0,Nb,C)
% function h=circle1(r,x0,y0,Nb,C)
% Adding circles to the current plot
% Variables:
% r:radi of circle, a scalar or row matrix.
% x0,y0: Centers of circles, a scalar or row matrix
% C:line colors, a string ('r','b'...),
% or RGB values in column
% Nb:No. of drawing points, a scalar or
% row matrix(default=300)
% the size of Nb must be one
% or equal to the size of r.
% h:handles to the circles
% Rules:
% 1. r=a matrix, (x0,y0)=a scalar:Multiple
% co-centered circles
% 2. r=a scalar, (x0,y0)=row matrix: circle with
% r at each center
% 3. r,(x0,y0)=same length row matrix: circle
% with coresponding r at cooresponding center
% 4. r,(x0,y0)=different-length row matrix: Mutiple
% circles with different r at each center.
% Examples: (execute the commands "clf;" first)
%% Example 0:> circle1
%% Example 1
% circle1([1 2 3],[2 3 5],[1 2 1],20);
%
%% Example 2
% the=linspace(0,pi,200);
% r=cos(5*the);
% circle1(0.1,r.*sin(the),r.*cos(the),20,hsv(40));
%
%% Example 3
% [x,y]=meshgrid(1:10,1:10);
% circle1([0.5,0.3,0.1],x,y,20,['r';'y']);
%
%% Example 4
% circle1(1:10,0,0,3:12,[]);
%
%% Example 5
% circle1((1:10),[0,0,20,20],[0,20,20,0]);
%
% rewritten by Din-sue Fon. BIME, NTU. Date:Nov 18,2004.
% Check the number of input arguments
axis equal;
if nargin <5,C=get(gca,'colororder');end
if nargin <4,Nb=300;end
if nargin <3,y0=0;end
if nargin <2,x0=0;end
if nargin <1,r=1;end
% Change matrices into row-wise ones
x0=x0(:);y0=y0(:);r=r(:);Nb=Nb(:);nx=length(x0);
if length(y0)>nx&nx==1,x0=ones(length(y0),1)*x0;end;
if nx>length(y0)&length(y0)==1,y0=ones(nx,1)*y0;end;
nr=length(r);nx=length(x0);nnb=length(Nb);

if length(y0)~=nx,
error('The lengths of x0 and y0 must be identical');
return;
end;
% plotting
for k=1:nx,
if nx==nr,
coords=circle(r(k),x0(k),y0(k),Nb(rem(k-1,nnb)+1)+1);
h(k)=line(coords(1,:),coords(2,:));
set(h(k),'color',C(rem(k-1,size(C,1))+1,:));
else
for m=1:nr
coords=circle(r(m),x0(k),y0(k),...
Nb(rem(m-1,nnb)+1)+1);
h(k,m)=line(coords(1,:),coords(2,:));
set(h(k,m),'color',C(rem(k*m-1,size(C,1))+1,:));
end
end
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [coords] = circle(r,x0,y0,nn)
% function [coords] = circle(r,x0,y0,nn)
% This function draws a circle in a radius r,
% at the center (x0,y0)
% The inputs:
% r = radius of circle
% x0, y0= coordinates of the circular center
% nn = number of drawing points
% coords(nn,1-2)= vectors to store the coordinates
% Example: circle(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[x0+r*cos(jj);y0+r*sin(jj)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

1.1.2畫圓程式之應用

在MATLAB中繪線,可用line的功能,這個繪線指令係根據座標點矩陣逐點連線繪製。但是連線時係以直線表示,因此必須在適當的點數下所繪製的圖才能近似圓形,故點數也相當重要。在circle之函數當中,其輸入之變數分別如下:

  •  r::圓之半徑,可為列矩陣,若為列矩陣時,代表可同時繪製許多圓。
  •  x0, y0: 圓心之座標,可為矩陣,若為矩陣時,代表可同時繪製許多不同圓心位置之圓。
  •  C:圓之顏色
  •  Nb: 繪圓時所用之點數,其預設值為300點。

函數circle1()除可繪圖外,可以繪製多種型式的圓,並附上顏色。程式內容看來較為複雜,實際執行僅是其中之下半部,其餘均在核對輸入參數之正確性,使程式更能處理不同的需求。這個程式即使僅打入circle1亦可運作,如:

>> circle1
ans =
152.0021




圖2所示即為其繪圖之結果,由於輸入參數均未設定,故程式僅採用預設值,即半徑為1,圓心為原點。指令窗中所顯示之ans=152.0021為此圖之握把值,該值可以作為程式中指定該圖之參考指標。 

實例:

>> circle1([1:10],0,0)
ans =
Columns 1 through 8
152.0050 156.0038 157.0037 158.0033 159.0033 160.0032 161.0032 162.0032
Columns 9 through 10
163.0032 164.0032



圖3為同心圓,只要半徑為列矩陣,即可繪出不同的同心圓,而其顏色則依預設之順序分配,若欲固定顏色,則可在最後一參數中輸入其RGB值。

同心圓之方式也可稍作改變,這是將半徑10分成1,2,3,…,10之同心圓。若將中心點之位置移動,而半徑值固定,其程式如下:

實例:

>> clf;circle1(20,1:2:10,1:2:10)
ans =
152.0054
156.0042
157.0040
158.0035
159.0035



在此實例中,開始下clf是先將前圖洗淨的意思,若不下此指令,則後圖會與前面的圖重疊,不然就要先以configure(h)設定另一個圖窗。若要不同半徑之圓處於不相干之位置,亦可利用下述之方法求得:

實例:

>clf;circle1([1 2 3],[2 3 5],[1 2 1],20);



在此指令下,可以看到半徑r=[1 2 3]的列向量,而圓心x,y也是同元素之列向量,故繪出其對應的圓。其顏色則依內定的排列方式自動顯出。在此每圖之點數均為20點。這種變化有時可以應用在其他有規則之圓心軌跡上,如下面之實例:
實例:

>> the=linspace(0,pi,200);
>> r=cos(5*the);
>> circle1(0.1,r.*sin(the),r.*cos(the),20,hsv(40));
>> circle1(0.1,r.*sin(the),r.*cos(the),20,hsv(40));




在第一行指令中,有一個新指令linspace(),它是分點的函數,亦即在一數列上自開始點至終點間分成若干線段點,其最後之參數即為段數。請注意它不是linespace()。

在這個例子中,另外加顏色碼,使其變化依繪圓的過程而轉變顏色。hsv(40)是一個色彩度之顏色值,分成40個點,但每點有3項RGB值,故其形成之資料大小應為40x3。顏色亦可用文字代表,即'r'(紅色);'y'(黃色); 'k'(黑色);'b'(藍色)等,但必須以行矩陣表示。

若半徑與圓心座標之元素個數不同,則會在不同的圓心上作同心圓,如下實例:

實例:

%test1
clf;
axis equal;
[x,y]=meshgrid(1:5,1:5);
circle1([0.5,0.3,0.1],x,y,['r';'b']);




網格之製作可利用meshgrid()函數,其參數包含X軸與Y軸部份,以方格進行切割,得到不同之座標位置。利用circle1()函數即可以網格點為圓心,繪製不同之同心圓。

除此以外,亦可利用圓周之點繪製多邊形,其實例如下:

實例:

>> circle1(1:10,0,0,3:12)
ans =
Columns 1 through 8
152.0056 156.0044 157.0043 158.0038 159.0038 160.0034 161.0034 162.0034
Columns 9 through 10
163.0034 164.0034



比較複雜之運用則是除點數外,可以運用參數之可變特性繪製特殊之圓形圖形。

實例:

%test2
%
clf;
x=zeros(1,200);
y=cos(linspace(0,1,200)*4*pi);
rad=linspace(1,0,200);
cmap=hot(50);
circle1(rad,x,y,300,[flipud(cmap);cmap]);




此程式中,所用之函數大部份均已用過,其中zeros()函數較為特殊,通常一個矩陣中各元素要令其為零時,可用此函數,其括號內為矩陣之大小。此函數亦可作為某一矩陣大小之宣告,事先預約空間,使電腦在執行時加快速度。其相對應之函數為ones(),其功能相同,只是此函數將所有元素均設定為一。

在顏色之參數中,有一flipud()函數,這是將矩陣上下鏡射交換,使色調成為對稱狀態。

1.2如何繪製橢圓

某一特定點離兩固定點間之距離和為一定時之軌跡為ellipse 圓。垂直之兩軸是由半長軸Ra與半短軸Rb,構成,其與橢圓周上任意點P之座標關係如下:

x²/Ra²+y²/Rb²=1
x = Racosθ, y=Rb sinθ      1.2



若橢圓之長軸旋轉一個角度φ,則,則其新座標將變為:

x'=x cosφ-y sinφ
y'=x sinφ+y cosφ    1.3

將公式1.2代入1.3則關係式變為:

x'=Racosθ cosφ-Rb sinθ sinφ
y'=Racosθ sinφ+Rb sinθcosφ        1.4

事實上圓的圖形亦可作為ellipse 圓之特殊形,因為只要ellipse 圖之長軸與短軸相等時,即可以作成圓。與前面作圓之情況相同,在執行此指令時,若要避免發生重疊,可以先清除圖窗(即clf;)。

橢圓繪圖程式之應用

依據公式1.4,橢圓之座標點可用ellipsexy()這項函數求得,其輸入參數包括半長短軸Ra、Rb,中心座標(x0,y0),迴轉角度ang及點數 nn等。其座標值則儲存在coords中,可以直接用來繪圖。其程式之內容如下:


function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% This function draws a ellipse with a long radius ra,
% and short radius rb at the center (x0,y0)
% The inputs:
% ra, rb = long & short radii of the ellipse
% x0, y0= coordinates of the ellipse center
% nn = number of drawing points
% ang = angle of the long axis, in radians
% coords(nn,1-2)= vectors to store the coordinates
% Example: ellixy(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[ra*cos(ang)*cos(jj)-rb*sin(ang)*sin(jj)+x0;...
ra*sin(ang)*cos(jj)+rb*cos(ang)*sin(jj)+y0];

本程式ellipsexy()並未有繪線之功能,可以配合plot()或linke()等繪線函數為之。仍採用line 的功能,逐點連線繪製。由於連線係以直線表示,因此必須在適當的點數下才能繪出近似橢圓形,故點數也相當重要。下面之實例中,點數僅10點,故其橢圓未能成形,可以比較其所繪出之圖形。

實例:半長短軸分別為10、5,中心座標為原點,長軸迴轉30度,試繪出其外形。

>> coord=ellipsexy(10,5,0,0,pi/6,10)
coord =
Columns 1 through 8
8.6603 5.5368 0.2985 -5.0538 -8.4758 -8.6603 -5.5368 -0.2985
5.0000 6.5903 5.6633 2.5731 -1.4999 -5.0000 -6.5903 -5.6633
Columns 9 through 11
5.0538 8.4758 8.6603
-2.5731 1.4999 5.0000
>> plot(coord(1,:),coord(2,:))
>> axis equal;grid on



具有繪製橢圓功能之函數為ellipse0()。可以多重繪製各種橢圓。其程式內容如後,主程式並呼叫副程式ellipsexy(),後者可以另行建檔,或附於呼叫程式之後。其相關參數如後:

  • ra, rb:橢圓之半長短軸,可為列矩陣,若為列矩陣時,代表可同時繪製許多橢圓,原則上兩陣列之大小應相同,若其中一個為常數(即為1x1陣列),程式會自動調整與其他一項目同。
  • ang:長軸之傾斜角,以度度表示。可為列矩陣,若與ra或rb之大小相同,則會在各中心點處繪製對應之單一橢圓。
  • x0,y0:橢圓之中心座標,可為矩陣,若為矩陣時,代表可同時繪製許多不同圓心位置之橢圓。
  • C:橢圓線之顏色,可為RGB之三組數值,是為行矩陣。亦可用代碼表示。如['r';'b';'k'...]。注意為使其形成行矩陣,中間必須用分號隔開。
  • Nb: 繪ellipse 圓時所用之點數。預設值為300。

其他參數配合使用原則:

  • 若ra 為單一項,x0,y0 為向量矩陣,則會繪製向量矩陣數之橢 圓。若x0,y0 為單一項,則會繪製同心橢圓。
  • ra 為向量矩陣,則會繪製同一橢圓心之不同半徑向量矩陣數之橢圓。
  • ra 均為同大小之矩陣向量,則會繪製數目相同之橢圓。 若x0,y0 與ra 均為不同大小之矩陣,則會繪製總數為兩矩陣數目之乘積。
  • 實例:繪製一個傾斜某30角度之橢圓。

>> ellipse0(2,1,0,0,30,'r')
ans = 152.0020


實例:在相同半長短軸及中心點下,可以變化角度,產生旋轉之橢圓群:

>> ellipse0(2,1,0,0,0:20:360)
ans =
Columns 1 through 8
160.0020 161.0020 162.0020 163.0020 164.0020 165.0020 166.0020 167.0020
Columns 9 through 16
168.0020 169.0020 170.0020 171.0020 172.0020 173.0020 174.0020 175.0020
Columns 17 through 19
176.0020 177.0020 178.0020



實例:若半短軸維持不變(可以輸入單一值),配合半長軸進行變化。

>> ellipse0(1:10,4,0,0)
ans =
Columns 1 through 8
152.0024 156.0024 157.0024 158.0024 159.0024 160.0024 161.0024 162.0024
Columns 9 through 10
163.0024 164.0024



實例:同時變化半長短軸,其他維持不變。

>> ellipse0(1:6,0.5:0.1:1.0)
ans = 152.0026 156.0026 157.0026 158.0026 159.0026 160.0026




實例:變化半長短軸,也變化Y軸之高度。

>> ellipse0([1:10]*2,1:10,0,1:10)
ans =
152.0037 156.0037 157.0037 158.0037 159.0037 160.0037
161.0037 162.0037 163.0037 164.0037



實例:曲線變化半長短軸,也變化Y軸之高度。

>>ellipse0([1:10].^2,1:10,0,[1:10]*10);




程式內容:

function h=ellipse0(ra,rb,x0,y0,ang,C,Nb)
% h=ellipse0(ra,rb,ang,x0,y0,C,Nb)
% Adding ellipse to the current plot
% Variables:
% ra,rb:longitudinal & horizontal axes of a ellipse, scalar or matrix.
% ang: angle the ellipse inclines, in deg.
% x0,y0: Centers of the ellipses, a scalar or row matrix
% C:line colors, a string ('r','b','k'...),or RGB values in column
% Nb:No. of drawing points, a scalar or row matrix(default=300)
% h:handles to the ellipse
% Rules:
% 1. ra,rb= matrix, (x0,y0)=a scalar:Multiple co-centered ellipes
% 2. ra,rb= scalar, (x0,y0)=row matrix: ellipse with ra & rb at each center
% 3. ra,rb,(x0,y0)=same length row matrix: ellipse with coresponding r at
% cooresponding center
% 4. ra,rb & (x0,y0)=different-length row matrix: multiple ellipses with
% different pairs of ra & rb at each center
% 5. ra, rb should have same size
% Examples: (execute the commands "clf;" first)
%% Example 0: ellipse0
% ellipse0(2,1,0,0,0:10:360);
% clf;ellipse0(3,1,[0 2 5],[0 1 4],0:10:360)
% ellipse0(ra,rb,ang,x0,y0,C,Nb), Nb specifies the number of points
% ellipse(1,2,pi/8,1,1,'r')
% author: Din-sue Fon. Bime, NTU, Date:November 18, 2004
axis equal;
if nargin <7,Nb=300;end
if nargin <6,C=get(gca,'colororder');end
if nargin <5,ang=0;end
if nargin <4,y0=0;end
if nargin <3,x0=0;end
if nargin <2,rb=1;end
if nargin <1,ra=2;end
% change the matrices into one row
x0=x0(:);y0=y0(:);ra=ra(:);rb=rb(:);ang=ang(:)*pi/180;
nr=length(ra);nx=length(x0);
if length(rb)>nr&nr==1,ra=ones(length(rb),1)*ra;end;
if nr>length(rb)&length(rb)==1,rb=ones(nr,1)*rb;end;
if length(y0)>nx&nx==1,x0=ones(length(y0),1)*x0;end;
if nx>length(y0)&length(y0)==1,y0=ones(nx,1)*y0;end;
nr=length(ra);nx=length(x0);nnb=length(Nb);nang=length(ang);
if length(y0)~=nx|length(rb)~=nr,
error('The lengths of ra & rb should have same size!');
return;
end
if isstr(C),C=C(:);end;
for k=1:nx,
if nx==nr,
for n=1:nang
coords=ellipsexy(ra(k),rb(k),x0(k),y0(k),ang(n),...
Nb(rem(k-1,nnb)+1)+1);
h(k,n)=line(coords(1,:),coords(2,:));
set(h(k,n),'color',C(rem(k*n-1,size(C,1))+1,:));
end
else
for m=1:nr
for n=1:nang
coords=ellipsexy(ra(m),rb(m),x0(k),y0(k),ang(n),...
Nb(rem(m-1,nnb)+1)+1);
h(k,m)=line(coords(1,:),coords(2,:));
set(h(k,m),'color',C(rem(k*m*n-1,size(C,1))+1,:));
end
end
end
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% function [coords] = ellipsexy(ra,rb,x0,y0,ang,nn)
% This function draws a ellipse with a long radius ra,
% and short radius rb at the center (x0,y0)
% The inputs:
% ra, rb = long & short radii of the ellipse
% x0, y0= coordinates of the ellipse center
% nn = number of drawing points
% ang = angle of the long axis, in radians
% coords(nn,1-2)= vectors to store the coordinates
% Example: ellixy(10,0,0,10)
jj=0:2*pi/nn:2*pi;
coords=[ra*cos(ang)*cos(jj)-rb*sin(ang)*sin(jj)+x0;...
ra*sin(ang)*cos(jj)+rb*cos(ang)*sin(jj)+y0];

11/10/2006

遞回程序之使用

MATLAB Recursive use of function

遞回程序是利用函數呼叫自己,直到特定條件滿足為止。例如:某一數列連續加法,即


Sum=1 + 2 + 3 + 4 + ...+n

下面為這種遞回程序之應用:

function sum=sigma(n)
%Recursive use of function
%Find the sumation of i, if i=1:n
if n>1
sum=n+sigma(n-1);
else
sum=1;
end


執行結果:

>> sigma(5)
ans =
15

這種結果,在MATLAB中不寫程式也可以指令達到相同的目的:

>> sum(1:5)
ans =
15

另外例子:

>> sigma(100)
ans =
5050

>> sum(1:100)
ans =
5050


同樣的道理,若累加改為累乘則會如何呢?實際上程式內容一樣簡單,函數名稱改為factx就行了:


function sum=factx(n)
%Recursive use of function
%Find the multiple prodcut of i, as i=1:n
if n>1
sum=n*factx(n-1);
else
sum=1;
end

執行結果如下:

>> factx(5)
ans =
120

只是,MATLAB竟然將這項功能也變成一個factorial指令了:

>> factorial(5)
ans =

120

結果是不是一樣呢?

11/07/2006

使用繪圖工具

繪圖工具是一種交談式之繪圖環境,不必寫程式。這是matlab最近加強的功能,它可以產生不同型式之圖形,亦可由工作空間中直接選定要繪製之參數資料。具有併圖的功能,一般圖形特性也可以透過此一繪圖工具來達成。


>> plottools

由圖形窗直接選擇 Show Plot Tools指令亦可,最後會顯示如下之視窗。下面之繪圖程式可先提供繪圖之素材,執行後之結果會直接顯示在圖窗上。

x = 0:pi/100:2*pi;
y1 = sin(x);
y2 = sin(x+.25);
y3 = sin(x+.5);
subplot(2,1,1);
plot(x,y1,x,y2,x,y3);
axis tight;
w1 = cos(x);
w2 = cos(x+.25);
w3 = cos(x+.5);
subplot(2,1,2);
plot(x,w1,x,w2,x,w3);
axis tight;


將上述程式以editor存檔,然後在指令窗下執行,其後再執行plottools,即可得到下面的圖形介面。此時圖形會顯現在正中央,兩側分別為圖形繪製時之參數。左邊為圖形佈置參數,可以隨時增加副圖,包括二維與三維之圖形。此外為輸入之變數資料,這些小窗可以關閉或加入,或在參數設定時宣告即可。例如:

>>plottools( 'on', 'figurepalette')

>>figurepalette




圖形之內容則可直接利用滑鼠選擇,其對應之線圖會在左側之圖形觀視窗內顯示,亦可勾選是否顯示。




圖形窗之使用說明

工作鈕的功能


圖形除由plot等指令繪製外,其結果仍可以在窗形窗下修改,所以即使不會圖形指令之參數者,亦可利用圖形窗上之工作鈕作修正。這些工作鈕包括存檔及列印、縮小及放大、圖形旋轉及座標轉換等等。其外觀如下:


此外,由view選單中可以拉出兩個工作單,其一稱為相機工具(Carmera toolbar),可操作三維之圖像;其二為圖形編輯單(Plot edit toolbar),可以對圖形特徵、註解、指示箭頭等進行編輯。





在MATLAB中,有各種二維及三維之繪圖指令可以應用,以適應不同的需求。其中包括線圖、方塊圖、面積圖、向量圖、極座標圖及散佈圖等,可以參考如下之網頁:

有關各種圖之說明,請按此。。。

MATLAB的圖形介面

MATLAB是利用figure作為圖形顯示介面,可以顯示資料及各類型之圖形。實際上亦可利用figure這一個指令產生所需之圖形環境,利用此環境尚可加添說明及其他資訊。所顯示之圖形可以放大縮小,而且具有下拉式介面。

利用plot指令則可將不同的圖形繪於圖形環境之中。利用plot指令可以顯示表格資料,幾何圖形,物體表面及影像。註釋方面則可增加標題、圖標及顏色標等。圖形可利用二維及三維顯示。即使一維的資料亦可顯示於圖中,而使用資料序號作為橫軸對映繪出。

圖之組成


利用繪圖指令及相關工具可以直接將結果顯示於圖形窗之中,每一圖可以有不同的視窗,最後集成一個圖形組。例如以下面之程式,執行後可以得到二維圖形:

x = [0:.2:20];
y = sin(x)./sqrt(x+1);
y(2,:) = sin(x/2)./sqrt(x+1);
y(3,:) = sin(x/3)./sqrt(x+1);
plot(x,y)






上圖中為執行結果,程式會自動使用不同的線型及顏色分別不同組的資料圖,等到技巧成熟時,也可以透過設定參數的方式更改這些顏色及線型。