int main(int ac, char** av) { #if 1 { fixed_t fu = float_to_fixed(1.2); fixed_t bar = float_to_fixed(2.4); fixed_t baz = fixed_add(fu, bar); printf("%f + ", fixed_to_float(fu)); printf("%f = ", fixed_to_float(bar)); printf("%f\n", fixed_to_float(baz)); } { fixed_t fu = float_to_fixed(1.5); fixed_t bar = int_to_fixed(2); fixed_t baz = fixed_mul(fu, bar); printf("%f * ", fixed_to_float(fu)); printf("%f = ", fixed_to_float(bar)); printf("%f\n", fixed_to_float(baz)); } { fixed_t fu = int_to_fixed(1); fixed_t bar = int_to_fixed(2); fixed_t baz = fixed_div(fu, bar); printf("%f / ", fixed_to_float(fu)); printf("%f = ", fixed_to_float(bar)); printf("%f\n", fixed_to_float(baz)); } { fixed_t fu = int_to_fixed(-1); fixed_t bar = int_to_fixed(2); fixed_t baz = fixed_div(fu, bar); printf("%f / ", fixed_to_float(fu)); printf("%f = ", fixed_to_float(bar)); printf("%f\n", fixed_to_float(baz)); } #endif #if 0 { fixed_t alpha = float_to_fixed(0.0); fixed_t step = float_to_fixed(0.01); for (; alpha < FIXED_TWO_PI; alpha = fixed_add(alpha, step)) { printf("%f ", fixed_to_float(alpha)); printf("%f\n", fabsf(sinf(fixed_to_float(alpha)) - fixed_to_float(fixed_sin(alpha)))); } } #endif return 0; }
void mat44_euler_rot(mat44 *m, fixed yaw, fixed pitch, fixed roll) { fixed sb = fixed_sin(yaw), cb = fixed_cos(yaw), sa = fixed_sin(pitch), ca = fixed_cos(pitch), sc = fixed_sin(roll), cc = fixed_cos(roll); fixed a00 = fixed_mul(cc, cb), a01 = fixed_mul(-cb, sc), a02 = sb, a10 = fixed_mul3(sa, sb, cc) + fixed_mul(ca, sc), a11 = fixed_mul3(-sa, sb, sc) + fixed_mul(ca, cc), a12 = fixed_mul(-sa, cb), a20 = fixed_mul3(-ca, sb, cc) + fixed_mul(sa, sc), a21 = fixed_mul3(ca, sb, sc) + fixed_mul(sa, cc), a22 = fixed_mul(ca, cb); mat44_set(m, a00, a01, a02, 0, a10, a11, a12, 0, a20, a21, a22, 0, 0 , 0 , 0 , FIXED_ONE); }
void mat44_axis_rot(mat44 *m, vec3 *axis, fixed angle) { fixed ca = fixed_cos(angle), sa = fixed_sin(angle); fixed nca = FIXED_ONE - ca; fixed a00 = ca + fixed_mul3(axis->x, axis->x, nca), a01 = fixed_mul3(axis->x, axis->y, nca) - fixed_mul(axis->z, sa), a02 = fixed_mul3(axis->x, axis->z, nca) + fixed_mul(axis->y, sa), a10 = fixed_mul3(axis->y, axis->x, nca) + fixed_mul(axis->z, sa), a11 = ca + fixed_mul3(axis->y, axis->y, nca), a12 = fixed_mul3(axis->y, axis->z, nca) - fixed_mul(axis->x, sa), a20 = fixed_mul3(axis->z, axis->x, nca) - fixed_mul(axis->y, sa), a21 = fixed_mul3(axis->z, axis->y, nca) + fixed_mul(axis->x, sa), a22 = ca + fixed_mul3(axis->z, axis->z, nca); mat44_set(m, a00, a01, a02, 0, a10, a11, a12, 0, a20, a21, a22, 0, 0 , 0 , 0 , FIXED_ONE); }