2012-01-03 18 views
0

のポイントを探すこれは私のコードです:交差点MathWorks社のMATLAB

%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に頼った。これによりかなり正確な結果が得られます。しかし、私はこのコードを学校から利用することは許されていません。だから私は、より単純なソリューションがあるのだろうか?あなたのサンプリングポイントX1、X2、Y1、Y2を使用してはならない最も正確な結果を得るために、事前

答えて

1

THX。 これらは2つの曲線の近似値であり、交差点がサンプリングされた点の1つである確率は低くなります。

代わりに、曲線が交差してそれを解く方程式を設定してください(x1(t)= x2(t)、y1(t)= y2(t))。

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

1

カーブ上のポイントをサンプリングするので、両方のカーブで正確に同じポイントを見つけることはありません。

So.最小距離の点を見つけようとするべきです。

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); 
+0

これを試しましたか?私はこのエラーが発生するため、??? ==> min MINを使用してエラーを比較する2つの行列と 2つの出力引数はサポートされていません。 – Ojtwist

+0

実際、小さな間違いがありました。私はそれを更新しました。 – Oli

+0

[OK]を部分的にトリックx1とy1右(0,2)ようだが、プロットで見ることができますように、明確な負のyは-2の代わりに4を持っています。 (私はまた、xとyは両方ともx値が0と2と4でなくてはならないので、xとyが切り替わると思います) – Ojtwist