Blender V2.61 - r43446
Classes | Defines | Typedefs | Functions | Variables

math_rotation.c File Reference

#include <assert.h>
#include "BLI_math.h"

Go to the source code of this file.

Classes

struct  RotOrderInfo

Defines

#define QUAT_EPSILON   0.0001
#define GET_ROTATIONORDER_INFO(order)   (assert(order>=0 && order<=6), (order < 1) ? &rotOrders[0] : &rotOrders[(order)-1])

Typedefs

typedef struct RotOrderInfo RotOrderInfo

Functions

void unit_axis_angle (float axis[3], float *angle)
void unit_qt (float q[4])
void copy_qt_qt (float q1[4], const float q2[4])
int is_zero_qt (float *q)
void mul_qt_qtqt (float *q, const float *q1, const float *q2)
void mul_qt_v3 (const float *q, float *v)
void conjugate_qt (float *q)
float dot_qtqt (const float q1[4], const float q2[4])
void invert_qt (float *q)
void invert_qt_qt (float *q1, const float *q2)
void mul_qt_fl (float *q, const float f)
void sub_qt_qtqt (float q[4], const float q1[4], const float q2[4])
void mul_fac_qt_fl (float *q, const float fac)
static void quat_to_mat3_no_error (float m[][3], const float q[4])
void quat_to_mat3 (float m[][3], const float q[4])
void quat_to_mat4 (float m[][4], const float q[4])
void mat3_to_quat (float *q, float wmat[][3])
void mat4_to_quat (float *q, float m[][4])
void mat3_to_quat_is_ok (float q[4], float wmat[3][3])
float normalize_qt (float *q)
float normalize_qt_qt (float r[4], const float q[4])
void rotation_between_vecs_to_quat (float *q, const float v1[3], const float v2[3])
void rotation_between_quats_to_quat (float *q, const float q1[4], const float q2[4])
void vec_to_quat (float q[4], const float vec[3], short axis, const short upflag)
void interp_qt_qtqt (float result[4], const float quat1[4], const float quat2[4], const float t)
void add_qt_qtqt (float result[4], const float quat1[4], const float quat2[4], const float t)
void tri_to_quat (float quat[4], const float v1[3], const float v2[3], const float v3[3])
void print_qt (const char *str, const float q[4])
void axis_angle_to_quat (float q[4], const float axis[3], float angle)
void quat_to_axis_angle (float axis[3], float *angle, const float q[4])
void axis_angle_to_eulO (float eul[3], const short order, const float axis[3], const float angle)
void eulO_to_axis_angle (float axis[3], float *angle, const float eul[3], const short order)
void axis_angle_to_mat3 (float mat[3][3], const float axis[3], const float angle)
void axis_angle_to_mat4 (float mat[4][4], const float axis[3], const float angle)
void mat3_to_axis_angle (float axis[3], float *angle, float mat[3][3])
void mat4_to_axis_angle (float axis[3], float *angle, float mat[4][4])
void single_axis_angle_to_mat3 (float mat[3][3], const char axis, const float angle)
void vec_rot_to_mat3 (float mat[][3], const float vec[3], const float phi)
void vec_rot_to_mat4 (float mat[][4], const float vec[3], const float phi)
void vec_rot_to_quat (float *quat, const float vec[3], const float phi)
void eul_to_mat3 (float mat[][3], const float eul[3])
void eul_to_mat4 (float mat[][4], const float eul[3])
static void mat3_to_eul2 (float tmat[][3], float eul1[3], float eul2[3])
void mat3_to_eul (float *eul, float tmat[][3])
void mat4_to_eul (float *eul, float tmat[][4])
void quat_to_eul (float *eul, const float quat[4])
void eul_to_quat (float *quat, const float eul[3])
void rotate_eul (float *beul, const char axis, const float ang)
void compatible_eul (float eul[3], const float oldrot[3])
void mat3_to_compatible_eul (float eul[3], const float oldrot[3], float mat[][3])
void eulO_to_quat (float q[4], const float e[3], const short order)
void quat_to_eulO (float e[3], short const order, const float q[4])
void eulO_to_mat3 (float M[3][3], const float e[3], const short order)
static void mat3_to_eulo2 (float M[3][3], float *e1, float *e2, short order)
void eulO_to_mat4 (float M[4][4], const float e[3], const short order)
void mat3_to_eulO (float eul[3], const short order, float M[3][3])
void mat4_to_eulO (float e[3], const short order, float M[4][4])
void mat3_to_compatible_eulO (float eul[3], float oldrot[3], short order, float mat[3][3])
void mat4_to_compatible_eulO (float eul[3], float oldrot[3], short order, float M[4][4])
void rotate_eulO (float beul[3], short order, char axis, float ang)
void eulO_to_gimbal_axis (float gmat[][3], const float eul[3], const short order)
void mat4_to_dquat (DualQuat *dq, float basemat[][4], float mat[][4])
void dquat_to_mat4 (float mat[][4], DualQuat *dq)
void add_weighted_dq_dq (DualQuat *dqsum, DualQuat *dq, float weight)
void normalize_dq (DualQuat *dq, float totweight)
void mul_v3m3_dq (float *co, float mat[][3], DualQuat *dq)
void copy_dq_dq (DualQuat *dq1, DualQuat *dq2)
void quat_apply_track (float quat[4], short axis, short upflag)
void vec_apply_track (float vec[3], short axis)
float focallength_to_fov (float focal_length, float sensor)
float fov_to_focallength (float hfov, float sensor)
static float mod_inline (float a, float b)
float angle_wrap_rad (float angle)
float angle_wrap_deg (float angle)

Variables

static RotOrderInfo rotOrders []

Detailed Description

Definition in file math_rotation.c.


Define Documentation

#define GET_ROTATIONORDER_INFO (   order)    (assert(order>=0 && order<=6), (order < 1) ? &rotOrders[0] : &rotOrders[(order)-1])

Definition at line 1167 of file math_rotation.c.

Referenced by eulO_to_gimbal_axis(), eulO_to_mat3(), eulO_to_quat(), and mat3_to_eulo2().

#define QUAT_EPSILON   0.0001

Definition at line 38 of file math_rotation.c.

Referenced by quat_to_axis_angle(), quat_to_mat3(), and quat_to_mat4().


Typedef Documentation

typedef struct RotOrderInfo RotOrderInfo

Function Documentation

void add_qt_qtqt ( float  result[4],
const float  quat1[4],
const float  quat2[4],
const float  t 
)

Definition at line 584 of file math_rotation.c.

Referenced by pose_slide_apply_quat(), and Quaternion_add().

void add_weighted_dq_dq ( DualQuat dqsum,
DualQuat dq,
float  weight 
)
float angle_wrap_deg ( float  angle)

Definition at line 1712 of file math_rotation.c.

References mod_inline().

float angle_wrap_rad ( float  angle)

Definition at line 1707 of file math_rotation.c.

References M_PI, and mod_inline().

Referenced by C_Matrix_Rotation(), Quaternion_angle_set(), Quaternion_new(), and Rotation().

void axis_angle_to_eulO ( float  eul[3],
const short  order,
const float  axis[3],
const float  angle 
)
void axis_angle_to_mat3 ( float  mat[3][3],
const float  axis[3],
const float  angle 
)
void axis_angle_to_mat4 ( float  mat[4][4],
const float  axis[3],
const float  angle 
)
void axis_angle_to_quat ( float  q[4],
const float  axis[3],
float  angle 
)
void compatible_eul ( float  eul[3],
const float  oldrot[3] 
)
void conjugate_qt ( float *  q)

Definition at line 101 of file math_rotation.c.

void copy_dq_dq ( DualQuat dq1,
DualQuat dq2 
)

Definition at line 1613 of file math_rotation.c.

Referenced by b_bone_deform().

void copy_qt_qt ( float  q1[4],
const float  q2[4] 
)
float dot_qtqt ( const float  q1[4],
const float  q2[4] 
)
void dquat_to_mat4 ( float  mat[][4],
DualQuat dq 
)
void eul_to_mat3 ( float  mat[][3],
const float  eul[3] 
)

Definition at line 882 of file math_rotation.c.

References cos(), si, and sin().

void eul_to_mat4 ( float  mat[][4],
const float  eul[3] 
)

Definition at line 910 of file math_rotation.c.

References cos(), si, and sin().

void eul_to_quat ( float *  quat,
const float  eul[3] 
)

Definition at line 1008 of file math_rotation.c.

References cos(), si, and sin().

void eulO_to_axis_angle ( float  axis[3],
float *  angle,
const float  eul[3],
const short  order 
)
void eulO_to_gimbal_axis ( float  gmat[][3],
const float  eul[3],
const short  order 
)
void eulO_to_mat3 ( float  M[3][3],
const float  e[3],
const short  order 
)
void eulO_to_mat4 ( float  M[4][4],
const float  e[3],
const short  order 
)

Definition at line 1276 of file math_rotation.c.

References copy_m4_m3(), eulO_to_mat3(), and normalize_m3().

Referenced by constraintob_from_transdata().

void eulO_to_quat ( float  q[4],
const float  e[3],
const short  order 
)
float focallength_to_fov ( float  focal_length,
float  sensor 
)

Definition at line 1691 of file math_rotation.c.

References atanf.

Referenced by CamerasExporter::operator()(), and project_camera_info().

float fov_to_focallength ( float  hfov,
float  sensor 
)

Definition at line 1696 of file math_rotation.c.

References tanf.

Referenced by DocumentImporter::writeCamera().

void interp_qt_qtqt ( float  result[4],
const float  quat1[4],
const float  quat2[4],
const float  t 
)
void invert_qt ( float *  q)

Definition at line 113 of file math_rotation.c.

References conjugate_qt(), dot_qtqt(), and mul_qt_fl().

void invert_qt_qt ( float *  q1,
const float *  q2 
)

Definition at line 124 of file math_rotation.c.

References copy_qt_qt(), and invert_qt().

int is_zero_qt ( float *  q)

Definition at line 64 of file math_rotation.c.

void mat3_to_axis_angle ( float  axis[3],
float *  angle,
float  mat[3][3] 
)
void mat3_to_compatible_eul ( float  eul[3],
const float  oldrot[3],
float  mat[][3] 
)

Definition at line 1110 of file math_rotation.c.

References compatible_eul(), copy_v3_v3(), fabs(), and mat3_to_eul2().

void mat3_to_compatible_eulO ( float  eul[3],
float  oldrot[3],
short  order,
float  mat[3][3] 
)
void mat3_to_eul ( float *  eul,
float  tmat[][3] 
)

Definition at line 973 of file math_rotation.c.

References copy_v3_v3(), fabs(), and mat3_to_eul2().

static void mat3_to_eul2 ( float  tmat[][3],
float  eul1[3],
float  eul2[3] 
) [static]
void mat3_to_eulO ( float  eul[3],
const short  order,
float  M[3][3] 
)
static void mat3_to_eulo2 ( float  M[3][3],
float *  e1,
float *  e2,
short  order 
) [static]
void mat3_to_quat ( float *  q,
float  wmat[][3] 
)

Definition at line 253 of file math_rotation.c.

References copy_m3_m3(), normalize_m3(), normalize_qt(), sqrt(), and sqrtf.

void mat3_to_quat_is_ok ( float  q[4],
float  wmat[3][3] 
)
void mat4_to_axis_angle ( float  axis[3],
float *  angle,
float  mat[4][4] 
)

Definition at line 762 of file math_rotation.c.

References mat4_to_quat(), and quat_to_axis_angle().

Referenced by constraintRotLim(), and visualkey_get_value().

void mat4_to_compatible_eulO ( float  eul[3],
float  oldrot[3],
short  order,
float  M[4][4] 
)

Definition at line 1335 of file math_rotation.c.

References copy_m3_m4(), mat3_to_compatible_eulO(), and normalize_m3().

Referenced by rotlike_evaluate().

void mat4_to_dquat ( DualQuat dq,
float  basemat[][4],
float  mat[][4] 
)
void mat4_to_eul ( float *  eul,
float  tmat[][4] 
)

Definition at line 989 of file math_rotation.c.

References copy_m3_m4(), mat3_to_eul(), and normalize_m3().

void mat4_to_eulO ( float  e[3],
const short  order,
float  M[4][4] 
)
void mat4_to_quat ( float *  q,
float  m[][4] 
)

Definition at line 305 of file math_rotation.c.

References copy_m3_m4(), and mat3_to_quat().

static float mod_inline ( float  a,
float  b 
) [static]

Definition at line 1702 of file math_rotation.c.

References floorf.

Referenced by angle_wrap_deg(), and angle_wrap_rad().

void mul_fac_qt_fl ( float *  q,
const float  fac 
)

Definition at line 152 of file math_rotation.c.

References angle(), co, cos(), mul_v3_fl(), normalize_v3(), saacos(), si, and sin().

void mul_qt_fl ( float *  q,
const float  f 
)

Definition at line 131 of file math_rotation.c.

void mul_qt_qtqt ( float *  q,
const float *  q1,
const float *  q2 
)

Definition at line 69 of file math_rotation.c.

void mul_qt_v3 ( const float *  q,
float *  v 
)

Definition at line 83 of file math_rotation.c.

void mul_v3m3_dq ( float *  co,
float  mat[][3],
DualQuat dq 
)
void normalize_dq ( DualQuat dq,
float  totweight 
)
float normalize_qt ( float *  q)

Definition at line 357 of file math_rotation.c.

References dot_qtqt(), len(), mul_qt_fl(), and sqrt().

float normalize_qt_qt ( float  r[4],
const float  q[4] 
)
void print_qt ( const char *  str,
const float  q[4] 
)

Definition at line 636 of file math_rotation.c.

void quat_apply_track ( float  quat[4],
short  axis,
short  upflag 
)

Definition at line 1619 of file math_rotation.c.

References assert, and mul_qt_qtqt().

Referenced by calc_curve_deform(), followpath_get_tarmat(), and ob_parcurve().

void quat_to_axis_angle ( float  axis[3],
float *  angle,
const float  q[4] 
)
void quat_to_eul ( float *  eul,
const float  quat[4] 
)

Definition at line 999 of file math_rotation.c.

References mat3_to_eul(), and quat_to_mat3().

void quat_to_eulO ( float  e[3],
short const  order,
const float  q[4] 
)
void quat_to_mat3 ( float  m[][3],
const float  q[4] 
)

Definition at line 197 of file math_rotation.c.

References dot_qtqt(), fabsf, QUAT_EPSILON, and quat_to_mat3_no_error().

static void quat_to_mat3_no_error ( float  m[][3],
const float  q[4] 
) [static]

Definition at line 164 of file math_rotation.c.

References M_SQRT2.

Referenced by mat3_to_quat_is_ok(), and quat_to_mat3().

void quat_to_mat4 ( float  m[][4],
const float  q[4] 
)

Definition at line 209 of file math_rotation.c.

References dot_qtqt(), fabsf, M_SQRT2, and QUAT_EPSILON.

void rotate_eul ( float *  beul,
const char  axis,
const float  ang 
)

Definition at line 1024 of file math_rotation.c.

References assert, eul_to_mat3(), mat3_to_eul(), and mul_m3_m3m3().

void rotate_eulO ( float  beul[3],
short  order,
char  axis,
float  ang 
)

Definition at line 1346 of file math_rotation.c.

References assert, eulO_to_mat3(), mat3_to_eulO(), and mul_m3_m3m3().

Referenced by Euler_rotate_axis(), and rotlike_evaluate().

void rotation_between_quats_to_quat ( float *  q,
const float  q1[4],
const float  q2[4] 
)

Definition at line 392 of file math_rotation.c.

References conjugate_qt(), copy_qt_qt(), dot(), dot_qtqt(), and mul_qt_qtqt().

void rotation_between_vecs_to_quat ( float *  q,
const float  v1[3],
const float  v2[3] 
)
void single_axis_angle_to_mat3 ( float  mat[3][3],
const char  axis,
const float  angle 
)

Definition at line 774 of file math_rotation.c.

References assert, cosf, and sinf.

Referenced by C_Matrix_Rotation().

void sub_qt_qtqt ( float  q[4],
const float  q1[4],
const float  q2[4] 
)

Definition at line 139 of file math_rotation.c.

References mul_qt_qtqt().

Referenced by explodeMesh(), pose_slide_apply_quat(), and set_crazy_vertex_quat().

void tri_to_quat ( float  quat[4],
const float  v1[3],
const float  v2[3],
const float  v3[3] 
)
void unit_axis_angle ( float  axis[3],
float *  angle 
)
void unit_qt ( float  q[4])
void vec_apply_track ( float  vec[3],
short  axis 
)

Definition at line 1648 of file math_rotation.c.

References assert, and copy_v3_v3().

Referenced by calc_curve_deform().

void vec_rot_to_mat3 ( float  mat[][3],
const float  vec[3],
const float  phi 
)

Definition at line 822 of file math_rotation.c.

References co, cos(), si, and sin().

void vec_rot_to_mat4 ( float  mat[][4],
const float  vec[3],
const float  phi 
)

Definition at line 848 of file math_rotation.c.

References copy_m4_m3(), unit_m4(), and vec_rot_to_mat3().

void vec_rot_to_quat ( float *  quat,
const float  vec[3],
const float  phi 
)

Definition at line 858 of file math_rotation.c.

References cos(), normalize_v3(), si, sin(), and unit_qt().

void vec_to_quat ( float  q[4],
const float  vec[3],
short  axis,
const short  upflag 
)

Variable Documentation

RotOrderInfo rotOrders[] [static]
Initial value:
 {
    
    {{0, 1, 2}, 0}, 
    {{0, 2, 1}, 1}, 
    {{1, 0, 2}, 1}, 
    {{1, 2, 0}, 0}, 
    {{2, 0, 1}, 0}, 
    {{2, 1, 0}, 1}  
}

Definition at line 1153 of file math_rotation.c.