用matlab求交点
这是我的代码:用matlab求交点,matlab,geometry,intersect,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(cardeoid
%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来尝试它,但没有得到好的结果(得到了一个充满数字的矩阵)。然后我尝试了intersect(x1,x2)。也不是一个令人愉快的结果。然后我求助于这个。这给出了一个相当准确的结果。但是我不被允许使用这个代码(从学校)。所以我想知道有没有更简单的解决办法
thx提前为了获得最准确的结果,不应使用采样点x1、x2、y1、y2。 这将是两条曲线的近似值,并且交点是采样点之一的概率很低 相反,建立方程以找到曲线相交的
t
,并求解它(x1(t)=x2(t)和y1(t)=y2(t))
注:当你掌握了MATLAB的工作原理后,当你做y1==y2和x1==x2时,你得到一个充满数字的矩阵的原因是非常明显的。因为你在曲线上采样点,你永远不会在两条曲线上找到完全相同的点 所以。你应该设法找到距离最小的点
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);
你试过这个吗?因为我得到了这个错误:???使用==>min min与两个矩阵进行比较时出错,不支持两个输出参数。好的,部分原因是x1和y1的技巧似乎是正确的(0,2),但如图中所示,第二个明显为负的y是4,而不是-2。(我还认为x和y是切换的,因为x值都应该在0左右,而不是2和4)