特定のパラメーターに対して対数スパイラル アーム上にあるかどうかをテストしたいデータ ポイントのセットがあります。次のプログラムは機能しているように見えますが、すべてのデータ ポイントを含む平面の中心に近いポイントを返しません。添付の画像は、私のプログラムが中心近くの渦巻きと重なる点を見つけていないように見えることを示しています。ここにリンクがあります: http://imgur.com/QbNPg5S . また、重なっている点に 2 つのらせんが表示されているように見えることも問題です。
int main(){
float radial[10000]={0}, angle[10000]={0}; // my points of interest
float theta, r_sp; // radius and the angle theta for the spiral
ソースと同じ平面にあるらせんを構築します (画像の緑色)
for (j=0;j<=PI*10; j++){
theta=j*3./10;
r_sp=a_sp*exp(b_sp*theta);
指定された x 座標と y 座標から半径成分と角度成分を計算する (ファイルから読み取る)
for (m=0;m<=30;m++){
radial[m]=pow((x_comp*x_comp+y_comp*y_comp),0.5);
angle[m]= atan2f(y_comp, x_comp);
範囲を [ -pi, pi] から [0, 2*pi] に変更し、らせんの「シータ」と一致させます
if (angle[m] < 0.){
angle[m]=angle[m]+PI;
}
点 (半径と角度) がらせん上またはらせんの周りにあるかどうかを確認します。リアルな効果を得るために、らせんの「r_sp」値から半径方向距離「dr=0.5」(ジッター) 離れたポイントを検討しています。
if (fabs(r_sp-radial[m]) <=0.5 && fabs(theta-angle[m]) <= 1.0e-2){
printf("%f\t%f\t%f\t%f\n",l[k],b[k],ns[k],radial[m]);
}
}
}
return 0;
}