2011-03-09 14 views
0

最近、私はanother threadを投稿しました。答えは本当に役に立ちました。 this referenceから、私は2つの交差する円のコードを書こうとしました。円の交点を見つける際の問題

  1. 私は自分のコードに問題があったと思います。その結果、交差点の接続線の中間点が得られます。私は自分のコードに何が問題なのかを知りません。

  2. 私はループを処理するのが難しいと思っています。私は、ベクトルの実際の長さを必要とするが、私はループにそれを書いた場合、i+1のために私がどんな「<」演算子を見つけることができませんと非常に自然である(私にエラーを示している:(()

ここ

は私のコードです -

Xs = [150,130];% x coordinates of center of circles 
Ys = [100,250];% y coordinates of center of circles 
Rs = [100,70];% radius of circles 

C=Imread('spinks_map.png'); 
figure, Imshow(C) 
hold on; 

simple_draw_circle(Xs, Ys, Rs); 


for i=1:length(Xs)-1 
    dsq(i) = ((Xs(i+1)- Xs(i))^2) + ((Ys(i+1) - Ys(i))^2); 
    K(i)= (sqrt((((Rs(i)+Rs(i+1))^2)-dsq(i))-(dsq(i)-(Rs(i)-Rs(i+1))^2)))/4; 
    x(i) = ((Xs(i+1)+Xs(i))/2) + ((Xs(i+1)-Xs(i))*(Rs(i)^2-Rs(i+1)^2)/dsq(i))/2 - 2*(Ys(i+1)-Ys(i))*(K(i)/dsq(i)); 
    y(i) = ((Ys(i+1)+Ys(i))/2) + ((Ys(i+1)-Ys(i))*(Rs(i)^2-Rs(i+1)^2)/dsq(i))/2 +(-2)*(Xs(i+1)-Xs(i))*(K(i)/dsq(i)); 
end 

scatter(x(1),y(1),'filled'); 

答えて

1

あなたはヘロンの公式の使用中にエラーが発生しているあなたはそれが平方根内部の二つの用語の間に製品があるはずK.ための計算を与える掲載のリンクを見てください。 、差異ではありません:

K(i)= (sqrt((((Rs(i)+Rs(i+1))^2)-dsq(i))*(dsq(i)-(Rs(i)-Rs(i+1))^2)))/4; 

また、あなたの2番目の質問に関して。 ":"を含む式を使用するときの操作順序を明示的に宣言すると、私にとってベストプラクティスであることがわかりました。インデックス作成時に予期しない動作を削減することができますいずれか

for i=(1:length(Xs))-1 

または

for i=1:(length(Xs)-1) 

の適切な選択を使用して、Forループ

、。私はあなたの記事からそれを理解したので、これは問題でした。それが何か他のものだったら、Matlabが吐き出すエラーテキストを投稿してみてください。

Matlabに "<"演算子があります。あなたがループのC相当のスタイルでそれを使用しようとしている場合:

for(iter=0;iter++,iter<2){ 
    something(); 
} 

その後、Matlabのwhileループの構文を調べます。

運のベスト、助けるために喜ん

アンドリュー

+0

@zeb。 – Sevenless

関連する問題