Find intersection between line and circle

3 次查看(过去 30 天)
Hi I currently work with a small project regarding particle behaviour in closed domains.
I want to create a function which takes start point, and start direction for a point. The domain is a circle. How do I calculate the two intersections with the circle?
I know how to do the calculations but I have trouble with the implementation.
px = -0.5; % start x-coordinate of point
py = -0.5; % start y-coordinate of point
rx = 1; % x-direction of vector with the above startcoordinates
ry = 2; % y ------ || ---------
I tried using symbolic toolbox but I can't convert it back to normal variables.
fsolve won't help because the representation of a circle is not a function. What to do?
Thanks in advance
Regards
  1 个评论
Andrew Newell
Andrew Newell 2011-4-27
Show me what you did using the symbolic toolbox and I'll show you how to convert it back to normal variables.

请先登录,再进行评论。

采纳的回答

Teja Muppirala
Teja Muppirala 2011-4-27
You're pretty close. Except you don't want to solve
'x^2 + y^2 = 0'
You want to solve 'x^2 + y^2 = R^2'
-------------------------------
Try this:
R = sym('R');
x = sym('px + t*rx');
y = sym('py + t*ry');
c = x^2+y^2-R^2;
t_sol = solve(c);
x_sol = subs(x,'t',t_sol)
y_sol = subs(y,'t',t_sol)
Then x_sol gives you the x values, and y_sol has the y values of the solution.
  2 个评论
Andrew Newell
Andrew Newell 2011-4-27
This is how it would look in a function. Note that once you define t as a symbol, combinations involving t are symbols too.
function [xi,yi] = solveIntersection(px,py,rx,ry,r)
syms t
x = px + t*rx;
y = py + t*ry;
c = x^2+y^2-r^2;
t_sol = solve(c);
xi = subs(x,'t',t_sol);
yi = subs(y,'t',t_sol);

请先登录,再进行评论。

更多回答(4 个)

Kasper
Kasper 2011-4-27
I insert the parametrisation in the circle equation. And solve it.
x = sym('px + t*rx'); y = sym('py + t*ry');
c = x^2+y^2; solve(c)
ans =
-(px*rx + py*ry - i*px*ry + i*py*rx)/(rx^2 + ry^2)
-(px*rx + py*ry + i*px*ry - i*py*rx)/(rx^2 + ry^2)
I need this to respond to the numerical values which were assigned to it in the beginning. But I see there's an imaginary part, which I do not want.

Kasper
Kasper 2011-4-27
Thanks but how do I substitute the real values into a 'sym' variable? Since I define all variables as 'sym' the predefined rx = 1,... doesn't really work with those final equations.
  3 个评论
Teja Muppirala
Teja Muppirala 2011-4-27
Oops, I miscopied y_sol, but I think you get the idea.
Christopher Creutzig
Instead of copying the symbolic expression manually, you might want to try using matlabFunction(x_sol(1)) etc. At the very least, it will vectorize better/more correctly.

请先登录,再进行评论。


Kasper
Kasper 2011-4-27
yes that will work the first option. But that won't make it a function if I manually have to input those numbers. But thanks the subs function helped a great deal.

Anupama
Anupama 2020-5-20
find tthe point of intersections of a circle at (1,2) and radius 4 and a straight line 2x+3y =9 using graphical method.

Community Treasure Hunt

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

Start Hunting!

Translated by