15.11.2014 Views

Chapter 4: Programming in Matlab - College of the Redwoods

Chapter 4: Programming in Matlab - College of the Redwoods

Chapter 4: Programming in Matlab - College of the Redwoods

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

424 <strong>Chapter</strong> 4 <strong>Programm<strong>in</strong>g</strong> <strong>in</strong> <strong>Matlab</strong><br />

iii. Set both ‘XGrid’ and ‘YGrid’ properties to ‘on’.<br />

iv. Set <strong>the</strong> ‘ButtonDownFcn’ property <strong>of</strong> <strong>the</strong> axes object to <strong>the</strong> callback function<br />

handle @cursorUpdateText_Callback.<br />

Create a panel as a child <strong>of</strong> <strong>the</strong> figure object with <strong>Matlab</strong>’s uipanel command.<br />

Inside <strong>the</strong> panel, create a static text uicontrol as a child <strong>of</strong> <strong>the</strong> panel. Set <strong>the</strong><br />

‘Str<strong>in</strong>g’ property <strong>of</strong> this control to ‘(0,0)’ to start with. Write <strong>the</strong> callback function<br />

cursorUpdateText_Callback that gets <strong>the</strong> ‘CurrentPo<strong>in</strong>t’ <strong>of</strong> a mouse click <strong>in</strong><br />

<strong>the</strong> axes object and stores it <strong>in</strong> <strong>the</strong> variable x. Concatenate <strong>the</strong> follow<strong>in</strong>g str<strong>in</strong>g.<br />

textStr=[’(’,num2str(x(1,1)),’,’,num2str(x(1,2)),’)’];<br />

Assign textStr as <strong>the</strong> value <strong>of</strong> <strong>the</strong> ‘Str<strong>in</strong>g’ property <strong>of</strong> <strong>the</strong> static text uicontrol.<br />

Thus, click<strong>in</strong>g <strong>the</strong> mouse <strong>in</strong> <strong>the</strong> axes should update <strong>the</strong> text object with <strong>the</strong><br />

coord<strong>in</strong>ates <strong>of</strong> <strong>the</strong> mouse cursor <strong>in</strong> <strong>the</strong> axes object.<br />

5. Write a <strong>Matlab</strong> GUI that conta<strong>in</strong>s one axes object. Set each <strong>of</strong> <strong>the</strong> follow<strong>in</strong>g<br />

properties <strong>of</strong> <strong>the</strong> axes object to <strong>the</strong> <strong>in</strong>dicated value.<br />

i. Set both ‘XLim’ and ‘YLim’ properties to [−10, 10].<br />

ii. Set both ‘XTick’ and ‘YTick’ properties to -10:2:10.<br />

iii. Set both ‘XGrid’ and ‘YGrid’ properties to ‘on’.<br />

iv. Set <strong>the</strong> ‘ButtonDownFcn’ property <strong>of</strong> <strong>the</strong> axes object to <strong>the</strong> callback function<br />

handle @updateL<strong>in</strong>e_Callback.<br />

Initialize a l<strong>in</strong>e object with <strong>the</strong> command hL<strong>in</strong>e=l<strong>in</strong>e(0,0). Write a callback<br />

function updateL<strong>in</strong>e_Callback that gets <strong>the</strong> ‘CurrentPo<strong>in</strong>t’ <strong>of</strong> <strong>the</strong> mouse click<br />

<strong>in</strong> <strong>the</strong> axes object. Append <strong>the</strong> x- and y-coord<strong>in</strong>ates <strong>of</strong> this new po<strong>in</strong>t to <strong>the</strong> value<br />

<strong>of</strong> <strong>the</strong> ‘XData’ and ‘YData’ properties <strong>of</strong> <strong>the</strong> l<strong>in</strong>e object hav<strong>in</strong>g handle hL<strong>in</strong>e.<br />

For example, to update <strong>the</strong> x-data, you will need <strong>the</strong>se l<strong>in</strong>es <strong>in</strong> <strong>the</strong> body <strong>of</strong> <strong>the</strong><br />

callback.<br />

newPo<strong>in</strong>t=get(hObject,’CurrentPo<strong>in</strong>t’);<br />

x=get(hL<strong>in</strong>e,’XData’);<br />

set(hL<strong>in</strong>e,’XData’,[x,newPo<strong>in</strong>t(1,1)])<br />

Similar code is required to update <strong>the</strong> ‘YData’. Thus, each time you click your<br />

mouse <strong>in</strong> <strong>the</strong> axes, a new l<strong>in</strong>e segmented is added, connect<strong>in</strong>g <strong>the</strong> last po<strong>in</strong>t plotted<br />

to <strong>the</strong> current po<strong>in</strong>t clicked with <strong>the</strong> mouse.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!