⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一个布局程序原码.txt

📁 一个布局程序的源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include<stdlib.h>

#include"stdio.h"

#include<time.h>

#include<conio.h>

#include"math.h"  



//在区间[c,d]上产生一个等概率分布随机整数

int evenls1(int c,int d)

{

	int k,l,m,bb;

    k=d-c+1;

    l=2;

    while(l<k)

		l=l+1;

    m=4*l;

    k=rand();

    k=k+k+k+k+k;

    k=k%m;

    l=k/4+c;

    if(l<=d)

		bb=l;

	return bb;

}





//************产生[a,b]上一个均匀分布随机浮点数********************

double evenxl1(double a, double b)

{

    int m;

    double s, u, v, r, jy;

    s=65536.0;

    u=2053.0;

    v=13849.0;

    r=rand();

	r=u*r+v;

    m=(int)(r/s);

    r=r-m*s;

    jy=(r/s)*(b-a)+a;

	return(jy);

}





void evenxl(double a,double b,double * r,double p[],int n)

{

	//产生均匀分布随机浮点数

    int i,m;

    double s, u, v;

    s=65536.0;

    u=2053.0;

    v=13849.0;

    for(i=0;i<n;i++)

	{

		*r=u*(*r)+v;

        m=(int)(*r/s);

        *r=*r-m*s;

        p[i]=(*r/s)*(b-a)+a;

	}

    return;

}



double zts(double*r)  //double u, double g,double *r)

{

	double mm[2];

    double t,w;

    w=rand();

    evenxl(0.0,1.0,&w,mm,2);

//printf("%f     %f\n",mm[0],mm[1]);

    t=sqrt(-2*log(mm[1]))*sin(2*3.14*mm[0]);

    return(t);

}



//*************产生均值为u,方差为deta的服从正态分布的随机数****************

double ztRand(double u,double deta)

{

	double u1,u2,z,zt;

	u1=evenxl1(.0,1.0);

	u2=evenxl1(.0,1.0);

	z=sqrt(-2*log(u1))*sin(8*atan(1)*u2);

	zt=u+deta*z;

	return(zt);

}





void evenls(int c,int d,int *r,int bb[],int n)

{

	//产生等概率分布随机整数

    int k,l,m,i;

    k=d-c+1;

    l=2;

    while(l<k)l=l+1;



    m=4*l;k=*r;i=0;

    while(i<=n-1)

	{

		k=k+k+k+k+k;

        k=k%m;

        l=k/4+c;

        if(l<=d)

		{

			bb[i]=l;

	        i=i+1;

		}

	}

	*r=k;

    return ;

}







double max(double a,double b)

{	double max;

	if(a>b)

           max=a;

	else max=b;

	return max;

}

//比较所有行的指定列,按他们的升序排列这些行

void paixu(double p[100][20],int n,int m)

{ 

	double temp;

    int i,j,t;

    for(i=0;i<n;i++)

		for(j=i+1;j<n;j++)

		{

			if(p[i][m]>p[j][m])

				for(t=0;t<=m;t++)

				{

					temp=p[i][t];

                    p[i][t]=p[j][t];

                    p[j][t]=temp;

				}

		}

}



double stabl(double *a,double *b,int N)//a传入形心横,纵及方向角;b为质量

{

	int i;

    double xh,xz,st;

    double *x=new double[2*N];

    xh=0.0;

    xz=0.0;

    for(i=0;i<N;i++)

	{

		xh+=b[i]*a[3*i];//xh+=b[i]*a[3*i]*cos(a[3*i+1]);

        xz+=b[i]*a[3*i+1];//xz+=b[i]*a[3*i]*sin(a[3*i+1]);

	}

    st=sqrt(xh*xh+xz*xz)/1000;//

    return(st);

    delete []x;

}

//计算外包络

double waibl(double *c,double *d,int N)//c传入形心横,纵及方向角;d传入半长,半宽

{

	int i,k;

    double max,wai,x,y,nn,vv;//,mm,uu

    max=0.0;

    for(i=0;i<N;i++)

	{	

		//mm=cos(c[3*i+1]);

		//uu=sin(c[3*i+1]);

	    nn=cos(c[3*i+2]);

	    vv=sin(c[3*i+2]);

	    for(k=1;k<5;k++)

		{

			if(k==1)

			{

				x=c[3*i]-d[2*i]*nn+d[2*i+1]*vv;//x=c[3*i]*mm-d[2*i]*nn+d[2*i+1]*vv;

		        y=c[3*i+1]-d[2*i]*vv-d[2*i+1]*nn;//y=c[3*i]*uu-d[2*i]*vv-d[2*i+1]*nn;(下同)

			}

			else if(k==2)

			{

				x=c[3*i]+d[2*i]*nn+d[2*i+1]*vv;

		        y=c[3*i+1]+d[2*i]*vv-d[2*i+1]*nn;

			}

	        else if(k==3)

			{x=c[3*i]+d[2*i]*nn-d[2*i+1]*vv;

		     y=c[3*i+1]+d[2*i]*vv+d[2*i+1]*nn;

			}

	        else

			{

				x=c[3*i]-d[2*i]*nn-d[2*i+1]*vv;

		        y=c[3*i+1]-d[2*i]*vv+d[2*i+1]*nn;		

			}

	        wai=sqrt(x*x+y*y);

	        if(wai>max)max=wai;

		}

	

	} 

    return(max);

}



#include"stdio.h"

#include "math.h"

//计算干涉量

//A subfunction to judge whether two arbitrary tectangular graph elements overla

double interfer(double *f,double *aa,int N)//(double f[][6],int i,int j)

{   //Definition of viarables

	int light,k,l,h,flag=0,num;

    int rr,ss,i,j;

	double v[20][2],n[20][8];//,D[20][20],U[20][20],L[20][20];

	double m[20][2],inpn[4][4],xp[20][6],pp[20][8],L,D,U,*zp[20],*temp;//pp[20][8]为顶点

	const double alpha=0.001;

	//Initialization of viarables

	

	for(rr=0;rr<N;rr++)

		for(ss=0;ss<6;ss++)

		{

			if(ss==0)

				xp[rr][ss]=f[3*rr];//横坐标

			else if(ss==1)

				xp[rr][ss]=f[3*rr+1];//纵坐标

			else if(ss==2)

				xp[rr][ss]=aa[2*rr];

			else if(ss==3)

				xp[rr][ss]=aa[2*rr+1];

			else if(ss==4)

				xp[rr][ss]=cos(f[3*rr+2]);

			else if(ss==5)

        		xp[rr][ss]=sin(f[3*rr+2]);

		}

			

	for(i=1;i<=N;i++)

	   for(j=i+1;j<=N;j++)

	   {	light=0;

			U=sqrt(xp[i-1][2]*xp[i-1][2]+xp[i-1][3]*xp[i-1][3])+sqrt(xp[j-1][2]*xp[j-1][2]+xp[j-1][3]*xp[j-1][3]);

			L=xp[i-1][3]+xp[j-1][3];

			D=sqrt((xp[i-1][0]-xp[j-1][0])*(xp[i-1][0]-xp[j-1][0])+(xp[i-1][1]-xp[j-1][1])*(xp[i-1][1]-xp[j-1][1]));

			if(D>=U) 

				goto end;  

			if(D<L) 

			{	

				flag+=10;

				goto end;

			}

			else

			{

				v[i-1][0]=-xp[i-1][5];//计算vi,vj使得<vi,ui>=0,<vj,uj>=0,并且 vi和vj 的范数等于1.

				v[i-1][1]= xp[i-1][4];

				v[j-1][0]=-xp[j-1][5];

				v[j-1][1]= xp[j-1][4];

			

				 m[i-1][0]=xp[i-1][2]*xp[i-1][4];//计算图元Fi的顶点

				 m[i-1][1]=xp[i-1][3]*v[i-1][0];

				 m[i-1][2]=xp[i-1][2]*xp[i-1][5];

				 m[i-1][3]=xp[i-1][3]*v[i-1][1];

		

		 

				 pp[i-1][0]=xp[i-1][0]-m[i-1][0]-m[i-1][1];

				 pp[i-1][1]=xp[i-1][1]-m[i-1][2]-m[i-1][3];

				 n[i-1][0]=-v[i-1][0];

				 n[i-1][1]=-v[i-1][1];

				 pp[i-1][2]=xp[i-1][0]+m[i-1][0]-m[i-1][1];

				 pp[i-1][3]=xp[i-1][1]+m[i-1][2]-m[i-1][3];

				 n[i-1][2]=xp[i-1][4];

				 n[i-1][3]=xp[i-1][5];

				 pp[i-1][4]=xp[i-1][0]+m[i-1][0]+m[i-1][1];

				 pp[i-1][5]=xp[i-1][1]+m[i-1][2]+m[i-1][3];

				 n[i-1][4]=v[i-1][0];

				 n[i-1][5]=v[i-1][1];

				 pp[i-1][6]=xp[i-1][0]-m[i-1][0]+m[i-1][1];

				 pp[i-1][7]=xp[i-1][1]-m[i-1][2]+m[i-1][3];

				 n[i-1][6]=-xp[i-1][4];

				 n[i-1][7]=-xp[i-1][5];

		 

				

				 //计算图元Fj的顶点

				 m[j-1][0]=xp[j-1][2]*xp[j-1][4];

				 m[j-1][1]=xp[j-1][3]*v[j-1][0];    

				 m[j-1][2]=xp[j-1][2]*xp[j-1][5];

				 m[j-1][3]=xp[j-1][3]*v[j-1][1];

		 

		 

				pp[j-1][0]= xp[j-1][0]-m[j-1][0]-m[j-1][1];

				pp[j-1][1]= xp[j-1][1]-m[j-1][2]-m[j-1][3];

				 

				pp[j-1][2]= xp[j-1][0]+m[j-1][0]-m[j-1][1];

				pp[j-1][3]= xp[j-1][1]+m[j-1][2]-m[j-1][3];

				  

				pp[j-1][4]= xp[j-1][0]+m[j-1][0]+m[j-1][1];

				pp[j-1][5]= xp[j-1][1]+m[j-1][2]+m[j-1][3];

		    

				pp[j-1][6]= xp[j-1][0]-m[j-1][0]+m[j-1][1];

				pp[j-1][7]= xp[j-1][1]-m[j-1][2]+m[j-1][3];

		

	for(h=0;h<N;h++)

    	zp[h]=pp[h];

Label01:		for(k=1;k<=4;k++)	 

					for(l=1;l<=4;l++)

						inpn[k-1][l-1]=(-*(zp[i-1]+2*k-2)+*(zp[j-1]+2*l-2))*n[i-1][2*k-2]+(-*(zp[i-1]+2*k-1)+*(zp[j-1]+2*l-1))*n[i-1][2*k-1];

				

				k=1;

				l=1;



Label00:		if(inpn[k-1][l-1]<0)

				{

					k=k+1;

					if(k<=4)

					{

						l=1;

						goto Label00;

					}

					else

					{

						if(light>0)

						{

							 flag+=10;

							 goto end;

						}

						 

						else

						{  num=0;

						   light++;

						   //swap graph elements i and j

						    temp=zp[i-1];

							zp[i-1]=zp[j-1];

							zp[j-1]=temp;

   

							n[i-1][0]=-v[j-1][0];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -