HydroSDL/oGL_graphics/solid_objects.cpp

Go to the documentation of this file.
00001 
00009 #include "solid_objects.h"
00010 
00011 
00012 
00013 
00014 SolidObject hullStruct; 
00015 SolidObject *hull = &hullStruct;
00016 
00017 SolidObject rSwimmStruct; 
00018 SolidObject *rSwimm = &rSwimmStruct;
00019 
00020 SolidObject lSwimmStruct; 
00021 SolidObject *lSwimm = &lSwimmStruct;
00022 
00023 SolidObject bridgeMainStruct; 
00024 SolidObject *bridgeMain = &bridgeMainStruct;
00025 
00026 SolidObject bridge2Struct; 
00027 SolidObject *bridge2 = &bridge2Struct;
00028 
00029 SolidObject mastStruct; 
00030 SolidObject *mast = &mastStruct;
00031 
00032 SolidObject foilRightStruct; 
00033 SolidObject *foilr = &foilRightStruct;
00034 
00035 SolidObject foilLeftStruct; 
00036 SolidObject *foill = &foilLeftStruct;
00037 
00038 SolidObject yawStruct; 
00039 SolidObject *yaw = &yawStruct;
00040 
00041 SolidObject pitchStruct; 
00042 SolidObject *pitch = &pitchStruct;
00043 
00044 
00045 
00046 void SolidObject_create(SolidObject *so, int N, int M)
00047 {// allocate 2D arrays
00048         int n;
00049 
00050         so->N = N;
00051         so->M = M;
00052 
00053         so->X = new float* [N];
00054         so->Y = new float* [N];
00055         so->Z = new float* [N];
00056 
00057         so->nX = new float* [N];
00058         so->nY = new float* [N];
00059         so->nZ = new float* [N];
00060 
00061         so->R = new float* [N];
00062         so->G = new float* [N];
00063         so->B = new float* [N];
00064 
00065         for (n=0; n<N; n++)
00066         {
00067                 so->X[n] = new float[M];
00068                 so->Y[n] = new float[M];
00069                 so->Z[n] = new float[M];
00070 
00071                 so->nX[n] = new float[M];
00072                 so->nY[n] = new float[M];
00073                 so->nZ[n] = new float[M];
00074 
00075                 so->R[n] = new float[M];
00076                 so->G[n] = new float[M];
00077                 so->B[n] = new float[M];
00078         }
00079 }
00080 
00081 
00082 void SolidObject_delete(SolidObject *so)
00083 {//delete 2D arrays
00084         int n, N;
00085         N = so->N;
00086 
00087         for (n=0; n<N; n++)
00088         {
00089                 delete [] so->X[n];
00090                 delete [] so->Y[n];
00091                 delete [] so->Z[n];
00092 
00093                 delete [] so->nX[n];
00094                 delete [] so->nY[n];
00095                 delete [] so->nZ[n];
00096 
00097                 delete [] so->R[n];
00098                 delete [] so->G[n];
00099                 delete [] so->B[n];
00100         }
00101         delete [] so->X;
00102         delete [] so->Y;
00103         delete [] so->Z;
00104 
00105         delete [] so->nX;
00106         delete [] so->nY;
00107         delete [] so->nZ;
00108 
00109         delete [] so->R;
00110         delete [] so->G;
00111         delete [] so->B;
00112 }
00113 
00114 
00115 
00116 
00117 
00118 void cross_product(float *va, float *vb, float *vc)
00119 {// computes     vc = va x vb
00120         vc[0] = va[1]*vb[2] - va[2]*vb[1];
00121         vc[1] = va[2]*vb[0] - va[0]*vb[2];
00122         vc[2] = va[0]*vb[1] - va[1]*vb[0];
00123 }
00124 
00125 void one_normal(float *v1, float *v2, float *v3, float *v4, float *vn)
00126 {// computes     vn = c/|c|,  c = v1 x v2 + v2 x v3 + v3 x v4 + v4 x v1
00127         float c12[3]; //v1 x v2
00128         float c23[3]; //v2 x v3
00129         float c34[3]; //v3 x v4
00130         float c41[3]; //v4 x v1
00131 
00132         float vectorNorm, temp;
00133 
00134         cross_product(v1, v2, c12);
00135         cross_product(v2, v3, c23);
00136         cross_product(v3, v4, c34);
00137         cross_product(v4, v1, c41);
00138 
00139 
00140         vn[0] = (c12[0]) + (c23[0]) + (c34[0]) + (c41[0]);
00141         vn[1] = (c12[1]) + (c23[1]) + (c34[1]) + (c41[1]);
00142         vn[2] = (c12[2]) + (c23[2]) + (c34[2]) + (c41[2]);
00143 
00144         vectorNorm = sqrt(vn[0]*vn[0] + vn[1]*vn[1] + vn[2]*vn[2]);
00145 
00146         if (vectorNorm != (0.0f))
00147         {
00148                 vn[0] /= vectorNorm;
00149                 vn[1] /= vectorNorm;
00150                 vn[2] /= vectorNorm;
00151         }
00152         //printf("normed: vn[0]=%f, vn[1]=%f, vn[2]=%f \n",vn[0],vn[1],vn[2]);
00153 }
00154 
00155 void SolidObject_compute_normals(SolidObject *so)
00156 {
00157         int m, n;
00158         int *kx, *ky;
00159         int ix, iy;
00160 
00161         float v1[3]; //vectors between vetexes
00162         float v2[3];
00163         float v3[3];
00164         float v4[3];
00165 
00166         float vn[3]; // one normal vector (normalized)
00167 
00168         float **X, **Y, **Z;
00169 
00170         kx = new int [so->N+2];
00171         ky = new int [so->M+2];
00172 
00173         X = so->X; //solidObject vertexes coordiantes
00174         Y = so->Y;
00175         Z = so->Z;
00176 
00177         kx[0]=so->N-1;                                           //
00178         for (n=1; n<so->N+1; n++) kx[n]=n-1; // make index vector kx = {N-1, 0, 1, 2, ..., N-2, N-1, 0}
00179         kx[so->N+1] = 0;                                         // for easy wraping on Solidobject data
00180 
00181         ky[0]=so->M-1;                                           //
00182         for (m=1; m<so->M+1; m++) ky[m]=m-1; // make index vector ky = {M-1, 0, 1, 2, ..., M-2, M-1, 0}
00183         ky[so->M+1] = 0;                                         // for easy wraping on Solidobject data
00184 
00185         //       v2
00186         //       ¦
00187         //  v3 --p-- v1
00188         //       ¦
00189         //       v4
00190         //
00191         //normal at point p:  n = c/|c|,  c = v1 x v2 + v2 x v3 + v3 x v4 + v4 x v1
00192 
00193         for (n=1; n<so->N+1; n++)
00194         {
00195                 for (m=1; m<so->M+1; m++)
00196                 {
00197                         //compute vectors v1 ... v4
00198                         v1[0] = X[kx[n+1]][ky[m]]-X[kx[n]][ky[m]];
00199                         v1[1] = Y[kx[n+1]][ky[m]]-Y[kx[n]][ky[m]];
00200                         v1[2] = Z[kx[n+1]][ky[m]]-Z[kx[n]][ky[m]];
00201 
00202                         v2[0] = X[kx[n]][ky[m+1]]-X[kx[n]][ky[m]];
00203                         v2[1] = Y[kx[n]][ky[m+1]]-Y[kx[n]][ky[m]];
00204                         v2[2] = Z[kx[n]][ky[m+1]]-Z[kx[n]][ky[m]];
00205 
00206                         v3[0] = X[kx[n-1]][ky[m]]-X[kx[n]][ky[m]];
00207                         v3[1] = Y[kx[n-1]][ky[m]]-Y[kx[n]][ky[m]];
00208                         v3[2] = Z[kx[n-1]][ky[m]]-Z[kx[n]][ky[m]];
00209 
00210                         v4[0] = X[kx[n-1]][ky[m-1]]-X[kx[n]][ky[m]];
00211                         v4[1] = Y[kx[n-1]][ky[m-1]]-Y[kx[n]][ky[m]];
00212                         v4[2] = Z[kx[n-1]][ky[m-1]]-Z[kx[n]][ky[m]];
00213 
00214                         one_normal(v1, v2, v3, v4, vn);
00215 
00216                         // copy normal vector to solidObject nX, nY and nZ arrays
00217                         so->nX[kx[n]][ky[m]] = vn[0]; 
00218                         so->nY[kx[n]][ky[m]] = vn[1];
00219                         so->nZ[kx[n]][ky[m]] = vn[2];
00220                 }
00221         }
00222         
00223         delete [] kx;
00224         delete [] ky;
00225 }
00226 
00227 
00228 void SolidObject_draw(SolidObject *so)
00229 {
00230         int N, M, n, m;
00231 
00232         N = so->N;
00233         M = so->M;
00234         
00235         glBegin(GL_QUADS);      
00236         for (n=0; n<N-1; n++)
00237         {
00238                 for (m=0; m<M-1; m++)
00239                 {
00240                         glColor3f(so->R[n][m], so->G[n][m], so->B[n][m]);
00241                         glNormal3f(so->nX[n][m], so->nY[n][m], so->nZ[n][m]);
00242                         glVertex3f(so->X[n][m], so->Y[n][m], so->Z[n][m]);
00243 
00244                         glColor3f(so->R[n+1][m], so->G[n+1][m], so->B[n+1][m]);
00245                         glNormal3f(so->nX[n+1][m], so->nY[n+1][m], so->nZ[n+1][m]);
00246                         glVertex3f(so->X[n+1][m], so->Y[n+1][m], so->Z[n+1][m]);
00247 
00248                         glColor3f(so->R[n+1][m+1], so->G[n+1][m+1], so->B[n+1][m+1]);
00249                         glNormal3f(so->nX[n+1][m+1], so->nY[n+1][m+1], so->nZ[n+1][m+1]);
00250                         glVertex3f(so->X[n+1][m+1], so->Y[n+1][m+1], so->Z[n+1][m+1]);
00251 
00252                         glColor3f(so->R[n][m+1], so->G[n][m+1], so->B[n][m+1]);
00253                         glNormal3f(so->nX[n][m+1], so->nY[n][m+1], so->nZ[n][m+1]);
00254                         glVertex3f(so->X[n][m+1], so->Y[n][m+1], so->Z[n][m+1]);        
00255                 }
00256         }
00257         glEnd();
00258 }
00259 
00260 
00261 void Sail_create_and_draw(datas *d)
00262 {
00263         float v1[3], v2[3], vc[3], normv;
00264         
00265         GLuint *texture = get_texture();
00266         // use the texture
00267     glBindTexture( GL_TEXTURE_2D, texture[0] );
00268     glEnable( GL_TEXTURE_2D );
00269    // glBegin( GL_QUADS );
00270 
00271         //sail_E:
00272         v1[0] = d->x_sail - d->x_sail;
00273         v1[1] = d->y_sail - d->y_sail;
00274         v1[2] = d->z_foils+2.0f - d->z_foils+d->L_mast;
00275 
00276         v2[0] = d->x_sail - d->Baume/(sqrt(1.0 + d->tanAngle_sail*d->tanAngle_sail)) - d->x_sail;
00277         v2[1] = d->y_sail - d->Baume*d->tanAngle_sail/(sqrt(1.0 + d->tanAngle_sail*d->tanAngle_sail)) - d->y_sail;
00278         v2[2] = d->z_foils + 2.0f - d->z_foils+d->L_mast;
00279 
00280         cross_product(v1, v2 ,vc);
00281 
00282         normv = sqrt(vc[0]*vc[0] + vc[1]*vc[1] + vc[2]*vc[2]);
00283 
00284         vc[0] /= normv;
00285         vc[1] /= normv;
00286         vc[2] /= normv;
00287 
00288         glBegin( GL_QUADS );//glBegin(GL_TRIANGLES);
00289                 glNormal3f(vc[0],vc[1],vc[2]);
00290                 glColor3f(0.9f,0.9f,0.9f);
00291                  glTexCoord2f( 0.0f, 1.0f );
00292                 glVertex3f(d->x_sail, d->y_sail, d->z_foils+2.0f);      
00293                  glTexCoord2f( 0.0f, 0.0f );
00294                 //glVertex3f(d->x_sail, d->y_sail, d->z_foils+2.0f);    
00295                 glVertex3f(d->x_sail, d->y_sail, d->z_foils+d->L_mast); 
00296                  glTexCoord2f( 1.0f, 0.0f );            
00297                 glVertex3f(d->x_sail, d->y_sail, d->z_foils+d->L_mast);         
00298                  glTexCoord2f( 1.0f, 1.0f );            
00299                 glVertex3f(d->x_sail - d->Baume/(sqrt(1.0 + d->tanAngle_sail*d->tanAngle_sail)), d->y_sail - d->Baume*d->tanAngle_sail/(sqrt(1.0 + d->tanAngle_sail*d->tanAngle_sail)), d->z_foils + 2.0f);
00300         glEnd();
00301         glDisable( GL_TEXTURE_2D );
00302 }
00303 
00304 
00305 void RelativeWind_draw(datas *d)
00306 {
00307         glLineWidth(1.0f);
00308         glColor3f(0.9, 0.2, 0.2);
00309         glPushMatrix();                              //stock current matrix
00310         glTranslatef(d->x_sail,d->y_sail,d->z_foils+d->L_mast); //translate it on top of mast
00311         glRotatef(-57.2958*d->psi,0.0f,0.0f,1.0f);       //unrotate psi
00312         glRotatef(-57.2958*d->theta,0.0f,1.0f,0.0f); //unrotate theta
00313         glRotatef(-57.2958*d->phi,1.0f,0.0f,0.0f);   //unrotate phi
00314         glBegin(GL_LINES); //draw relative wind vector in boat coordinates (but with "grand coordinate system"-coordinates => wrong)
00315                 glVertex3f(0.0f, 0.0f, 0.0f);
00316                 glVertex3f(d->Wind_x - d->dx, d->Wind_y - d->dy, 0.0f);
00317         glEnd();
00318         glPopMatrix();                               //restore matrix
00319 }
00320 
00321 
00322 void Target_draw(float x, float y)
00323 {
00324         int k, N;
00325         float a;
00326         glLineWidth(1.0f);
00327         glNormal3f(0.0,0.0,1.0);
00328 
00329         glColor3f(0.0, 0.0, 0.0);
00330         glBegin(GL_LINE_STRIP);
00331         for (a=0.0f; a<6.2834; a+=0.3141f)
00332         {
00333                 glVertex3f(cos(a),sin(a),0.0f);
00334         }
00335         glEnd();
00336 
00337         glColor3f(0.0, 0.0, 0.0);
00338         glBegin(GL_LINES);
00339                 glVertex3f(-1.1f, 0.0f, 0.0f);
00340                 glVertex3f( 1.1f, 0.0f, 0.0f);
00341                 glVertex3f( 0.0f,-1.1f, 0.0f);
00342                 glVertex3f( 0.0f, 1.1f, 0.0f);
00343         glEnd();
00344 
00345         glLineWidth(2.0f);
00346         glColor3f(1.0, 0.0, 0.0);
00347         glBegin(GL_LINES);
00348                 glVertex3f(-0.15f + x, 0.0f + y, 0.0f);
00349                 glVertex3f( 0.15f + x, 0.0f + y, 0.0f);
00350                 glVertex3f( 0.0f + x,-0.15f + y, 0.0f);
00351                 glVertex3f( 0.0f + x, 0.15f + y, 0.0f);
00352         glEnd();
00353 }
00354 
00355 
00356 void VSlider_draw(float x)
00357 {
00358         glLineWidth(1.0f);
00359         glColor3f(0.0,0.0,0.0);
00360         //scale:
00361         glBegin(GL_LINES);
00362                 glVertex3f(0.0f, 0.5f, 0.0f);
00363                 glVertex3f(0.0f,-0.5f, 0.0f);
00364 
00365                 glVertex3f(-0.1f, 0.5f, 0.0f);
00366                 glVertex3f( 0.1f, 0.5f, 0.0f);
00367 
00368                 glVertex3f(-0.1f, 0.0f, 0.0f);
00369                 glVertex3f( 0.1f, 0.0f, 0.0f);
00370 
00371                 glVertex3f(-0.1f, -0.5f, 0.0f);
00372                 glVertex3f( 0.1f, -0.5f, 0.0f);
00373         glEnd();
00374 
00375                 glLineWidth(2.0f);
00376                 glColor3f(1.0,0.0,0.0);
00377 
00378         //indicator:
00379         glBegin(GL_LINES);
00380                 glVertex3f(-0.1f, 0.5f*x, 0.0f);
00381                 glVertex3f( 0.1f, 0.5f*x, 0.0f);
00382         glEnd();
00383 }
00384 
00385 void HSlider_draw(float x)
00386 {
00387         glLineWidth(1.0f);
00388         glColor3f(0.0,0.0,0.0);
00389         //scale:
00390         glBegin(GL_LINES);
00391                 glVertex3f(-0.5f, 0.0f, 0.0f);
00392                 glVertex3f( 0.5f,0.0f, 0.0f);
00393 
00394                 glVertex3f( 0.5f,-0.1f, 0.0f);
00395                 glVertex3f( 0.5f, 0.1f, 0.0f);
00396 
00397                 glVertex3f( 0.0f,-0.1f, 0.0f);
00398                 glVertex3f( 0.0f, 0.1f, 0.0f);
00399 
00400                 glVertex3f(-0.5f,-0.1f, 0.0f);
00401                 glVertex3f(-0.5f, 0.1f, 0.0f);
00402         glEnd();
00403 
00404                 glLineWidth(2.0f);
00405                 glColor3f(1.0,0.0,0.0);
00406 
00407         //indicator:
00408         glBegin(GL_LINES);
00409                 glVertex3f( 0.5f*x,-0.1f, 0.0f);
00410                 glVertex3f( 0.5f*x, 0.1f, 0.0f);
00411         glEnd();
00412 }
00413 
00414 
00415 void Girouette_draw(datas *d) // I don't know the english name for a "girouette" :-) ...
00416 {
00417         float rx,lx,y, a, arrow_angle, hypo, baume_angle;
00418         float ax, ay;
00419         float Vrbx, Vrby, normVb, normVrb, num, denom;
00420         float va[3], vb[3], vc[3];
00421         a=0.5236; //Girouette half-opening angle (30 deg)
00422         y=-cos(a);
00423         rx=sin(a);
00424         lx=-rx;
00425         glLineWidth(1.0f);
00426         glNormal3f(0.0,0.0,1.0);
00427 
00428         glColor3f(0.0, 0.0, 0.0);
00429         //girouette arms
00430         glBegin(GL_LINES);
00431                 glVertex3f(0.0f, 0.0f, 0.0f);
00432                 glVertex3f(rx, y, 0.0f);
00433 
00434                 glVertex3f(0.0f, 0.0f, 0.0f);
00435                 glVertex3f(lx, y, 0.0f);
00436         glEnd();
00437 
00438         //red girouette pads:
00439         glColor3f(0.85,0.05,0.05);
00440         glBegin(GL_QUADS);
00441                 glVertex3f(rx+0.1f, y+0.1f, 0.0f);
00442                 glVertex3f(rx-0.1f, y+0.1f, 0.0f);
00443                 glVertex3f(rx-0.1f, y-0.1f, 0.0f);
00444                 glVertex3f(rx+0.1f, y-0.1f, 0.0f);
00445 
00446                 glVertex3f(lx+0.1f, y+0.1f, 0.0f);
00447                 glVertex3f(lx-0.1f, y+0.1f, 0.0f);
00448                 glVertex3f(lx-0.1f, y-0.1f, 0.0f);
00449                 glVertex3f(lx+0.1f, y-0.1f, 0.0f);
00450         glEnd();
00451 
00452         //girouette arrow (wind)
00453         ax = - (d->Wind_x - d->dx);
00454         ay = - (d->Wind_y - d->dy);
00455         hypo = sqrt(ax*ax + ay*ay);
00456         if (hypo != 0.0)
00457         {
00458                 Vrbx = d->Wind_x - d->dx;
00459                 Vrby = d->Wind_y - d->dy;
00460                 num = -d->dx*Vrbx - d->dy*Vrby;
00461                 denom = sqrt(d->dx*d->dx + d->dy*d->dy)*sqrt(Vrbx*Vrbx + Vrby*Vrby);
00462                 arrow_angle = 57.2958f*acos(num/denom);
00463                 va[0]=Vrbx;
00464                 va[1]=Vrby;
00465                 va[2]=0.0f;
00466                 vb[0]=-d->dx;
00467                 vb[1]=-d->dy;
00468                 vb[2]=0.0f;
00469                 cross_product(va, vb, vc);
00470                 if (vc[2]>0.0f) arrow_angle *= -1.0f;
00471                 d->angle_girouette = arrow_angle/57.2958f;
00472 
00473         //      if (Vrby<0.0f) arrow_angle *= -1.0f;
00474                 //arrow_angle = 57.2958f*acos(ax/hypo);
00475                 //if (ay<0.0f) arrow_angle = - arrow_angle; //cosinus ambiguity
00476                 //arrow_angle = 57.2958f*(atan(d->tanAngle_sail) - atan(d->Tan_AoA_sail));
00477                 //arrow_angle += 57.2958f*d->psi;
00478                 //printf("ax=%f, ay=%f, angle=%f , psi=%f \n",ax, ay, arrow_angle, 57.2958f*d->psi);
00479                 glLineWidth(2.0f);
00480                 glPushMatrix() ;
00481                 glRotatef(arrow_angle, 0.0f, 0.0f, 1.0f);
00482                 glBegin(GL_LINES);
00483                         glVertex3f(0.0f, 0.0f, 0.0f);
00484                         glVertex3f(0.0f, -0.8f, 0.0f);
00485 
00486                         glVertex3f(0.0f, -0.8f, 0.0f);
00487                         glVertex3f(0.1f, -0.7f, 0.0f);
00488         
00489                         glVertex3f(0.0f, -0.8f, 0.0f);
00490                         glVertex3f(-0.1f, -0.7f, 0.0f);
00491                 glEnd();
00492                 glPopMatrix() ;
00493 
00494                 //baume
00495                 baume_angle = atan(d->tanAngle_sail);
00496                 glColor3f(0.9,0.9,0.05);
00497                 glBegin(GL_LINES);
00498                         glVertex3f(0.0f, 0.0f, -0.001f);
00499                         //glVertex3f(0.0f, -1.0f, -0.001f);
00500                         glVertex3f(1.2f*sin(baume_angle), -1.2f*cos(baume_angle), -0.001f);
00501                 glEnd();
00502         }
00503 }
00504 
00505 
00506 
00507 
00508 void Boat_draw()
00509 {
00510         SolidObject_draw(hull);
00511 
00512         SolidObject_draw(rSwimm);
00513         SolidObject_draw(lSwimm);
00514 
00515         SolidObject_draw(bridgeMain);
00516         SolidObject_draw(bridge2);
00517 
00518         SolidObject_draw(mast);
00519 
00520         SolidObject_draw(foilr);
00521         SolidObject_draw(foill);
00522 
00523         SolidObject_draw(yaw);
00524 
00525         SolidObject_draw(pitch);
00526 }
00527 
00528 void Boat_delete()
00529 {
00530         SolidObject_delete(hull);
00531 
00532         SolidObject_delete(rSwimm);
00533         SolidObject_delete(lSwimm);
00534 
00535         SolidObject_delete(bridgeMain);
00536         SolidObject_delete(bridge2);
00537 
00538         SolidObject_delete(mast);
00539 
00540         SolidObject_delete(foilr);
00541         SolidObject_delete(foill);
00542 
00543         SolidObject_delete(yaw);
00544 
00545         SolidObject_delete(pitch);
00546 }
00547 
00548 
00549 
00550 
00551 
00552 void Boat_create(datas *d)
00553 {
00554         int n,m,k,q;
00555         float temp1, temp2;
00556 
00557         SolidObject_create(hull, 8, 9);
00558         SolidObject_create(rSwimm, 8, 9);
00559         SolidObject_create(lSwimm, 8, 9);
00560         SolidObject_create(bridgeMain, 4, 5);
00561         SolidObject_create(bridge2, 5, 5);
00562         SolidObject_create(mast, 2, 5);
00563         SolidObject_create(foilr, 2, 2);
00564         SolidObject_create(foill, 2, 2);
00565         SolidObject_create(yaw, 2, 2);
00566         SolidObject_create(pitch, 2, 2);
00567         
00568 
00569 //hull coordinates (column by collumn)
00570 
00571         for (k=0; k<9; k++) hull->X[0][k] = d->x_yaw-0.001;
00572 
00573         hull->X[1][0]=d->x_yaw-0.001;
00574         hull->X[1][8]=d->x_yaw-0.001;
00575         hull->X[1][6]=d->x_yaw-0.001;
00576         hull->X[1][1]=d->x_yaw-0.15f-0.001;
00577         hull->X[1][5]=d->x_yaw-0.15f-0.001;
00578         hull->X[1][2]=d->x_yaw-0.25f-0.001;
00579         hull->X[1][4]=d->x_yaw-0.25f-0.001;
00580         hull->X[1][3]=d->x_yaw-0.3f-0.001;
00581         hull->X[1][7]=d->x_yaw-0.1f-0.001;
00582 
00583         hull->X[2][0]=d->x_yaw;
00584         hull->X[2][8]=d->x_yaw;
00585         hull->X[2][6]=d->x_yaw;
00586         hull->X[2][1]=d->x_yaw-0.15f;
00587         hull->X[2][5]=d->x_yaw-0.15f;
00588         hull->X[2][2]=d->x_yaw-0.25f;
00589         hull->X[2][4]=d->x_yaw-0.25f;
00590         hull->X[2][3]=d->x_yaw-0.3f;
00591         hull->X[2][7]=d->x_yaw-0.1f;
00592 
00593         for (k=0; k<9; k++) hull->X[3][k] = d->x_yaw+(d->Long/3.0);
00594         for (k=0; k<9; k++) hull->X[4][k] = d->x_yaw+2.0*(d->Long/4.0);
00595         for (k=0; k<9; k++) hull->X[5][k] = d->x_yaw+3.0*(d->Long/4.0);
00596         for (k=0; k<9; k++) hull->X[6][k] = d->x_yaw+4.0*(d->Long/4.0);
00597         for (k=0; k<9; k++) hull->X[7][k] = d->x_yaw+4.0*(d->Long/4.0)-0.01;
00598 
00599 
00600         for (k=0; k<9; k++) hull->Y[0][k] = d->y_yaw;
00601 
00602         hull->Y[1][0] = d->y_yaw - 0.3f;
00603         hull->Y[1][8] = d->y_yaw - 0.3f;
00604         hull->Y[1][6] = d->y_yaw + 0.3f;
00605         hull->Y[1][1] = d->y_yaw - 0.3f;
00606         hull->Y[1][5] = d->y_yaw + 0.3f;
00607         hull->Y[1][2] = d->y_yaw - 0.2f;
00608         hull->Y[1][4] = d->y_yaw + 0.2f;
00609         hull->Y[1][3] = d->y_yaw;
00610         hull->Y[1][7] = d->y_yaw;
00611         
00612         hull->Y[2][0] = d->y_yaw - 0.3f;
00613         hull->Y[2][8] = d->y_yaw - 0.3f;
00614         hull->Y[2][6] = d->y_yaw + 0.3f;
00615         hull->Y[2][1] = d->y_yaw - 0.3f;
00616         hull->Y[2][5] = d->y_yaw + 0.3f;
00617         hull->Y[2][2] = d->y_yaw - 0.2f;
00618         hull->Y[2][4] = d->y_yaw + 0.2f;
00619         hull->Y[2][3] = d->y_yaw;
00620         hull->Y[2][7] = d->y_yaw;
00621 
00622         hull->Y[3][0] = d->y_yaw - 0.65f;
00623         hull->Y[3][8] = d->y_yaw - 0.65f;
00624         hull->Y[3][6] = d->y_yaw + 0.65f;
00625         hull->Y[3][1] = d->y_yaw - 0.65f;
00626         hull->Y[3][5] = d->y_yaw + 0.65f;
00627         hull->Y[3][2] = d->y_yaw - 0.4f;
00628         hull->Y[3][4] = d->y_yaw + 0.4f;
00629         hull->Y[3][3] = d->y_yaw;
00630         hull->Y[3][7] = d->y_yaw;
00631 
00632         hull->Y[4][0] = d->y_yaw - 0.8f;
00633         hull->Y[4][8] = d->y_yaw - 0.8f;
00634         hull->Y[4][6] = d->y_yaw + 0.8f;
00635         hull->Y[4][1] = d->y_yaw - 0.8f;
00636         hull->Y[4][5] = d->y_yaw + 0.8f;
00637         hull->Y[4][2] = d->y_yaw - 0.6f;
00638         hull->Y[4][4] = d->y_yaw + 0.6f;
00639         hull->Y[4][3] = d->y_yaw;
00640         hull->Y[4][7] = d->y_yaw;
00641 
00642         hull->Y[5][0] = d->y_yaw - 0.5f;
00643         hull->Y[5][8] = d->y_yaw - 0.5f;
00644         hull->Y[5][6] = d->y_yaw + 0.5f;
00645         hull->Y[5][1] = d->y_yaw - 0.5f;
00646         hull->Y[5][5] = d->y_yaw + 0.5f;
00647         hull->Y[5][2] = d->y_yaw - 0.3f;
00648         hull->Y[5][4] = d->y_yaw + 0.3f;
00649         hull->Y[5][3] = d->y_yaw;
00650         hull->Y[5][7] = d->y_yaw;
00651 
00652         hull->Y[6][0] = d->y_yaw - 0.01f;
00653         hull->Y[6][8] = d->y_yaw - 0.01f;
00654         hull->Y[6][6] = d->y_yaw + 0.01f;
00655         hull->Y[6][1] = d->y_yaw - 0.01f;
00656         hull->Y[6][5] = d->y_yaw + 0.01f;
00657         hull->Y[6][2] = d->y_yaw - 0.005f;
00658         hull->Y[6][4] = d->y_yaw + 0.005f;
00659         hull->Y[6][3] = d->y_yaw;
00660         hull->Y[6][7] = d->y_yaw;
00661 
00662         hull->Y[7][0] = d->y_yaw - 0.0f;
00663         hull->Y[7][8] = d->y_yaw - 0.0f;
00664         hull->Y[7][6] = d->y_yaw + 0.0f;
00665         hull->Y[7][1] = d->y_yaw - 0.0f;
00666         hull->Y[7][5] = d->y_yaw + 0.0f;
00667         hull->Y[7][2] = d->y_yaw - 0.0f;
00668         hull->Y[7][4] = d->y_yaw + 0.0f;
00669         hull->Y[7][3] = d->y_yaw;
00670         hull->Y[7][7] = d->y_yaw;
00671 
00672 
00673         for (k=0; k<9; k++) hull->Z[0][k] = d->z_foils;
00674 
00675         hull->Z[1][7] = d->z_foils + 0.03f;
00676         hull->Z[1][0] = d->z_foils - 0.0f;
00677         hull->Z[1][8] = d->z_foils - 0.0f;
00678         hull->Z[1][6] = d->z_foils - 0.0f;
00679         hull->Z[1][1] = d->z_foils - 0.3f;
00680         hull->Z[1][5] = d->z_foils - 0.3f;
00681         hull->Z[1][2] = d->z_foils - 0.5f;
00682         hull->Z[1][4] = d->z_foils - 0.5f;
00683         hull->Z[1][3] = d->z_foils - 0.6f;
00684 
00685         hull->Z[2][7] = d->z_foils + 0.03f;
00686         hull->Z[2][0] = d->z_foils - 0.0f;
00687         hull->Z[2][8] = d->z_foils - 0.0f;
00688         hull->Z[2][6] = d->z_foils - 0.0f;
00689         hull->Z[2][1] = d->z_foils - 0.3f;
00690         hull->Z[2][5] = d->z_foils - 0.3f;
00691         hull->Z[2][2] = d->z_foils - 0.5f;
00692         hull->Z[2][4] = d->z_foils - 0.5f;
00693         hull->Z[2][3] = d->z_foils - 0.6f;
00694 
00695         hull->Z[3][7] = d->z_foils + 0.07f;
00696         hull->Z[3][0] = d->z_foils - 0.0f;
00697         hull->Z[3][8] = d->z_foils - 0.0f;
00698         hull->Z[3][6] = d->z_foils - 0.0f;
00699         hull->Z[3][1] = d->z_foils - 0.4f;
00700         hull->Z[3][5] = d->z_foils - 0.4f;
00701         hull->Z[3][2] = d->z_foils - 0.8f;
00702         hull->Z[3][4] = d->z_foils - 0.8f;
00703         hull->Z[3][3] = d->z_foils - 1.1f;
00704 
00705         hull->Z[4][7] = d->z_foils + 0.1f;
00706         hull->Z[4][0] = d->z_foils - 0.0f;
00707         hull->Z[4][8] = d->z_foils - 0.0f;
00708         hull->Z[4][6] = d->z_foils - 0.0f;
00709         hull->Z[4][1] = d->z_foils - 0.4f;
00710         hull->Z[4][5] = d->z_foils - 0.4f;
00711         hull->Z[4][2] = d->z_foils - 0.9f;
00712         hull->Z[4][4] = d->z_foils - 0.9f;
00713         hull->Z[4][3] = d->z_foils - 1.2f;
00714 
00715         hull->Z[5][7] = d->z_foils + 0.06f;
00716         hull->Z[5][0] = d->z_foils - 0.0f;
00717         hull->Z[5][8] = d->z_foils - 0.0f;
00718         hull->Z[5][6] = d->z_foils - 0.0f;
00719         hull->Z[5][1] = d->z_foils - 0.3f;
00720         hull->Z[5][5] = d->z_foils - 0.3f;
00721         hull->Z[5][2] = d->z_foils - 0.7f;
00722         hull->Z[5][4] = d->z_foils - 0.7f;
00723         hull->Z[5][3] = d->z_foils - 1.0f;
00724 
00725         hull->Z[6][7] = d->z_foils + 0.0f;
00726         hull->Z[6][0] = d->z_foils - 0.0f;
00727         hull->Z[6][8] = d->z_foils - 0.0f;
00728         hull->Z[6][6] = d->z_foils - 0.0f;
00729         hull->Z[6][1] = d->z_foils - 0.2f;
00730         hull->Z[6][5] = d->z_foils - 0.2f;
00731         hull->Z[6][2] = d->z_foils - 0.35f;
00732         hull->Z[6][4] = d->z_foils - 0.35f;
00733         hull->Z[6][3] = d->z_foils - 0.5f;
00734 
00735         hull->Z[7][7] = d->z_foils + 0.0f;
00736         hull->Z[7][0] = d->z_foils - 0.0f;
00737         hull->Z[7][8] = d->z_foils - 0.0f;
00738         hull->Z[7][6] = d->z_foils - 0.0f;
00739         hull->Z[7][1] = d->z_foils - 0.2f;
00740         hull->Z[7][5] = d->z_foils - 0.2f;
00741         hull->Z[7][2] = d->z_foils - 0.35f;
00742         hull->Z[7][4] = d->z_foils - 0.35f;
00743         hull->Z[7][3] = d->z_foils - 0.5f;
00744 
00745         for (q=0; q<8; q++)
00746         {
00747                 for(k=0; k<9; k++)
00748                 {
00749                         hull->R[q][k]=0.95;
00750                         hull->G[q][k]=0.95;
00751                         hull->B[q][k]=0.95;
00752                 }
00753         }
00754 
00756 
00757         //swimmers (same as hull but smaller)
00758         //right swimmer:
00759         for (q=0; q<8; q++)
00760         {
00761                 for(k=0; k<9; k++)
00762                 {
00763                         rSwimm->X[q][k] = hull->X[q][k];
00764                         rSwimm->Y[q][k] = hull->Y[q][k] - d->y_yaw;
00765                         rSwimm->Z[q][k] = hull->Z[q][k] - d->z_foils;
00766 
00767                         rSwimm->R[q][k] = hull->R[q][k];
00768                         rSwimm->G[q][k] = hull->G[q][k];
00769                         rSwimm->B[q][k] = hull->B[q][k];
00770 
00771                         //resize:
00772                         rSwimm->X[q][k] *=0.45;
00773                         rSwimm->Y[q][k] *=0.45;
00774                         rSwimm->Z[q][k] *=0.45;
00775 
00776                         //translate:
00777                         rSwimm->X[q][k] += d->x_foils -1.0;
00778                         rSwimm->Y[q][k] += d->y_foil_right;
00779                         rSwimm->Z[q][k] += d->z_foils;                  
00780                 }
00781         }
00782 
00783         //left swimmer:
00784         for (q=0; q<8; q++)
00785         {
00786                 for(k=0; k<9; k++)
00787                 {
00788                         lSwimm->X[q][k] = hull->X[q][k];
00789                         lSwimm->Y[q][k] = hull->Y[q][k] - d->y_yaw;
00790                         lSwimm->Z[q][k] = hull->Z[q][k] - d->z_foils;
00791 
00792                         lSwimm->R[q][k] = hull->R[q][k];
00793                         lSwimm->G[q][k] = hull->G[q][k];
00794                         lSwimm->B[q][k] = hull->B[q][k];
00795 
00796                         //resize:
00797                         lSwimm->X[q][k] *=0.45;
00798                         lSwimm->Y[q][k] *=0.45;
00799                         lSwimm->Z[q][k] *=0.45;
00800 
00801                         //translate:
00802                         lSwimm->X[q][k] += d->x_foils -1.0;
00803                         lSwimm->Y[q][k] += d->y_foil_left;
00804                         lSwimm->Z[q][k] += d->z_foils;                  
00805                 }
00806         }
00807 
00808 
00809         //hull is too "flat"...:
00810         for (q=0; q<8; q++)
00811         {
00812                 for(k=0; k<9; k++)
00813                 {
00814                         hull->Z[q][k]*=1.5;
00815                 }
00816         }
00817 
00819 
00820         //Bridge main:
00821         temp1 = 0.7;
00822         temp2 = 0.2;
00823 
00824         for (k=0; k<4; k++)
00825         {
00826                 bridgeMain->X[k][0] = d->x_foils + temp2 - temp1;
00827                 bridgeMain->X[k][1] = d->x_foils + temp2 - temp1;
00828                 bridgeMain->X[k][2] = d->x_foils - temp2 - temp1;
00829                 bridgeMain->X[k][3] = d->x_foils - temp2 - temp1;
00830                 bridgeMain->X[k][4] = d->x_foils + temp2 - temp1;
00831         }
00832 
00833         for (q=0; q<5; q++)
00834         {
00835                 bridgeMain->Y[0][q] = d->y_foil_left;
00836                 bridgeMain->Y[1][q] = d->y_foil_left + 0.001*d->y_foil_right;
00837                 bridgeMain->Y[2][q] = d->y_foil_right + 0.001*d->y_foil_left;
00838                 bridgeMain->Y[3][q] = d->y_foil_right;
00839         }
00840 
00841         for (k=0; k<4; k++)
00842         {
00843                 bridgeMain->Z[k][0] = d->z_foils + temp2;
00844                 bridgeMain->Z[k][1] = d->z_foils - temp2;
00845                 bridgeMain->Z[k][2] = d->z_foils - temp2;
00846                 bridgeMain->Z[k][3] = d->z_foils + temp2;
00847                 bridgeMain->Z[k][4] = d->z_foils + temp2;
00848         }
00849 
00850         for (q=0; q<4; q++)
00851         {
00852                 for(k=0; k<5; k++)
00853                 {
00854                         bridgeMain->R[q][k] = hull->R[q][k];
00855                         bridgeMain->G[q][k] = hull->G[q][k];
00856                         bridgeMain->B[q][k] = hull->B[q][k]; 
00857                 }
00858         }
00859 
00860 
00862         // bridge2:
00863 
00864         for (k=0; k<5;k++)
00865         {
00866                 bridge2->X[k][0] = d->x_foils + temp2 - d->Chord_max + temp1;
00867                 bridge2->X[k][1] = d->x_foils + temp2 - d->Chord_max + temp1;
00868                 bridge2->X[k][2] = d->x_foils - temp2 - d->Chord_max + temp1;
00869                 bridge2->X[k][3] = d->x_foils - temp2 - d->Chord_max + temp1;
00870                 bridge2->X[k][4] = d->x_foils + temp2 - d->Chord_max + temp1;
00871         }
00872 
00873         for (k=0; k<5;k++)
00874         {
00875                 bridge2->X[2][k] -= 1.5;
00876         }
00877 
00878 
00879         for (q=0; q<5; q++)
00880         {
00881                 bridge2->Y[0][q] = d->y_foil_left;
00882                 bridge2->Y[1][q] = d->y_foil_left + 0.001*d->y_foil_right;
00883                 bridge2->Y[2][q] = 0.5*(d->y_foil_right+d->y_foil_left);
00884                 bridge2->Y[3][q] = d->y_foil_right + 0.001*d->y_foil_left;
00885                 bridge2->Y[4][q] = d->y_foil_right;
00886         }
00887 
00888 
00889         for (q=0; q<5; q++)
00890         {
00891                 bridge2->Z[q][0] = d->z_foils + temp2;
00892                 bridge2->Z[q][1] = d->z_foils - temp2;
00893                 bridge2->Z[q][2] = d->z_foils - temp2;
00894                 bridge2->Z[q][3] = d->z_foils + temp2;
00895                 bridge2->Z[q][4] = d->z_foils + temp2;
00896         }
00897 
00898 
00899         for (q=0; q<5; q++)
00900         {
00901                 for(k=0; k<5; k++)
00902                 {
00903                         bridge2->R[q][k] = hull->R[q][k];
00904                         bridge2->G[q][k] = hull->G[q][k];
00905                         bridge2->B[q][k] = hull->B[q][k]; 
00906                 }
00907         }
00908 
00910         // mast
00911         for (k=0; k<2; k++)
00912         {
00913                 mast->X[k][0] = d->x_sail - 0.18;
00914                 mast->X[k][1] = d->x_sail + 0.18;
00915                 mast->X[k][2] = d->x_sail + 0.18;
00916                 mast->X[k][3] = d->x_sail - 0.18;
00917                 mast->X[k][4] = d->x_sail - 0.18;
00918 
00919                 mast->Y[k][0] = d->y_sail - 0.18;
00920                 mast->Y[k][1] = d->y_sail - 0.18;
00921                 mast->Y[k][2] = d->y_sail + 0.18;
00922                 mast->Y[k][3] = d->y_sail + 0.18;
00923                 mast->Y[k][4] = d->y_sail - 0.18;
00924 
00925                 mast->nX[k][0] = - sqrt(2.0);
00926                 mast->nX[k][1] = + sqrt(2.0);
00927                 mast->nX[k][2] = + sqrt(2.0);
00928                 mast->nX[k][3] = - sqrt(2.0);
00929                 mast->nX[k][4] = - sqrt(2.0);
00930 
00931                 mast->nY[k][0] = - sqrt(2.0);
00932                 mast->nY[k][1] = - sqrt(2.0);
00933                 mast->nY[k][2] = + sqrt(2.0);
00934                 mast->nY[k][3] = + sqrt(2.0);
00935                 mast->nY[k][4] = - sqrt(2.0);
00936         }
00937         for (k=0; k<5; k++)
00938         {
00939                 mast->Z[0][k] = d->z_foils+d->L_mast;
00940                 mast->Z[1][k] = d->z_foils;
00941                 
00942                 for (q=0; q<2; q++)
00943                 {
00944                         mast->nZ[q][k] = 0.0;
00945 
00946                         mast->R[q][k] = 0.85;
00947                         mast->G[q][k] = 0.85;
00948                         mast->B[q][k] = 0.95;
00949                 }
00950         }
00951 
00952 
00954         //right foil:
00955 
00956         foilr->X[0][0] = d->x_foils-d->Chord_min;
00957         foilr->X[0][1] = d->x_foils;
00958         foilr->X[1][0] = d->x_foils-d->Chord_max;
00959         foilr->X[1][1] = d->x_foils;
00960 
00961         foilr->Y[0][0] = d->y_foil_right+cos(d->alpha_right)*d->E_foils;
00962         foilr->Y[0][1] = d->y_foil_right+cos(d->alpha_right)*d->E_foils;
00963         foilr->Y[1][0] = d->y_foil_right;
00964         foilr->Y[1][1] = d->y_foil_right;
00965 
00966         foilr->Z[0][0] = d->z_foils-sin(d->alpha_right)*d->E_foils;
00967         foilr->Z[0][1] = d->z_foils-sin(d->alpha_right)*d->E_foils;
00968         foilr->Z[1][0] = d->z_foils;
00969         foilr->Z[1][1] = d->z_foils;
00970 
00971         for (k=0; k<2; k++)
00972         {
00973                 for (q=0; q<2; q++)
00974                 {
00975                         foilr->nX[k][q] = 0.0;
00976                         foilr->nY[k][q] = sin(d->alpha_right);
00977                         foilr->nZ[k][q] = cos(d->alpha_right);
00978 
00979                         foilr->R[k][q] = hull->R[0][0];
00980                         foilr->G[k][q] = hull->G[0][0];
00981                         foilr->B[k][q] = hull->B[0][0];
00982                 }
00983         }
00984 
00985         //left foil:
00986 
00987         foill->X[1][0] = d->x_foils-d->Chord_min;
00988         foill->X[1][1] = d->x_foils;
00989         foill->X[0][0] = d->x_foils-d->Chord_max;
00990         foill->X[0][1] = d->x_foils;
00991 
00992         foill->Y[1][0] = d->y_foil_left-cos(d->alpha_left)*d->E_foils;
00993         foill->Y[1][1] = d->y_foil_left-cos(d->alpha_left)*d->E_foils;
00994         foill->Y[0][0] = d->y_foil_left;
00995         foill->Y[0][1] = d->y_foil_left;
00996 
00997         foill->Z[1][0] = d->z_foils-sin(d->alpha_left)*d->E_foils;
00998         foill->Z[1][1] = d->z_foils-sin(d->alpha_left)*d->E_foils;
00999         foill->Z[0][0] = d->z_foils;
01000         foill->Z[0][1] = d->z_foils;
01001 
01002         for (k=0; k<2; k++)
01003         {
01004                 for (q=0; q<2; q++)
01005                 {
01006                         foill->nX[k][q] = 0.0;
01007                         foill->nY[k][q] = -sin(d->alpha_right);
01008                         foill->nZ[k][q] = cos(d->alpha_right);
01009 
01010                         foill->R[k][q] = hull->R[0][0];
01011                         foill->G[k][q] = hull->G[0][0];
01012                         foill->B[k][q] = hull->B[0][0];
01013                 }
01014         }
01015 
01016 
01018         //yaw
01019         for (q=0; q<2; q++)
01020         {
01021                 yaw->X[0][q] = d->x_yaw;
01022                 yaw->X[1][q] = d->x_yaw+d->Chord_yaw;
01023 
01024                 yaw->Z[q][0] = d->z_foils;
01025                 yaw->Z[q][1] = d->z_yaw-d->E_yaw;
01026                 
01027                 for (k=0; k<2; k++)
01028                 {
01029                         yaw->Y[k][q] = d->y_yaw;
01030 
01031                         yaw->nX[k][q] = 0.0;
01032                         yaw->nY[k][q] = 1.0;
01033                         yaw->nZ[k][q] = 0.0;
01034 
01035                         yaw->R[k][q] = hull->R[0][0];
01036                         yaw->G[k][q] = hull->G[0][0];
01037                         yaw->B[k][q] = hull->B[0][0];
01038                 }
01039         }
01040 
01041 
01043         //pitch
01044         for (q=0; q<2; q++)
01045         {
01046                 pitch->X[q][0] = d->x_pitch;
01047                 pitch->X[q][1] = d->x_pitch+d->Chord_pitch;
01048 
01049                 pitch->Y[0][q] = d->y_pitch+0.5*d->Env_pitch;
01050                 pitch->Y[1][q] = d->y_pitch-0.5*d->Env_pitch;
01051 
01052                 for (k=0; k<2; k++)
01053                 {
01054                         pitch->Z[k][q] = d->z_pitch;
01055 
01056                         pitch->nX[k][q] = 0.0;
01057                         pitch->nY[k][q] = 0.0;
01058                         pitch->nZ[k][q] = 1.0;
01059 
01060                         pitch->R[k][q] = hull->R[0][0];
01061                         pitch->G[k][q] = hull->G[0][0];
01062                         pitch->B[k][q] = hull->B[0][0];
01063                 }
01064         }
01065 
01066 
01067         SolidObject_compute_normals(hull);
01068         SolidObject_compute_normals(rSwimm);
01069         SolidObject_compute_normals(lSwimm);
01070         SolidObject_compute_normals(bridgeMain);
01071         SolidObject_compute_normals(bridge2);
01072 
01073         for (k=0;k<8;k++)//normals errors at junction...:
01074         {
01075                 hull->nX[k][0] = hull->nX[k][6];
01076                 hull->nX[k][8] = hull->nX[k][6];
01077                 hull->nY[k][0] =-hull->nY[k][6];
01078                 hull->nY[k][8] =-hull->nY[k][6];
01079                 hull->nZ[k][0] = hull->nZ[k][6];
01080                 hull->nZ[k][8] = hull->nZ[k][6];
01081 
01082                 rSwimm->nX[k][0] = rSwimm->nX[k][6];
01083                 rSwimm->nX[k][8] = rSwimm->nX[k][6];
01084                 rSwimm->nY[k][0] =-rSwimm->nY[k][6];
01085                 rSwimm->nY[k][8] =-rSwimm->nY[k][6];
01086                 rSwimm->nZ[k][0] = rSwimm->nZ[k][6];
01087                 rSwimm->nZ[k][8] = rSwimm->nZ[k][6];
01088 
01089                 lSwimm->nX[k][0] = lSwimm->nX[k][6];
01090                 lSwimm->nX[k][8] = lSwimm->nX[k][6];
01091                 lSwimm->nY[k][0] =-lSwimm->nY[k][6];
01092                 lSwimm->nY[k][8] =-lSwimm->nY[k][6];
01093                 lSwimm->nZ[k][0] = lSwimm->nZ[k][6];
01094                 lSwimm->nZ[k][8] = lSwimm->nZ[k][6];
01095         }
01096         // mast normals entered by hand
01097         // foils normals entered by hand
01098 }
01099 
01100  

Generated on Wed Sep 20 14:30:04 2006 for hydroSDL by  doxygen 1.4.7