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を実行して試しましたが、良い結果は得られませんでした(数値でいっぱいの行列を取得しました)。次に、intersect(x1、x2)を試しました。また、満足のいく結果ではありません。それから私はこのコードに頼りました。これにより、かなり正確な結果が得られます。しかし、私はこのコードを使用することを許可されていません(学校から)。だから私はもっと簡単な解決策があるのだろうかと思っていましたか?

事前にt​​hx

4

2 に答える 2

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 に答える
1

最も正確な結果を得るには、サンプリングしたポイントx1、x2、y1、y2を使用しないでください。これらは2つの曲線の近似値であり、交点がサンプリングされたポイントの1つである可能性は低くなります。

代わりにt、曲線が交差する場所を見つけてそれを解くための方程式を設定します(x1(t)= x2(t)およびy1(t)= y2(t))。

PS。y1==y2およびx1==x2を実行するときに数値でいっぱいの行列が得られる理由は、MATLABがどのように動作するかを理解すると非常に明白です。

于 2012-01-03T08:26:06.327 に答える