找到交叉点matlab

时间:2012-01-03 07:54:02

标签: matlab geometry intersect

这是我的代码:

%cirkel
t=linspace(0,2*pi);
r1=2;
x1=r1.*cos(t);
y1=r1.*sin(t);
cirkel=plot(x1,y1);
set(cirkel,'color','g')
axis equal
hold on

%cardeoide
t=linspace(0,2*pi);
r2=2*(cos(t)+1);
x2=r2.*cos(t);
y2=r2.*sin(t);

cardeoide=plot(x2,y2);
set(cardeoide, 'color','r')
hold off

我需要找到这些曲线相交的点。我通过做y1 == y2和x1 == x2来尝试它,但没有得到一个好结果(得到一个充满数字的矩阵)。然后我尝试了交叉(x1,x2)。也不是一个令人愉快的结果。然后我使用了这个code。这给出了非常准确的结果。但我不允许使用此代码(来自学校)。所以我想知道有一个更简单的解决方案吗?

事先提前

2 个答案:

答案 0 :(得分:1)

要获得最准确的结果,不应使用采样点x1,x2,y1,y2。 这些将是两条曲线的近似值,并且交点是采样点之一的概率很低。

相反,设置方程式以找到曲线相交的t并求解它(x1(t)= x2(t)和y1(t)= y2(t))。

PS。当你对MATLAB的工作方式有所了解时,你在做y1 == y2和x1 == x2时得到一个数字矩阵的原因非常明显。

答案 1 :(得分:1)

由于您在曲线上采样点,因此在两条曲线上永远不会找到完全相同的点。

因此。你应该试着找到距离最小的点。

dists=pdist2([x1;y1],[x2;y2]);
[~,t1]=min(min(dists,[],2),[],1);
xInt1=x1(t1);
yInt1=y1(t1);
[~,t2]=min(min(dists,[],1),[],2);
xInt2=x2(t2);
yInt2=y2(t2);