如果一个点位于对数螺线附近:不返回中心附近的点

If a point lies in the vicinity of a logarithmic spiral : Not returning points near the center

我有一组数据点,我想测试它们是否位于给定参数的对数旋臂上。以下程序似乎有效,但没有 return 靠近我的平面中心的任何点,其中包含所有数据点。附图显示我的程序似乎没有找到任何与中心附近的螺旋重叠的点。这是 link : http://imgur.com/QbNPg5S。而且,它似乎在重叠点处显示出两个螺旋,这是另一个问题。

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 坐标(从文件读取)计算径向和 angular 分量

        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]与spiral的"theta"一致

        if (angle[m] < 0.){
        angle[m]=angle[m]+PI;
    }

检查点(径向和角度)是否位于 on/around 螺旋线上。对于真实的效果,我正在考虑距离螺旋的 "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;
}

您只检查位于角度范围 0..2*Pi 内的第一圈螺旋的条件。 首先,您必须根据 r = radial[m]

估计潜在转数
r=a*exp(b*t)
r/a=exp(b*t)
ln(r/a)=b*t
t = ln(r/a) / b
turnnumber = Floor(ln(r/a) / b)

现在您可以使用

angle[m] = YourAngleFromArctan + 2 * Pi * turnnumber

比较