18. maj 2005 - 09:23
Der er
7 kommentarer
Sinus og cosinus som preprocessor direktiver?
Jeg er ved at skrive et program, der udregner en matrice, der er produktet af 4-5 andre matricer.
Jeg definerer de enkelte matricer således:
Matrix M1 =
{{ 1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1}};
Det fungerer også fint når jeg skal gange dem med min matrixfunktion.
Problemet opstår når jeg skal lave en rotationsmatrix, hvor flere af cellerne er sinus eller cosinus udtryk. Eg.
Matrix M1 =
{{ sin(a), 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1}};
Det duer ikke, da sinus ikke er et preprocessor "ord".
Hvad kan jeg gøre?
Prøv at lave et lille program, der udskriver din ønskede matrix i en fil;
så kan du indlæse dette i din editor, og bruge det til at initialisere din matrix - hvis du har en fast matrix, ellers er du nødt til, som du skriver, at gøre det runtime
Jeg vil mene at du ER nødt til at initialisere sin- og cos-elementer ved runtime. Hvis compileren skulle være i stand til at initialisere disse elementer skulle den jo kalde funktionerne sin() og cos(), og den slags duer ikke på ved compile time.
Hvis det er vigtigt at initialisere dem til noget meningsfuldt så kan du jo "hard-code" nogle konstanter ind i programmet vha defines, den slags kan være pænt nok (f.eks. #define SIN_PI_SQUARED 0.17xxx)