Chapter 7: Exercises
Part 1
- Display the nearest point:
請寫一個函數 showNearestPoint.m,可畫出 y=sin(x) 的圖形,其中 x 的範圍是 0 到 4*pi。當滑鼠在圖軸內點選時,你的程式應能顯示最近的資料點,並將此資料點的座標顯示在 MATLAB 命令視窗內。
- 請寫一個函數 showCentroidPoint.m,可畫出一個三角形,及其三條中線(頂點和對邊中點的連線)。當使用者拖放三個頂點時,三角形應隨之變形,並立即顯示三條中線及重心。
- 請寫一個函數 showOrthoCenter.m,重複上題,但將中線改成經由頂點的垂線,重心改成垂心。
- 請寫一個函數 showInnerPoint.m,可畫出一個三角形,及其三條角平分線。當使用者拖放三個頂點時,三角形應隨之變形,並立即顯示三條角平分線及內心,並畫出此三角形的內接圓。
- 請寫一個函數 showCircumCenter.m,重複上題,但將三頂點的角平分線改成三邊的垂直平分線,內心改成外心,內切圓改為外接圓。
- 請寫一個函數showExCenter.m,重複上題,但將三頂點的角平分線改成一個內角及兩個外角的角平分線,內心改成旁心,內切圓改為旁切圓(共有三個)。
- 三角形的垂心、重心和外心共線,此線稱為歐拉線(Euler's Line)。請寫一個函數 showEulerLine.m,可畫出一個三角形,並顯示其垂心、重心和外心,以及相關的歐拉線。當使用者拖放三個頂點時,三角形應隨之變形,並同時更新相關的各個圖形。
- 在一個任意三角形中,三邊中點,三條高的垂足,以及垂心到各頂點線段的三個中點,總共九點,會位於一個圓形上,這就是著名的「九點圓定理」。它首先由歐拉(Euler)在1765年發現,1822年費爾巴哈(Feuerbach)重新討論了這個問題並使之聞名於世。這個圓有時被稱為「歐拉圓」,又有人稱之為「費爾巴哈圓」。請寫一個函數 showEulerCircle.m,可畫出一個三角形,並顯示三條中線、三條高、以及垂心到各頂點線段的三個中點,同時並顯示此「九點圓」。當使用者拖放三個頂點時,三角形應隨之變形,並立即顯示此九點圓及相關圖形。
Part 2
- About findobj:
- What is the function of the command "findobj"?
- What is the dimension of "h" after running the following script:
close all;
plot(rand(3));
h=findobj(0, 'type', 'line')
- About displayName:
Let's display 3 curves and label them using legend:
close all;
h=plot(rand(3));
legend('One', 'Two', 'Three');
What will happen if you issue the following commands?
- set(h(1), 'displayName', 'The first curve');
- set(h(1), 'selected', 'on');
- set(h, 'clipping', 'off'); set(gca, 'xlim', [1.5, 2.5]);
- Properties of axis:
Please run the following script first:
close all;
peaks
h=gca;
After obtaining the handle "h", what is the effect of the following commands?
- set(h, 'gridLineStyle', ':');
- set(h, 'box', 'on');
- set(h, 'projection', 'perspective');
- set(h, 'projection', 'orthographic');
- set(h, 'linewidth', 3);
- set(h, 'color', 'r');
- set(h, 'xgrid', 'off');
- set(h, 'ygrid', 'off');
- set(h, 'zgrid', 'off');
- Properties of surface objects:
Please run the following script first:
close all;
peaks
h=findobj(0, 'type', 'surface');
After obtaining the handle "h", what is the effect of the following commands?
- set(h, 'lineWidth', 2);
- set(h, 'lineStyle', ':');
- set(h, 'edgeColor', 'r');
- set(h, 'edgeAlpha', 0.1);
- set(h, 'faceColor', 'interp');
- set(h, 'faceAlpha', 0.5);
- set(h, 'marker', 'o');
- set(h, 'markerSize', 10);
- set(h, 'markerEdgeColor', 'r');
- set(h, 'markerFaceColor', 'c');
- set(h, 'visible', 'off');
- set(h, 'meshStyle', 'row');
- set(h, 'meshStyle', 'column')
- 修正滑鼠動作之一:
在課本的範例 mouse01.m 中,若我們於圖內部點選並直接釋放(不移動滑鼠),則不會畫一點,這似乎違反我們的直覺。請以最少的修改,使得你在圖內部點選並直接釋放(不移動滑鼠),可以在釋放時產生一個點。(提示:應該只需要加一列程式碼即可完成此工作。)
- 修正滑鼠動作之二:
請修改課本的範例 mouse01.m,使得系統除了產生點之外,並用線段將這些點連起來。
(提示:可以使用 userdata 來記錄前一個點。)
- 修正滑鼠動作之三:
重複上一題,但請加上兩個下拉選單,分別可以讓使用者改變 marker 和 line 的顏色。
- 修正滑鼠動作之四:
請修改課本的範例 mouse01.m,使其產生下列效應:
- 每點選一次左鍵,會產生一個點。
- 每點選一次右鍵,會消去最近產生的一個點。
(但滑鼠移動時不應該產生任何點。)
(提示:可以使用 userdata 來記錄所有的點。)
MATLAB程式設計:入門篇