Hozzászólások
-
SzerzőBejegyzés
-
huh, expliciten/kodban le irnad ide, hogy mire gondolsz!
huh, expliciten/kodban le irnad ide, hogy mire gondolsz!
Amugy, hogyan kellene definialni egy ilyen (float * vector) muveletet?
Amit irtam fent, az nem jo szerintem, mert csak a vector x komponensevel szorozza a matrixot, nem?
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?
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?
Tenyleg nem ertem, hogy hol a hiba…
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 seedfor(int i=0; i < N; i++ )
{
r[I] = rand() % 3 + 0; // generate numbers: 0 or 1 or 2switch ( 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 ‘=’ tokenrotrot.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]
Tenyleg nem ertem, hogy hol a hiba…
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 seedfor(int i=0; i < N; i++ )
{
r[I] = rand() % 3 + 0; // generate numbers: 0 or 1 or 2switch ( 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 ‘=’ tokenrotrot.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]
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;
}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;
}Átírtam a „switch” szerkezetes részben, float RotmatrixX()…stb-re a fuggvényeket. Ekkor ilyenek ír ki hibának:
a „function-definition” az, ahol definialtam a fenti fuggvenyeket.
Code:rot.cpp: In function ‘int main()’:
rot.cpp:252: error: a function-definition is not allowed here before ‘{’ token
rot:266: error: a function-definition is not allowed here before ‘{’ token
rot:280: error: a function-definition is not allowed here before ‘{’ token
rot:304: error: expected unqualified-id before ‘[’ token
rot:307: error: expected primary-expression before ‘[’ tokenMost mi legyen?
-
SzerzőBejegyzés
legutóbbi hsz