Intersection between line and circle when line ends inside circle (using geom2d)
古いコメントを表示
I have a circle and a line drawn like so...

Using the createLine function in the geom2d collection, the line is treated like this (i.e. continuous)...

Therefore, when finding the intersection points between the line and the circle, two points are returned instead of one.
How can I solve this problem of showing an extra incorrect point, and is there a workaround you could suggest, either using geom2d or otherwise?
Many thanks.
8 件のコメント
darova
2019 年 11 月 20 日
John D
2019 年 11 月 20 日
darova
2019 年 11 月 20 日
Yes it will
John D
2019 年 11 月 21 日
darova
2019 年 11 月 21 日
Provide experimental data
John D
2019 年 11 月 21 日
% Position of line:
x1 = [0.1947
0.5173];
y1 = [0.4388
0.5933];
% Center point of circle:
x0 = 0.4850;
y0 = 0.6239;
% Radius of circle:
r = 0.2035;
t = linspace(0,2*pi,30);
x2 = r*cos(t) + x0;
y2 = r*sin(t) + y0;
[xc,yc] = polyxpoly(x1,y1,x2,y2)
Adam Danz
2019 年 11 月 21 日
To demonstrate both methods,
% Define circle
ang=0:0.1:2*pi;
xyr = [5 2 4]; %(xCenter,yCenter,radius)
xp=xyr(:,3)*cos(ang) + repmat(xyr(:,1),1,numel(ang)); %changed 190901 to work with r2016a
yp=xyr(:,3)*sin(ang) + repmat(xyr(:,2),1,numel(ang));
% Define line endpoints
xln = [1 6];
yln = [-1 1];
% plot it
clf()
plot(xp,yp,'k-') %circle
axis equal; grid on; hold on
plot(xln,yln,'b-') %line
% Method 1 uses this FEX:
% https://www.mathworks.com/matlabcentral/fileexchange/11837-fast-and-robust-curve-intersections
[x0,y0] = intersections(xp,yp,xln,yln);
plot(x0,y0,'r*','MarkerSize',9,'LineWidth',2) %intersection point(s)
% Method 2
[xi,yi] = polyxpoly(xp,yp,xln,yln);
plot(xi,yi,'gh','MarkerSize',15,'LineWidth',2) %intersection point(s)

Someone should copy their comment to the answers section so it can be accepted.
採用された回答
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Geographic Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!