Chapter 7: Exercises

Part 1

  1. Display the nearest point: 請寫一個函數 showNearestPoint.m,可畫出 y=sin(x) 的圖形,其中 x 的範圍是 0 到 4*pi。當滑鼠在圖軸內點選時,你的程式應能顯示最近的資料點,並將此資料點的座標顯示在 MATLAB 命令視窗內。
  2. 請寫一個函數 showCentroidPoint.m,可畫出一個三角形,及其三條中線(頂點和對邊中點的連線)。當使用者拖放三個頂點時,三角形應隨之變形,並立即顯示三條中線及重心。
  3. 請寫一個函數 showOrthoCenter.m,重複上題,但將中線改成經由頂點的垂線,重心改成垂心。
  4. 請寫一個函數 showInnerPoint.m,可畫出一個三角形,及其三條角平分線。當使用者拖放三個頂點時,三角形應隨之變形,並立即顯示三條角平分線及內心,並畫出此三角形的內接圓。
  5. 請寫一個函數 showCircumCenter.m,重複上題,但將三頂點的角平分線改成三邊的垂直平分線,內心改成外心,內切圓改為外接圓。
  6. 請寫一個函數showExCenter.m,重複上題,但將三頂點的角平分線改成一個內角及兩個外角的角平分線,內心改成旁心,內切圓改為旁切圓(共有三個)。
  7. 三角形的垂心、重心和外心共線,此線稱為歐拉線(Euler's Line)。請寫一個函數 showEulerLine.m,可畫出一個三角形,並顯示其垂心、重心和外心,以及相關的歐拉線。當使用者拖放三個頂點時,三角形應隨之變形,並同時更新相關的各個圖形。
  8. 在一個任意三角形中,三邊中點,三條高的垂足,以及垂心到各頂點線段的三個中點,總共九點,會位於一個圓形上,這就是著名的「九點圓定理」。它首先由歐拉(Euler)在1765年發現,1822年費爾巴哈(Feuerbach)重新討論了這個問題並使之聞名於世。這個圓有時被稱為「歐拉圓」,又有人稱之為「費爾巴哈圓」。請寫一個函數 showEulerCircle.m,可畫出一個三角形,並顯示三條中線、三條高、以及垂心到各頂點線段的三個中點,同時並顯示此「九點圓」。當使用者拖放三個頂點時,三角形應隨之變形,並立即顯示此九點圓及相關圖形。

Part 2

  1. About findobj:
    1. What is the function of the command "findobj"?
    2. What is the dimension of "h" after running the following script:
    close all; plot(rand(3)); h=findobj(0, 'type', 'line')
  2. 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?
    1. set(h(1), 'displayName', 'The first curve');
    2. set(h(1), 'selected', 'on');
    3. set(h, 'clipping', 'off'); set(gca, 'xlim', [1.5, 2.5]);
  3. 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?
    1. set(h, 'gridLineStyle', ':');
    2. set(h, 'box', 'on');
    3. set(h, 'projection', 'perspective');
    4. set(h, 'projection', 'orthographic');
    5. set(h, 'linewidth', 3);
    6. set(h, 'color', 'r');
    7. set(h, 'xgrid', 'off');
    8. set(h, 'ygrid', 'off');
    9. set(h, 'zgrid', 'off');
  4. 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?
    1. set(h, 'lineWidth', 2);
    2. set(h, 'lineStyle', ':');
    3. set(h, 'edgeColor', 'r');
    4. set(h, 'edgeAlpha', 0.1);
    5. set(h, 'faceColor', 'interp');
    6. set(h, 'faceAlpha', 0.5);
    7. set(h, 'marker', 'o');
    8. set(h, 'markerSize', 10);
    9. set(h, 'markerEdgeColor', 'r');
    10. set(h, 'markerFaceColor', 'c');
    11. set(h, 'visible', 'off');
    12. set(h, 'meshStyle', 'row');
    13. set(h, 'meshStyle', 'column')
  5. 修正滑鼠動作之一: 在課本的範例 mouse01.m 中,若我們於圖內部點選並直接釋放(不移動滑鼠),則不會畫一點,這似乎違反我們的直覺。請以最少的修改,使得你在圖內部點選並直接釋放(不移動滑鼠),可以在釋放時產生一個點。(提示:應該只需要加一列程式碼即可完成此工作。)
  6. 修正滑鼠動作之二: 請修改課本的範例 mouse01.m,使得系統除了產生點之外,並用線段將這些點連起來。 (提示:可以使用 userdata 來記錄前一個點。)
  7. 修正滑鼠動作之三: 重複上一題,但請加上兩個下拉選單,分別可以讓使用者改變 marker 和 line 的顏色。
  8. 修正滑鼠動作之四: 請修改課本的範例 mouse01.m,使其產生下列效應:
    1. 每點選一次左鍵,會產生一個點。
    2. 每點選一次右鍵,會消去最近產生的一個點。
    (但滑鼠移動時不應該產生任何點。) (提示:可以使用 userdata 來記錄所有的點。)

MATLAB程式設計:入門篇