这是我的代码:
%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。这给出了非常准确的结果。但我不允许使用此代码(来自学校)。所以我想知道有一个更简单的解决方案吗?
事先提前答案 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);