24小时热门版块排行榜    

查看: 667  |  回复: 0

yali1990

金虫 (小有名气)

[求助] 自规避行走链

#include "stdafx.h"
#include "math.h"
#include"stdlib.h"//调用rand()及srand()函数
#include "time.h"
#define PI 3.1415926
void mass_center_Rg2()
{
        double X[10000][3];//链段坐标
        double MC_X[3];//质心坐标
        int l=500;//链条数
        int N;//聚合度
        srand((unsigned)time(NULL));
        double a,b,d;
        double r=2.0;
        double Sum_Rg2;
        double Rg2;
        double  X_Dis;
        double  Y_Dis;
        double  Z_Dis;
        FILE *write;
    write = fopen("Rg2_compute-1.txt","w";
        for(N=1000;N<=2000;N+=20)
{
                Sum_Rg2=0.0;
                for(int j=1;j         {
                        d=0.0;
                        X[0][0]=0.0;
                        X[0][1]=0.0;
                        X[0][2]=0.0;
                        MC_X[0] = 0.0;
                        MC_X[1] = 0.0;
                        MC_X[2] = 0.0;
                        for(int i=0;i                 {
                                d=((float)rand())/RAND_MAX;
                                a=d*PI;
                                b=d*PI*2.0;
                                X[i+1][0]=X[0]+r*sin(a)*cos(b);//链单元的坐标
                                X[i+1][1]=X[1]+r*sin(a)*sin(b);//链单元的坐标
                                X[i+1][2]=X[2]+r*cos(a);//链单元的坐标                                                                 
                         if((i+1)>=2)                                                                                                                                                               
         {
                                    for(int counter=i-1;counter>=0;counter--)  
                            {
                                           double r0,x0,y0,z0;  
                                   x0=X[i+1][0]-X[counter][0];
                                   y0=X[i+1][1]-X[counter][1];
                                   z0=X[i+1][2]-X[counter][2];
                                   r0=pow(x0,2)+pow(y0,2)+pow(z0,2);
                                   if(r0>=4.0)
                                    {                                             
                                       d=((float)rand())/RAND_MAX;
                                           a=d*PI;
                                           b=d*PI*2.0;
                                           X[i+1][0]=X[0]+r*sin(a)*cos(b);//链单元的坐标
                                           X[i+1][1]=X[1]+r*sin(a)*sin(b);//链单元的坐标
                                           X[i+1][2]=X[2]+r*cos(a);//链单元的坐标
                                                                                                           
                                }
                                       else continue;
                                 }      
                        }
            }
                        for(int i=1;i<=N;i++){
                                MC_X[0]=MC_X[0]+ X[0];
                                MC_X[1]=MC_X[1]+ X[1];
                                MC_X[2]=MC_X[2]+ X[2];
                          }
                       
                            MC_X[0]=MC_X[0]/N;
                            MC_X[1]=MC_X[1]/N;
                            MC_X[2]=MC_X[2]/N;
                               //printf("%f, %f ,%f\n",MC_X[0],MC_X[1],MC_X[2]);
                       
                        Rg2=0.0;
                       
                        for(int i=1;i<=N;i++){   
                                X_Dis=X[0]-MC_X[0];
                                Y_Dis=X[1]-MC_X[1];
                                Z_Dis=X[2]-MC_X[2];
                                Rg2+=pow(X_Dis,2)+pow(Y_Dis,2)+pow(Z_Dis,2);
                        }
                       
                        Rg2= Rg2/N;
                        Sum_Rg2+=Rg2;
                }
               
                Sum_Rg2=Sum_Rg2/l; //平均,求出均方半径  
                fprintf(write,"输出N=%d,Sum_Rg2=%f\n",N,Sum_Rg2);
                printf("N= %d \n", N);
        }
        fclose(write);
}



int _tmain(int argc, _TCHAR* argv[])
{
                  mass_center_Rg2();//调用函数求出链的质心和Rg

            getchar();
            return 0;
}

    这个是我编的代码,目的是每产生一个坐标,都判断它是否与前面的坐标重合,如果重合,则重新产生一个新的坐标。接下来是算质心坐标,进而计算均方回转半径。
   目前我的问题是:这个和我之前计算无规行走链,得到的均方回转半径值基本一致,我要怎么改变坐标的判断条件?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 yali1990 的主题更新
信息提示
请填处理意见