0

Hi,

I would like to define a function, but I get errors... What's wrong with this?

#include <cstdlib> 
#include <fstream>
#include <iostream>
#include <ctime>
#include <cmath>

#define N 5
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 RotMatrixX[3][3] = {
                             {1.0f, 0.0f, 0.0f},
                             {0.0f, cosf(epsilon), -sinf(epsilon)},
                             {0.0f, sinf(epsilon), cosf(epsilon)}
                             };
    
    float RotMatrixY[3][3] = {
                             {cosf(epsilon), 0.0f, sinf(epsilon)},
                             {0.0f, 1.0f, 0.0f},
                             {-sinf(epsilon), 0.0f, cosf(epsilon)}
                             };
    
    float RotMatrixZ[3][3] = {
                             {cosf(epsilon), -sinf(epsilon), 0.0f},
                             {sinf(epsilon), cosf(epsilon), 0.0f},
                             {0.0f, 0.0f, 1.0f}
                             };

    vector vec[N];
    rotvector rvec[N];
    
    // 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 += RotMatrixX[i][k] * vec[k];
              rvec[i] = RvX;
          }
    }
    return RvX;
    }


// main() function
int main(void)
{
    srand ( time(NULL) );  // initialize random seed
    
    for (int 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;
        
        // call rand to get a value 0, 1, or 2 and use a switch statement
        int n = rand() % 3;
        
        switch(n)
        {
            case 0:
                cout << "Case 0" << endl;
                break;
            case 1:
                cout << "Case 1" << endl;
                break;
            case 2:
                cout << "Case 2" << endl;
                break;
        }
    }
 
   system("pause");
// end main() function
    return 0; 
}

ERRORS:

simple.cpp: In function `float RotateX(float, float (*)[3], vector*, rotvector*)':
simple.cpp:60: error: no match for 'operator*' in 'RotMatrixX[i][k] * *((+(((unsigned int)k) * 12u)) + vec)'
simple.cpp:61: error: no match for 'operator=' in '*((+(((unsigned int)i) * 12u)) + rvec) = RvX'
2
Contributors
1
Reply
2
Views
9 Years
Discussion Span
Last Post by Narue
0

You have a type mismatch:

RvX += RotMatrixX[i][k] * vec[k];
rvec[i] = RvX;

In the first line, vec[k] is a vector, not a float. There's no defined conversion from vector to float in your code, and you don't define a specific operator* to handle (float * vector). Most likely you wanted to use a member of the vector:

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

In the second line, you try to assign a float to a vector, which once again, is not a defined conversion. Perhaps you meant to assign to a single member of the vector:

rvec[i].x = RvX;
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.