Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

SUMA_trackball.h File Reference

Go to the source code of this file.


Functions

void trackball (float q[4], float p1x, float p1y, float p2x, float p2y)
void trackball_Phi (float q[4], float p1x, float p1y, float p2x, float p2y, float phi)
void add_quats (float *q1, float *q2, float *dest)
void SUMA_build_rotmatrix (float m[4][4], float q[4])
void axis_to_quat (float a[3], float phi, float q[4])

Function Documentation

void add_quats float *    q1,
float *    q2,
float *    dest
 

Referenced by SUMA_input(), and SUMA_momentum().

void axis_to_quat float    a[3],
float    phi,
float    q[4]
 

Definition at line 174 of file SUMA_trackball.c.

References a, q, vcopy(), vnormal(), and vscale().

Referenced by SUMA_input(), trackball(), and trackball_Phi().

00175 {
00176   vnormal(a);
00177   vcopy(a, q);
00178   vscale(q, sin(phi / 2.0));
00179   q[3] = cos(phi / 2.0);
00180 }

void SUMA_build_rotmatrix float    m[4][4],
float    q[4]
 

Referenced by SUMA_cmap_wid_display(), SUMA_display(), SUMA_GetSelectionLine(), and SUMA_World2ScreenCoords().

void trackball float    q[4],
float    p1x,
float    p1y,
float    p2x,
float    p2y
 

functions defined in SUMA_trackball.c

Definition at line 99 of file SUMA_trackball.c.

References a, axis_to_quat(), q, tb_project_to_sphere(), TRACKBALLSIZE, vcross(), vlength(), vset(), vsub(), and vzero().

Referenced by SUMA_input().

00100 {
00101   float a[3];           /* Axis of rotation. */
00102   float phi;            /* How much to rotate about axis. */
00103   float p1[3], p2[3], d[3];
00104   float t;
00105 
00106   if (p1x == p2x && p1y == p2y) {
00107     /* Zero rotation */
00108     vzero(q);
00109     q[3] = 1.0;
00110     return;
00111   }
00112   /* First, figure out z-coordinates for projection of P1 and
00113      P2 to deformed sphere. */
00114   vset(p1, p1x, p1y, tb_project_to_sphere(TRACKBALLSIZE, p1x, p1y));
00115   vset(p2, p2x, p2y, tb_project_to_sphere(TRACKBALLSIZE, p2x, p2y));
00116 
00117   /* Now, we want the cross product of P1 and P2. */
00118   vcross(p2, p1, a);
00119   /* Figure out how much to rotate around that axis. */
00120   vsub(p1, p2, d);
00121   t = vlength(d) / (2.0 * TRACKBALLSIZE);
00122 
00123   /* Avoid problems with out-of-control values. */
00124   if (t > 1.0)
00125     t = 1.0;
00126   if (t < -1.0)
00127     t = -1.0;
00128   phi = 2.0 * asin(t);
00129   axis_to_quat(a, phi, q);
00130 }

void trackball_Phi float    q[4],
float    p1x,
float    p1y,
float    p2x,
float    p2y,
float    phi
 

A modification/hack of trackball function to control the rotation angle directement

Definition at line 136 of file SUMA_trackball.c.

References a, axis_to_quat(), q, tb_project_to_sphere(), TRACKBALLSIZE, vcross(), vlength(), vset(), vsub(), and vzero().

Referenced by SUMA_input().

00137 {
00138   float a[3];           /* Axis of rotation. */
00139   float p1[3], p2[3], d[3];
00140   float t;
00141 
00142   if (p1x == p2x && p1y == p2y) {
00143     /* Zero rotation */
00144     vzero(q);
00145     q[3] = 1.0;
00146     return;
00147   }
00148   /* First, figure out z-coordinates for projection of P1 and
00149      P2 to deformed sphere. */
00150   vset(p1, p1x, p1y, tb_project_to_sphere(TRACKBALLSIZE, p1x, p1y));
00151   vset(p2, p2x, p2y, tb_project_to_sphere(TRACKBALLSIZE, p2x, p2y));
00152 
00153   /* Now, we want the cross product of P1 and P2. */
00154   vcross(p2, p1, a);
00155   /* Figure out how much to rotate around that axis. */
00156   vsub(p1, p2, d);
00157   t = vlength(d) / (2.0 * TRACKBALLSIZE);
00158 
00159   /* Avoid problems with out-of-control values. */
00160   if (t > 1.0) {
00161       t = 1.0;
00162       phi = 2.0 * asin(t);
00163   }
00164   if (t < -1.0) {
00165       t = -1.0;
00166       phi = 2.0 * asin(t);
00167   }
00168   
00169   axis_to_quat(a, phi, q);
00170 }
 

Powered by Plone

This site conforms to the following standards: