Asked by Locks
on 17 Nov 2014

Hi,

I am looking for a way to add a circle at both Ends of a line, as done manually in the Picture shown in the Appendix.

In Addition, I would also like to add such a circle in the middle of the line (at x=9) for both the cruve and the staigth line, in order to Show the convexity and therefore the value of the Point on the line being larger than the one on the curve

Answer by Siam
on 17 Nov 2014

Accepted Answer

x = [1 17];

y= [19.99 18.57];

line(x,y,'Color','r','LineWidth',4)

radius = 1;

centerX = 1;

centerY = 19.99;

rectangle('Position',[centerX - radius, centerY - radius, radius*2, radius*2],...

'Curvature',[1,1],...

'FaceColor','r');

axis square;

centerX = (1+17)/2;

centerY = (19.9+18.57)/2;

rectangle('Position',[centerX - radius, centerY - radius, radius*2, radius*2],...

'Curvature',[1,1],...

'FaceColor','r');

axis square;

radius = 1;

centerX = 17;

centerY = 18.57;

rectangle('Position',[centerX - radius, centerY - radius, radius*2, radius*2],...

'Curvature',[1,1],...

'FaceColor','r');

axis square;

Answer by David Young
on 17 Nov 2014

Here is some test data, to make a plot that looks a bit like yours:

x = 2:0.1:18;

y1 = 20 - 0.05 * x;

y2 = y1 - 0.2 * sin((x-2)*pi/16);

and this draws the line graph, with the colour specified:

plot(x, y1, 'k-', x, y2, 'b-');

Now we need the index of the arrays that corresponds to x=9. Here is one way - it finds the index for the nearest point to x=9. A different approach may be needed for your data, depending on how it is represented:

[~, index9] = min(abs(x-9));

We want circles at the start point, end point and x=9 points, so we can make an array of these indexes:

indexCircle = [1 index9 length(x)];

Finally, we can use plot to draw the circles where they are needed, with the appropriate colours. Note that three circles are drawn for each graph, but of course at the ends the pairs of circles are superimposed. We need to switch hold on to keep the old graph:

hold on;

plot(x(indexCircle), y1(indexCircle), 'ko', x(indexCircle), y2(indexCircle), 'bo');

hold off;

David Young
on 17 Nov 2014

Yes, you can still use the plot function to put in the circles.

For the circle on the line you'll need to compute the correct value of y rather than indexing into an array, but that should be easy.

In general it is preferable to use the higher-level plot function rather than the lower-level line function, but in this case it makes little difference.

Locks
on 17 Nov 2014

David Young
on 17 Nov 2014

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.