float ACO(Element x[SIZE][SIZE],int n,int k[2*SIZE],int m) { int i,j,c,q1,q2; if(m==0) { q1 = 38 ; q2 = 33 ; } else { q1 = 70 ; q2 = 65 ; } for(i=0;i<n;i++) { x[i][n+1].flag=0; for(j=0;j<n;j++) { if(i==j) x[i][j].flag=1; else x[i][j].flag=0; } } float sum=0; int dest,p=0; int source = GetRand(0,n-1); int f = source ; /* printf("\n %d \n",source) ; */ for(c=0;c<n;c++) { if(c==(n-1)) dest=f; else dest = pseudorand(x,source,n,f,q1,q2); if(dest==n+1) return 0; x[source][n+1].flag++; x[dest][n+1].flag++; x[source][dest].flag++; x[dest][source].flag++; sum+=x[source][dest].e; k[p]=source; /* printf(" %d,%d ",source,dest); */ k[++p]=dest; p++; source = dest ; } return sum; }
float ACOr(Element x[SIZE][SIZE],int n,int k[2*SIZE],int a[2]) { int i,j,c; for(i=0;i<n;i++) { x[i][n+1].flag=0; for(j=0;j<n;j++) { if(i==j) x[i][j].flag=1; else x[i][j].flag=0; } } float sum1=0; int dest,g; int p=0; int z = 0; int source = a[z]; int f = source ; x[f][n+1].flag = 1 ; g = a[1] ; /* printf("\n %d \n",source) ; */ for(c=0;c<(n-1);c++) { if(c==(n-2)) dest=g; else dest = pseudorand(x,source,n,g,36,32); if(dest==n+1) { /* printf("error"); */ return 0; } x[source][n+1].flag++; x[dest][n+1].flag++; x[source][dest].flag++; x[dest][source].flag++; sum1+=x[source][dest].e; k[p]=source; /* printf(" %d,%d ",source,dest); */ k[++p]=dest; p++; source = dest ; } /* printf(" %d ",sum1); */ return sum1; }
void CameraOrtho::calcCamRay(const int x, const int y, Ray &ray) const { // Tent filter for each ray's xy directions float r1 = 2.0f * pseudorand(), dx = r1 < 1.0f ? std::sqrt(r1) - 1.0f : 1.0f - std::sqrt(2.0f - r1); float r2 = 2.0f * pseudorand(), dy = r2 < 1.0f ? std::sqrt(r2) - 1.0f : 1.0f - std::sqrt(2.0f - r2); // Construct the ray's origin vector vec3 e = m_transform.getPosition(); vec3 s = e + vec3(m_film.getResolutionX() * 0.5f - x + dx + 0.5f, m_film.getResolutionY() * 0.5f - y + dy + 0.5f, 5.0f) * m_zoom; // Get the ray's direction vector vec3 p = m_transform.getOrientation().getForwardVector(); // Rotate the ray origin based on camera orientation quaternion q = m_transform.getOrientation(); quaternion q_inv = q.conjugate(); quaternion w(0.0f, s.x, s.y, s.z); quaternion r = q * w * q_inv; // Assign final parameters to the output &ray ray.setOrigin(vec3(r.x, r.y, r.z)); ray.setDirection(p); }