Kezdőlap › Fórumok › Programozás › C++ kerdes…
- This topic has 63 hozzászólás, 7 résztvevő, and was last updated 17 years, 2 months telt el by
pointux.
-
SzerzőBejegyzés
-
2008-03-09-19:31 #2155460
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;
}2008-03-09-19:31 #2155461Udv,
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;
}2008-03-09-21:11 #2155462jules 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?
2008-03-09-21:11 #2155463jules 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?
2008-03-09-22:02 #2155464Tenyleg 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]
2008-03-09-22:02 #2155465Tenyleg 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]
2008-03-09-22:16 #2155466jules 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 ‘=’ tokenMondtam 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 fileMas szamu / tipusu parameterrel akarod hasznalni a fuggvenyt, mint ahogy ertelmezted.
2008-03-09-22:16 #2155467jules 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 ‘=’ tokenMondtam 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 fileMas szamu / tipusu parameterrel akarod hasznalni a fuggvenyt, mint ahogy ertelmezted.
2008-03-10-20:28 #2155468Lenne 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?
2008-03-10-20:28 #2155469Lenne 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?
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz