⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fixedmath.h

📁 MiniGUI到ucOS-II的位图操作。通过该例子
💻 H
📖 第 1 页 / 共 2 页
字号:
      return (x < 0) ? -0x7FFFFFFF : 0x7FFFFFFF;   }   else      return ftofix(fixtof(x) / fixtof(y));}/** * \fn int fceil (fixed x) * \brief Rounds a fixed point value to the nearest integer. * * This function rounds the fixed point value \a x to the nearest integer * and returns it. * * \return The rounded integer value. */static inline int fceil (fixed x){   x += 0xFFFF;   if (x >= 0x80000000) {      errno = ERANGE;      return 0x7FFF;   }   return (x >> 16);}/** * \fn fixed itofix (int x) * \brief Converts an integer to a fixed point value. * * This function converts the integer \a x to a fixed point value. * * \sa fixtoi */static inline fixed itofix (int x){    return x << 16;}/** * \fn int fixtoi (fixed x) * \brief Converts an fixed point value to an integer. * * This function converts the fixed point \a x to an integer. * * \sa itofix */static inline int fixtoi (fixed x){    return (x >> 16) + ((x & 0x8000) >> 15);}/** * \fn fixed fcos (fixed x) * \brief Returns the cosine of a fixed point. * * This function returns the cosine of the fixed point \a x,  * where \a x is given in radians. * * \sa facos */static inline fixed fcos (fixed x){   return _cos_tbl[((x + 0x4000) >> 15) & 0x1FF];}/** * \fn fixed fsin (fixed x) * \brief Returns the sine of a fixed point. * * This function returns the sine of the fixed point \a x,  * where \a x is given in radians. * * \sa fasin */static inline fixed fsin (fixed x){    return _cos_tbl[((x - 0x400000 + 0x4000) >> 15) & 0x1FF];}/** * \fn fixed ftan (fixed x) * \brief Returns the tangent of a fixed point. * * This function returns the tangent of the fixed point \a x,  * where \a x is given in radians. * * \sa fcos, fsin */static inline fixed ftan (fixed x){    return _tan_tbl[((x + 0x4000) >> 15) & 0xFF];}/** * \fn fixed facos (fixed x) * \brief Calculates and returns the arc cosine of a fixed point. * * This function calculates the arc cosine of the fixed point \a x;  * that is the value whose cosine is \a x. If \a x falls outside * the range -1 to 1, this function fails and \a errno is set to EDOM. * * \return Returns the arc cosine in radians and the value is mathematically  *         defined to be between 0 and PI (inclusive). * * \sa fcos */static inline fixed facos (fixed x){   if ((x < -65536) || (x > 65536)) {      errno = EDOM;      return 0;   }   return _acos_tbl[(x+65536+127)>>8];}/** * \fn fixed fasin (fixed x) * \brief Calculates and returns the arc sine of a fixed point. * * This function calculates the arc sine of the fixed point \a x;  * that is the value whose sine is \a x. If \a x falls outside * the range -1 to 1, this function fails and \a errno is set to EDOM. * * \return Returns the arc sine in radians and the value is mathematically  *         defined to be between -PI/2 and PI/2 (inclusive). * * \sa fsin */static inline fixed fasin (fixed x){    if ((x < -65536) || (x > 65536)) {      errno = EDOM;      return 0;   }   return 0x00400000 - _acos_tbl[(x+65536+127)>>8];}    /** @} end of fixed_math_fns */#ifdef _MATH_3Dtypedef struct MATRIX            /* transformation matrix (fixed point) */{   fixed v[3][3];                /* scaling and rotation */   fixed t[3];                   /* translation */} MATRIX;typedef struct MATRIX_f          /* transformation matrix (floating point) */{   float v[3][3];                /* scaling and rotation */   float t[3];                   /* translation */} MATRIX_f;extern MATRIX identity_matrix;extern MATRIX_f identity_matrix_f;void get_translation_matrix (MATRIX *m, fixed x, fixed y, fixed z);void get_translation_matrix_f (MATRIX_f *m, float x, float y, float z);void get_scaling_matrix (MATRIX *m, fixed x, fixed y, fixed z);void get_scaling_matrix_f (MATRIX_f *m, float x, float y, float z);void get_x_rotate_matrix (MATRIX *m, fixed r);void get_x_rotate_matrix_f (MATRIX_f *m, float r);void get_y_rotate_matrix (MATRIX *m, fixed r);void get_y_rotate_matrix_f (MATRIX_f *m, float r);void get_z_rotate_matrix (MATRIX *m, fixed r);void get_z_rotate_matrix_f (MATRIX_f *m, float r);void get_rotation_matrix (MATRIX *m, fixed x, fixed y, fixed z);void get_rotation_matrix_f (MATRIX_f *m, float x, float y, float z);void get_align_matrix (MATRIX *m, fixed xfront, fixed yfront, fixed zfront, fixed xup, fixed yup, fixed zup);void get_align_matrix_f (MATRIX_f *m, float xfront, float yfront, float zfront, float xup, float yup, float zup);void get_vector_rotation_matrix (MATRIX *m, fixed x, fixed y, fixed z, fixed a);void get_vector_rotation_matrix_f (MATRIX_f *m, float x, float y, float z, float a);void get_transformation_matrix (MATRIX *m, fixed scale, fixed xrot, fixed yrot, fixed zrot, fixed x, fixed y, fixed z);void get_transformation_matrix_f (MATRIX_f *m, float scale, float xrot, float yrot, float zrot, float x, float y, float z);void get_camera_matrix (MATRIX *m, fixed x, fixed y, fixed z, fixed xfront, fixed yfront, fixed zfront,                 fixed xup, fixed yup, fixed zup, fixed fov, fixed aspect);void get_camera_matrix_f (MATRIX_f *m, float x, float y, float z, float xfront, float yfront, float zfront,                 float xup, float yup, float zup, float fov, float aspect);void qtranslate_matrix (MATRIX *m, fixed x, fixed y, fixed z);void qtranslate_matrix_f (MATRIX_f *m, float x, float y, float z);void qscale_matrix (MATRIX *m, fixed scale);void qscale_matrix_f (MATRIX_f *m, float scale);void matrix_mul (AL_CONST MATRIX *m1, AL_CONST MATRIX *m2, MATRIX *out);void matrix_mul_f (AL_CONST MATRIX_f *m1, AL_CONST MATRIX_f *m2, MATRIX_f *out);fixed vector_length (fixed x, fixed y, fixed z);float vector_length_f (float x, float y, float z);void normalize_vector (fixed *x, fixed *y, fixed *z);void normalize_vector_f (float *x, float *y, float *z);void cross_product (fixed x1, fixed y1, fixed z1, fixed x2, fixed y2, fixed z2, fixed *xout, fixed *yout, fixed *zout);void cross_product_f (float x1, float y1, float z1, float x2, float y2, float z2, float *xout, float *yout, float *zout);fixed polygon_z_normal (AL_CONST V3D *v1, AL_CONST V3D *v2, AL_CONST V3D *v3);float polygon_z_normal_f (AL_CONST V3D_f *v1, AL_CONST V3D_f *v2, AL_CONST V3D_f *v3);void apply_matrix_f (AL_CONST MATRIX_f *m, float x, float y, float z, float *xout, float *yout, float *zout);extern fixed _persp_xscale;extern fixed _persp_yscale;extern fixed _persp_xoffset;extern fixed _persp_yoffset;extern float _persp_xscale_f;extern float _persp_yscale_f;extern float _persp_xoffset_f;extern float _persp_yoffset_f;void set_projection_viewport (int x, int y, int w, int h);typedef struct QUAT{   float w, x, y, z;} QUAT;extern QUAT, identity_quat;void quat_mul (AL_CONST QUAT *p, AL_CONST QUAT *q, QUAT *out)void get_x_rotate_quat (QUAT *q, float r);void get_y_rotate_quat (QUAT *q, float r);void get_z_rotate_quat (QUAT *q, float r);void get_rotation_quat (QUAT *q, float x, float y, float z);void get_vector_rotation_quat (QUAT *q, float x, float y, float z, float a);void quat_to_matrix (AL_CONST QUAT *q, MATRIX_f *m);void matrix_to_quat (AL_CONST MATRIX_f *m, QUAT *q);void apply_quat (AL_CONST QUAT *q, float x, float y, float z, float *xout, float *yout, float *zout);void quat_slerp (AL_CONST QUAT *from, AL_CONST QUAT *to, float t, QUAT *out, int how);#define QUAT_SHORT   0#define QUAT_LONG    1#define QUAT_CW      2#define QUAT_CCW     3#define QUAT_USER    4#define quat_interpolate(from, to, t, out)   quat_slerp((from), (to), (t), (out), QUAT_SHORT)static inline fixed dot_product (fixed x1, fixed y1, fixed z1, fixed x2, fixed y2, fixed z2){   return fmul(x1, x2) + fmul(y1, y2) + fmul(z1, z2);}static inline float dot_product_f (float x1, float y1, float z1, float x2, float y2, float z2){   return (x1 * x2) + (y1 * y2) + (z1 * z2);}#define CALC_ROW(n)     (fmul(x, m->v[n][0]) +        \                         fmul(y, m->v[n][1]) +        \                         fmul(z, m->v[n][2]) +        \                         m->t[n])static inline void apply_matrix (MATRIX *m, fixed x, fixed y, fixed z, fixed *xout, fixed *yout, fixed *zout){   *xout = CALC_ROW(0);   *yout = CALC_ROW(1);   *zout = CALC_ROW(2);}#undef CALC_ROWstatic inline void persp_project (fixed x, fixed y, fixed z, fixed *xout, fixed *yout){   *xout = fmul(fdiv(x, z), _persp_xscale) + _persp_xoffset;   *yout = fmul(fdiv(y, z), _persp_yscale) + _persp_yoffset;}static inline void persp_project_f (float x, float y, float z, float *xout, float *yout){   float z1 = 1.0f / z;   *xout = ((x * z1) * _persp_xscale_f) + _persp_xoffset_f;   *yout = ((y * z1) * _persp_yscale_f) + _persp_yoffset_f;}#endif /* _MATH_3D */    /** @} end of global_fns */    /** @} end of fns */#endif /* _FIXED_MATH *//* Ends C function definitions when using C++ */#ifdef __cplusplus}#endif#endif /* _MGUI_FIXED_MATH_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -