Ignore:
Timestamp:
Mar 7, 2012 12:21:30 PM (12 years ago)
Author:
ldelgass
Message:

Const correctness fixes, pass vector/matrix objects by reference, various
formatting and style cleanups, don't spam syslog and uncomment openlog() call.
Still needs to be compiled with -DWANT_TRACE to get tracing, but now trace
output will be output to file in /tmp.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/Vector3.h

    r2798 r2822  
    1717#define _VECTOR3_H_
    1818
    19 /*
    20  * FIXME: The files that explicitly use the "rot*", "length", "distance", or
    21  * "normalize" methods, should include the following headers.  Don't do it
    22  * here.
    23  */
    2419#include <math.h>
    2520#include "Mat4x4.h"
    2621
    27 class Vector3{
    28 private:
    29     float radians(float degree) const {
    30         return (M_PI * degree) / 180.0;
    31     }
     22class Vector3
     23{
    3224public:
    3325    float x, y, z;
    34     Vector3(void) {
    35         /*empty*/
     26
     27    Vector3()
     28    {}
     29
     30    Vector3(float x_val, float y_val, float z_val)
     31    {
     32        set(x_val, y_val, z_val);
    3633    }
    37     Vector3(float x_val, float y_val, float z_val) {
    38         set(x_val, y_val, z_val);
     34
     35    void set(float x_val, float y_val, float z_val)
     36    {
     37        x = x_val, y = y_val, z = z_val;
    3938    }
    40     Vector3 operator +(float scalar) {
    41         return Vector3(x + scalar, y + scalar, z + scalar);
     39
     40    void print() const
     41    {
     42        TRACE("(x:%f, y:%f, z:%f)\n", x, y, z);
    4243    }
    43     Vector3 operator -(float scalar) {
    44         return Vector3(x - scalar, y - scalar, z - scalar);
     44
     45    Vector3 operator +(float scalar) const
     46    {
     47        return Vector3(x + scalar, y + scalar, z + scalar);
    4548    }
    46     Vector3 operator *(float scalar) {
    47         return Vector3(x * scalar, y * scalar, z * scalar);
     49
     50    Vector3 operator -(float scalar) const
     51    {
     52        return Vector3(x - scalar, y - scalar, z - scalar);
    4853    }
    49     Vector3 operator /(float scalar) {
    50         return Vector3(x / scalar, y / scalar, z / scalar);
     54
     55    Vector3 operator *(float scalar) const
     56    {
     57        return Vector3(x * scalar, y * scalar, z * scalar);
    5158    }
    52     Vector3 operator +(Vector3 &op2) {
    53         return Vector3(x + op2.x, y + op2.y, z + op2.z);
     59
     60    Vector3 operator /(float scalar) const
     61    {
     62        return Vector3(x / scalar, y / scalar, z / scalar);
    5463    }
    55     Vector3 operator -(Vector3 &op2) {
    56         return Vector3(x - op2.x, y - op2.y, z - op2.z);
     64
     65    Vector3 operator +(const Vector3& op2) const
     66    {
     67        return Vector3(x + op2.x, y + op2.y, z + op2.z);
    5768    }
    58     float operator *(const Vector3 &op2){
    59         return x*op2.x + y*op2.y + z*op2.z;
     69
     70    Vector3 operator -(const Vector3& op2) const
     71    {
     72        return Vector3(x - op2.x, y - op2.y, z - op2.z);
    6073    }
    61     float dot(const Vector3& vec) const {
    62         return x*vec.x + y*vec.y + z*vec.z;
     74
     75    float dot(const Vector3& op2) const
     76    {
     77        return x*op2.x + y*op2.y + z*op2.z;
    6378    }
    64     bool equal(Vector3 &op2) {
    65         return (x==op2.x) && (y==op2.y) && (z==op2.z);
     79
     80    float operator *(const Vector3& op2) const
     81    {
     82        return dot(op2);
    6683    }
    67     Vector3 cross(Vector3 op2) {
    68         return Vector3(y*op2.z - z*op2.y, z*op2.x - x*op2.z, x*op2.y - y*op2.x);
     84
     85    Vector3 cross(const Vector3& op2) const
     86    {
     87        return Vector3(y*op2.z - z*op2.y, z*op2.x - x*op2.z, x*op2.y - y*op2.x);
    6988    }
    70     void operator<(Vector3 &op2) {
    71         set(op2.x, op2.y, op2.z);
     89
     90    Vector3 operator ^(const Vector3& op2) const
     91    {
     92        return cross(op2);
    7293    }
    73     Vector3 operator ^(Vector3 &op2) {
    74         return cross(op2);
     94
     95    Vector3 normalize() const
     96    {
     97        float len = length();
     98        return Vector3(x / len, y / len, z / len);
    7599    }
    76     Vector3 normalize(void) {
    77         float len = length();
    78         return Vector3(x / len, y / len, z / len);
     100
     101    Vector3 rot_x(float degree) const
     102    {
     103        float rad = radians(degree);
     104        return Vector3(x,
     105                       y*cos(rad) - z*sin(rad),
     106                       y*sin(rad) + z*cos(rad));
    79107    }
    80     Vector3 rot_x(float degree) {
    81         float rad = radians(degree);
    82         return Vector3(x,
    83                        y*cos(rad) - z*sin(rad),
    84                        y*sin(rad) + z*cos(rad));
     108
     109    Vector3 rot_y(float degree) const
     110    {
     111        float rad = radians(degree);
     112        return Vector3(x*cos(rad) + z*sin(rad),
     113                       y,
     114                       -x*sin(rad) + z*cos(rad));
    85115    }
    86     Vector3 rot_y(float degree) {
    87         float rad = radians(degree);
    88         return Vector3(x*cos(rad) + z*sin(rad),
    89                        y,
    90                        -x*sin(rad) + z*cos(rad));
     116
     117    Vector3 rot_z(float degree) const
     118    {
     119        float rad = radians(degree);
     120        return Vector3(x*cos(rad) - y*sin(rad),
     121                       x*sin(rad) + y*cos(rad),
     122                       z);
    91123    }
    92     Vector3 rot_z(float degree) {
    93         float rad = radians(degree);
    94         return Vector3(x*cos(rad) - y*sin(rad),
    95                        x*sin(rad) + y*cos(rad),
    96                        z);
     124
     125    float distance(const Vector3& v) const
     126    {
     127        return sqrtf(distanceSquare(v));
    97128    }
    98     void set(float x_val, float y_val, float z_val) {
    99         x = x_val, y = y_val, z = z_val;
     129
     130    float distanceSquare(const Vector3& v) const
     131    {
     132        return (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y) + (z-v.z)*(z-v.z);
    100133    }
    101     void print(void){
    102         TRACE("(x:%f, y:%f, z:%f)\n", x, y, z);
     134
     135    float distanceSquare(float vx, float vy, float vz) const
     136    {
     137        return (x-vx)*(x-vx) + (y-vy)*(y-vy) + (z-vz)*(z-vz);
    103138    }
    104     float distance(Vector3 &v) const {
    105         return sqrtf(distanceSquare(v));
    106     }
    107     float distanceSquare(Vector3 &v) const {
    108         return (x-v.x)*(x-v.x) + (y-v.y)*(y-v.y) + (z-v.z)*(z-v.z);
    109     }
    110     float distanceSquare(float vx, float vy, float vz) const {
    111         return (x-vx)*(x-vx) + (y-vy)*(y-vy) + (z-vz)*(z-vz);
    112     }
    113     void transform(const Vector3& v, const Mat4x4& mat) {
     139
     140    void transform(const Vector3& v, const Mat4x4& mat)
     141    {
    114142        const float* m = mat.m;
    115143        x = m[0] * v.x + m[4] * v.y + m[8]  * v.z + m[12];
     
    117145        z = m[2] * v.x + m[6] * v.y + m[10] * v.z + m[14];
    118146    }
    119     float length(void) const {
    120         return sqrt(x*x + y*y + z*z);
     147
     148    float length() const
     149    {
     150        return sqrt(x*x + y*y + z*z);
    121151    }
    122152
    123     Vector3 scale(const Vector3& scale)
     153    Vector3 scale(const Vector3& scale) const
    124154    {
    125155        Vector3 v;
     
    130160    }
    131161
    132     friend Vector3 operator+(const Vector3& value1, const Vector3& value2);
    133 
    134 
     162private:
     163    float radians(float degree) const
     164    {
     165        return (M_PI * degree) / 180.0;
     166    }
    135167};
    136168
    137 inline Vector3 operator+(const Vector3& value1, const Vector3& value2)
    138 {
    139         return Vector3(value1.x + value2.x, value1.y + value2.y, value1.z + value2.z);
    140 }
    141 
    142169#endif
Note: See TracChangeset for help on using the changeset viewer.