C++ kerdes…

Kezdőlap Fórumok Programozás C++ kerdes…

10 bejegyzés megtekintése - 21-30 / 64
  • Szerző
    Bejegyzés
  • #2155460
    jules
    Felhasználó

      Udv,

      kijavitottam amiket irtal, de igy nekem meg tobb hibat ir a fuggvenyes reszekre…

      Igy definialtam es a deklaraciban is ezeket a parametereket irtam:

      Code:
      // ROT AROUND ‘X’
          float RotateX(double RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]){

      for (int i = 0; i < 3; i++)
      {
      RvX = 0;
      for (int k = 0; k < 3; k++)
      RvX += RotMatrixX[i][k] * vec[k];
      rvec[i] = RvX;
      }

          return RvX;
          }

      #2155461
      jules
      Felhasználó

        Udv,

        kijavitottam amiket irtal, de igy nekem meg tobb hibat ir a fuggvenyes reszekre…

        Igy definialtam es a deklaraciban is ezeket a parametereket irtam:

        Code:
        // ROT AROUND ‘X’
            float RotateX(double RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]){

        for (int i = 0; i < 3; i++)
        {
        RvX = 0;
        for (int k = 0; k < 3; k++)
        RvX += RotMatrixX[i][k] * vec[k];
        rvec[i] = RvX;
        }

            return RvX;
            }

        #2155462
        kisbetu
        Felhasználó
          jules wrote:
          Udv,

          kijavitottam amiket irtal, de igy nekem meg tobb hibat ir a fuggvenyes reszekre…

          Igy definialtam es a deklaraciban is ezeket a parametereket irtam:

          Code:
          // ROT AROUND ‘X’
          float RotateX(double RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]){
             
              for (int i = 0; i < 3; i++)
              {
              RvX = 0;
              for (int k = 0; k < 3; k++)
              RvX += RotMatrixX[I][k] * vec[k];
              rvec[I] = RvX;
              }

          return RvX;
          }

          Nem értek hozzá, de egy floatra definiált függvény miért ad vissza double értéket?

          #2155463
          kisbetu
          Felhasználó
            jules wrote:
            Udv,

            kijavitottam amiket irtal, de igy nekem meg tobb hibat ir a fuggvenyes reszekre…

            Igy definialtam es a deklaraciban is ezeket a parametereket irtam:

            Code:
            // ROT AROUND ‘X’
            float RotateX(double RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]){
               
                for (int i = 0; i < 3; i++)
                {
                RvX = 0;
                for (int k = 0; k < 3; k++)
                RvX += RotMatrixX[I][k] * vec[k];
                rvec[I] = RvX;
                }

            return RvX;
            }

            Nem értek hozzá, de egy floatra definiált függvény miért ad vissza double értéket?

            #2155464
            jules
            Felhasználó

              Tenyleg nem ertem, hogy hol a hiba…102.gif 

              Itt a kód:

              Code:
              #include
              #include
              #include
              #include
              #include

              #define N 5000
              using namespace std;

              const float M_2PIf = 6.283185307179586476925286766559f;
              const float M_PIf  = 3.141592653589793238462643383279f;
              const float epsilon = M_PIf/(1e-06f);

              /* —————–RANDOM_GENERATOR——————————- */

              float rand(float min, float max)
              {
                  return min + (max – min) * rand() / (float)RAND_MAX;
              }

              //*********************************
              struct vector { // random vector before the rotation
              float x,y,z;
              };

              struct rotvector { // random vector after the rotation
              float x,y,z;
              };
              //*********************************

              //  >>>>>>>>> ROTATION <<<<<<<<<<<

                  float fCos, fSin;
                  fCos = cosf(epsilon);
                  fSin = sinf(epsilon);

                  float RotMatrixX[3][3] = {1.0f, 0.0f, 0.0f, 0.0f, fCos, -fSin, 0.0f, fSin, fCos};
                  float RotMatrixY[3][3] = {fCos, 0.0f, fSin, 0.0f, 1.0f, 0.0f, -fSin, 0.0f, fCos};
                  float RotMatrixZ[3][3] = {fCos, -fSin, 0.0f, fSin, fCos, 0.0f, 0.0f, 0.0f, 1.0f};

                  vector vec[N];
                  rotvector rvec[N];

                  // ROT AROUND 'X'
                  float RotateX(float RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]){

              for (int i = 0; i < 3; i++)
              {
              RvX = 0;
              for (int k = 0; k < 3; k++)
              RvX += RotMatrixX[I][k] * vec[k];
              rvec[I] = RvX;
              }

                  return RvX;
                  }

                  // ROT AROUND 'Y'
                  float RotateY(float RvY, float RotMatrixY[][3], vector vec[], rotvector rvec[]){

              for (int i = 0; i < 3; i++)
              {
              RvY = 0;
              for (int k = 0; k < 3; k++)
              RvY += RotMatrixY[I][k] * vec[k];
              rvec[I] = RvY;
              }

                  return RvY;
                  }

                  // ROT AROUND 'Z'
                  float RotateZ(float RvZ, float RotMatrixZ[][3], vector vec[], rotvector rvec[]){

              for (int i = 0; i < 3; i++)
              {
              RvZ = 0;
              for (int k = 0; k < 3; k++)
              RvZ += RotMatrixZ[I][k] * vec[k];
              rvec[I] = RvZ;
              }

                  return RvZ;
                  }

              // MAIN function
              int main(void) {

                  int i;

                  float RotateX(float RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]);
                  float RotateY(float RvY, float RotMatrixY[][3], vector vec[], rotvector rvec[]);
                  float RotateZ(float RvZ, float RotMatrixZ[][3], vector vec[], rotvector rvec[]);

                  // Initialize the random number generator
                  // srand(time(0));
                  for (i = 0; i < N; i++) {

                  float phi  = rand(0.0f, M_2PIf);
                  float costheta = rand(-1.0f, 1.0f);

                  float x = 1.0f * sqrtf(1-costheta*costheta) * cosf(phi);
                  float y = 1.0f * sqrtf(1-costheta*costheta) * sinf(phi);
                  float z = 1.0f * costheta;

                  // store the initial vector
                  vec[I].x = x;
                  vec[I].y = y;
                  vec[I].z = z;
                  // store the rotated vector
                  rvec[I].x = x;
                  rvec[I].y = y;
                  rvec[I].z = z;

              //*********************************

                  typedef int r[I];
                  srand ( time(NULL) );  // initialize random seed

                  for(int i=0; i < N; i++ )
                  { 
                  r[I] = rand() % 3 + 0;  // generate numbers: 0 or 1 or 2

              switch ( r[I] )

                { 
                case 0:
              RotateX();
              break;
                case 1:
              RotateY();
              break;
                case 2:
              RotateZ();
              break;
                }

                  }

              }

              return 0;
              }

              es ezek az errorok:

              Code:
              rotrot.cpp:34: error: expected constructor, destructor, or type conversion before ‘=’ token
              rotrot.cpp:34: error: expected `,’ or `;’ before ‘=’ token
              rotrot.cpp:35: error: expected constructor, destructor, or type conversion before ‘=’ token
              rotrot.cpp:35: error: expected `,’ or `;’ before ‘=’ token

              rotrot.cpp: In function `float RotateX(float, float (*)[3], vector*, rotvector*)’:
              rotrot.cpp:51: error: no match for ‘operator*’ in ‘*((((((unsigned int)i) * 3) + ((unsigned int)k)) * 4u) + ((float*)RotMatrixX)) * *((+(((unsigned int)k) * 12u)) + vec)’
              rotrot.cpp:52: error: no match for ‘operator=’ in ‘*((+(((unsigned int)i) * 12u)) + rvec) = RvX’
              rotrot.cpp:26: note: candidates are: rotvector& rotvector::operator=(const rotvector&)
              rotrot.cpp: In function `float RotateY(float, float (*)[3], vector*, rotvector*)’:
              rotrot.cpp:65: error: no match for ‘operator*’ in ‘*((((((unsigned int)i) * 3) + ((unsigned int)k)) * 4u) + ((float*)RotMatrixY)) * *((+(((unsigned int)k) * 12u)) + vec)’

              rotrot.cpp:66: error: no match for ‘operator=’ in ‘*((+(((unsigned int)i) * 12u)) + rvec) = RvY’
              rotrot.cpp:26: note: candidates are: rotvector& rotvector::operator=(const rotvector&)

              rotrot.cpp: In function `float RotateZ(float, float (*)[3], vector*, rotvector*)’:
              rotrot.cpp:79: error: no match for ‘operator*’ in ‘*((((((unsigned int)i) * 3) + ((unsigned int)k)) * 4u) + ((float*)RotMatrixZ)) * *((+(((unsigned int)k) * 12u)) + vec)’
              otrot.cpp:80: error: no match for ‘operator=’ in ‘*((+(((unsigned int)i) * 12u)) + rvec) = RvZ’
              rotrot.cpp:26: note: candidates are: rotvector& rotvector::operator=(const rotvector&)

              rotrot.cpp: In function `int main()’:

              rotrot.cpp:124: error: expected primary-expression before ‘[‘ token
              rotrot.cpp:127: error: expected primary-expression before ‘[‘ token
              rotrot.cpp:92: error: too few arguments to function `float RotateX(float, float (*)[3], vector*, rotvector*)’
              rotrot.cpp:131: error: at this point in file
              rotrot.cpp:93: error: too few arguments to function `float RotateY(float, float (*)[3], vector*, rotvector*)’
              rotrot.cpp:134: error: at this point in file
              rotrot.cpp:94: error: too few arguments to function `float RotateZ(float, float (*)[3], vector*, rotvector*)’
              rotrot.cpp:137: error: at this point in file

              [/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]

              #2155465
              jules
              Felhasználó

                Tenyleg nem ertem, hogy hol a hiba…102.gif 

                Itt a kód:

                Code:
                #include
                #include
                #include
                #include
                #include

                #define N 5000
                using namespace std;

                const float M_2PIf = 6.283185307179586476925286766559f;
                const float M_PIf  = 3.141592653589793238462643383279f;
                const float epsilon = M_PIf/(1e-06f);

                /* —————–RANDOM_GENERATOR——————————- */

                float rand(float min, float max)
                {
                    return min + (max – min) * rand() / (float)RAND_MAX;
                }

                //*********************************
                struct vector { // random vector before the rotation
                float x,y,z;
                };

                struct rotvector { // random vector after the rotation
                float x,y,z;
                };
                //*********************************

                //  >>>>>>>>> ROTATION <<<<<<<<<<<

                    float fCos, fSin;
                    fCos = cosf(epsilon);
                    fSin = sinf(epsilon);

                    float RotMatrixX[3][3] = {1.0f, 0.0f, 0.0f, 0.0f, fCos, -fSin, 0.0f, fSin, fCos};
                    float RotMatrixY[3][3] = {fCos, 0.0f, fSin, 0.0f, 1.0f, 0.0f, -fSin, 0.0f, fCos};
                    float RotMatrixZ[3][3] = {fCos, -fSin, 0.0f, fSin, fCos, 0.0f, 0.0f, 0.0f, 1.0f};

                    vector vec[N];
                    rotvector rvec[N];

                    // ROT AROUND 'X'
                    float RotateX(float RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]){

                for (int i = 0; i < 3; i++)
                {
                RvX = 0;
                for (int k = 0; k < 3; k++)
                RvX += RotMatrixX[I][k] * vec[k];
                rvec[I] = RvX;
                }

                    return RvX;
                    }

                    // ROT AROUND 'Y'
                    float RotateY(float RvY, float RotMatrixY[][3], vector vec[], rotvector rvec[]){

                for (int i = 0; i < 3; i++)
                {
                RvY = 0;
                for (int k = 0; k < 3; k++)
                RvY += RotMatrixY[I][k] * vec[k];
                rvec[I] = RvY;
                }

                    return RvY;
                    }

                    // ROT AROUND 'Z'
                    float RotateZ(float RvZ, float RotMatrixZ[][3], vector vec[], rotvector rvec[]){

                for (int i = 0; i < 3; i++)
                {
                RvZ = 0;
                for (int k = 0; k < 3; k++)
                RvZ += RotMatrixZ[I][k] * vec[k];
                rvec[I] = RvZ;
                }

                    return RvZ;
                    }

                // MAIN function
                int main(void) {

                    int i;

                    float RotateX(float RvX, float RotMatrixX[][3], vector vec[], rotvector rvec[]);
                    float RotateY(float RvY, float RotMatrixY[][3], vector vec[], rotvector rvec[]);
                    float RotateZ(float RvZ, float RotMatrixZ[][3], vector vec[], rotvector rvec[]);

                    // Initialize the random number generator
                    // srand(time(0));
                    for (i = 0; i < N; i++) {

                    float phi  = rand(0.0f, M_2PIf);
                    float costheta = rand(-1.0f, 1.0f);

                    float x = 1.0f * sqrtf(1-costheta*costheta) * cosf(phi);
                    float y = 1.0f * sqrtf(1-costheta*costheta) * sinf(phi);
                    float z = 1.0f * costheta;

                    // store the initial vector
                    vec[I].x = x;
                    vec[I].y = y;
                    vec[I].z = z;
                    // store the rotated vector
                    rvec[I].x = x;
                    rvec[I].y = y;
                    rvec[I].z = z;

                //*********************************

                    typedef int r[I];
                    srand ( time(NULL) );  // initialize random seed

                    for(int i=0; i < N; i++ )
                    { 
                    r[I] = rand() % 3 + 0;  // generate numbers: 0 or 1 or 2

                switch ( r[I] )

                  { 
                  case 0:
                RotateX();
                break;
                  case 1:
                RotateY();
                break;
                  case 2:
                RotateZ();
                break;
                  }

                    }

                }

                return 0;
                }

                es ezek az errorok:

                Code:
                rotrot.cpp:34: error: expected constructor, destructor, or type conversion before ‘=’ token
                rotrot.cpp:34: error: expected `,’ or `;’ before ‘=’ token
                rotrot.cpp:35: error: expected constructor, destructor, or type conversion before ‘=’ token
                rotrot.cpp:35: error: expected `,’ or `;’ before ‘=’ token

                rotrot.cpp: In function `float RotateX(float, float (*)[3], vector*, rotvector*)’:
                rotrot.cpp:51: error: no match for ‘operator*’ in ‘*((((((unsigned int)i) * 3) + ((unsigned int)k)) * 4u) + ((float*)RotMatrixX)) * *((+(((unsigned int)k) * 12u)) + vec)’
                rotrot.cpp:52: error: no match for ‘operator=’ in ‘*((+(((unsigned int)i) * 12u)) + rvec) = RvX’
                rotrot.cpp:26: note: candidates are: rotvector& rotvector::operator=(const rotvector&)
                rotrot.cpp: In function `float RotateY(float, float (*)[3], vector*, rotvector*)’:
                rotrot.cpp:65: error: no match for ‘operator*’ in ‘*((((((unsigned int)i) * 3) + ((unsigned int)k)) * 4u) + ((float*)RotMatrixY)) * *((+(((unsigned int)k) * 12u)) + vec)’

                rotrot.cpp:66: error: no match for ‘operator=’ in ‘*((+(((unsigned int)i) * 12u)) + rvec) = RvY’
                rotrot.cpp:26: note: candidates are: rotvector& rotvector::operator=(const rotvector&)

                rotrot.cpp: In function `float RotateZ(float, float (*)[3], vector*, rotvector*)’:
                rotrot.cpp:79: error: no match for ‘operator*’ in ‘*((((((unsigned int)i) * 3) + ((unsigned int)k)) * 4u) + ((float*)RotMatrixZ)) * *((+(((unsigned int)k) * 12u)) + vec)’
                otrot.cpp:80: error: no match for ‘operator=’ in ‘*((+(((unsigned int)i) * 12u)) + rvec) = RvZ’
                rotrot.cpp:26: note: candidates are: rotvector& rotvector::operator=(const rotvector&)

                rotrot.cpp: In function `int main()’:

                rotrot.cpp:124: error: expected primary-expression before ‘[‘ token
                rotrot.cpp:127: error: expected primary-expression before ‘[‘ token
                rotrot.cpp:92: error: too few arguments to function `float RotateX(float, float (*)[3], vector*, rotvector*)’
                rotrot.cpp:131: error: at this point in file
                rotrot.cpp:93: error: too few arguments to function `float RotateY(float, float (*)[3], vector*, rotvector*)’
                rotrot.cpp:134: error: at this point in file
                rotrot.cpp:94: error: too few arguments to function `float RotateZ(float, float (*)[3], vector*, rotvector*)’
                rotrot.cpp:137: error: at this point in file

                [/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]

                #2155466
                zoltan22
                Felhasználó
                  jules wrote:
                  Code:
                  const float epsilon = M_PIf/(1e-06f);
                  fCos = cosf(epsilon);
                  fSin = sinf(epsilon);

                  es ezek az errorok:

                  Code:
                  rotrot.cpp:34: error: expected constructor, destructor, or type conversion before ‘=’ token
                  rotrot.cpp:34: error: expected `,’ or `;’ before ‘=’ token
                  rotrot.cpp:35: error: expected constructor, destructor, or type conversion before ‘=’ token
                  rotrot.cpp:35: error: expected `,’ or `;’ before ‘=’ token

                  Mondtam mar, hogy minden futtathato programsor valamilyen fuggvenyen belul kell legyen?

                  Code:
                  rotrot.cpp:92: error: too few arguments to function `float RotateX(float, float (*)[3], vector*, rotvector*)’
                  rotrot.cpp:131: error: at this point in file
                  rotrot.cpp:93: error: too few arguments to function `float RotateY(float, float (*)[3], vector*, rotvector*)’
                  rotrot.cpp:134: error: at this point in file
                  rotrot.cpp:94: error: too few arguments to function `float RotateZ(float, float (*)[3], vector*, rotvector*)’
                  rotrot.cpp:137: error: at this point in file

                  Mas szamu / tipusu parameterrel akarod hasznalni a fuggvenyt, mint ahogy ertelmezted.

                  #2155467
                  zoltan22
                  Felhasználó
                    jules wrote:
                    Code:
                    const float epsilon = M_PIf/(1e-06f);
                    fCos = cosf(epsilon);
                    fSin = sinf(epsilon);

                    es ezek az errorok:

                    Code:
                    rotrot.cpp:34: error: expected constructor, destructor, or type conversion before ‘=’ token
                    rotrot.cpp:34: error: expected `,’ or `;’ before ‘=’ token
                    rotrot.cpp:35: error: expected constructor, destructor, or type conversion before ‘=’ token
                    rotrot.cpp:35: error: expected `,’ or `;’ before ‘=’ token

                    Mondtam mar, hogy minden futtathato programsor valamilyen fuggvenyen belul kell legyen?

                    Code:
                    rotrot.cpp:92: error: too few arguments to function `float RotateX(float, float (*)[3], vector*, rotvector*)’
                    rotrot.cpp:131: error: at this point in file
                    rotrot.cpp:93: error: too few arguments to function `float RotateY(float, float (*)[3], vector*, rotvector*)’
                    rotrot.cpp:134: error: at this point in file
                    rotrot.cpp:94: error: too few arguments to function `float RotateZ(float, float (*)[3], vector*, rotvector*)’
                    rotrot.cpp:137: error: at this point in file

                    Mas szamu / tipusu parameterrel akarod hasznalni a fuggvenyt, mint ahogy ertelmezted.

                    #2155468
                    jules
                    Felhasználó

                      Lenne egy kis gond…

                      Amikor definialom ezt a fuggvenyt:

                      Code:
                      // ROTATE AROUND ‘X’
                          float RotateX(float RvX, float RotmatrixX[][3], vector vec[], rotvector rvec[]){

                          for (int i = 0; i < 3; i++){
                      for (int k = 0; k < 3; k++){
                          RvX = 0.0f;
                          RvX += RotMatrixX[i][k] * vec[k];
                          rvec[i] = RvX;
                      }
                          }
                          return RvX;
                          }

                      akkor ez nyilvan nem jo, mert egy vector tipusu dolgot probalok float tipusuba konvertalni es a szorzas muvelete sincs definialva, hogy kezelheto legyen a (float * vector) muvelet.

                      Hogy lehetne ezt a problemat megoldani?

                      Persze irhatnam, hogy

                      Code:
                      RvX += RotMatrixX[i][k] * vec[k].x;
                      rvec[i].x = RvX;

                      de ez nem tul ertelmes, nem?

                      #2155469
                      jules
                      Felhasználó

                        Lenne egy kis gond…

                        Amikor definialom ezt a fuggvenyt:

                        Code:
                        // ROTATE AROUND ‘X’
                            float RotateX(float RvX, float RotmatrixX[][3], vector vec[], rotvector rvec[]){

                            for (int i = 0; i < 3; i++){
                        for (int k = 0; k < 3; k++){
                            RvX = 0.0f;
                            RvX += RotMatrixX[i][k] * vec[k];
                            rvec[i] = RvX;
                        }
                            }
                            return RvX;
                            }

                        akkor ez nyilvan nem jo, mert egy vector tipusu dolgot probalok float tipusuba konvertalni es a szorzas muvelete sincs definialva, hogy kezelheto legyen a (float * vector) muvelet.

                        Hogy lehetne ezt a problemat megoldani?

                        Persze irhatnam, hogy

                        Code:
                        RvX += RotMatrixX[i][k] * vec[k].x;
                        rvec[i].x = RvX;

                        de ez nem tul ertelmes, nem?

                      10 bejegyzés megtekintése - 21-30 / 64
                      • Be kell jelentkezni a hozzászóláshoz.