0

这是我的代码:

%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)。也不是一个令人满意的结果。然后我求助于这段代码。这给出了一个相当准确的结果。但我不允许使用此代码(来自学校)。所以我想知道有没有更简单的解决方案?

提前谢谢

4

2 回答 2

1

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

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

PS。当您了解 MATLAB 的处理方式时,您在执行 y1 == y2 和 x1==x2 时得到一个充满数字的矩阵的原因非常明显。

于 2012-01-03T08:26:06.327 回答
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);
于 2012-01-03T09:48:35.297 回答