# How to return the intersection point of a line and a circle-arc ?

11 views (last 30 days)

Show older comments

##### 6 Comments

Adam
on 11 May 2015

That function has an output argument which represents the arc object. Try something more like

hArc = drawCircleArc(...);

Then query

hArc.XData

hArc.YData

and they should have a lot more points to work with.

The equation of the line is trivial so even a for loop of the arc's XData testing the YData against the y-value of the line for the given x-value should give you the point on the arc which is closes to the line.

Then it is up to you what level of accuracy you want to home in from there to the true intersection value.

### Answers (1)

John D'Errico
on 11 May 2015

Edited: John D'Errico
on 11 May 2015

Simplest is to turn them into a pair of polygons, then use Doug Schwarz's intersections tool from the file exchange. Just generate sufficiently many points on the circular arc, and it will be accurate.

If you want an exact or symbolic solution, then this too is doable. Not even that difficult. Simply formulate the equations of a circle and a line, then use solve.

syms x y t x1 x2 y1 y2 x0 y0 r theta

linex = (1-t)*x1 + t*x2;

liney = (1-t)*y1 + t*y2;

circlex = r*cos(theta) + x0;

circley = r*sin(theta) + y0;

[t,theta] = solve(linex == circlex,liney == circley,{t,theta});

Substitute in the values of {x0,y0,r,x1,x2,y1,y2}. If t is between 0 and 1, and theta is in the appropriate interval, then you have an intersection.

Or you could do it using fsolve, or pencil and paper.

##### 3 Comments

John D'Errico
on 11 May 2015

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!