2 $Id: vector.cxx,v 1.1 2002/11/20 00:33:56 grumbel Exp $
4 ------------------------------------------------------------------------
5 ClanLib, the platform independent game SDK.
7 This library is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE
8 version 2. See COPYING for details.
10 For a total list of contributers see CREDITS.
12 ------------------------------------------------------------------------
14 1999/06/19 Daniel Vogel
16 totally replaced old CL_Vector with this code
23 CL_Vector::CL_Vector(float x
, float y
, float z
, float w
)
31 CL_Vector::CL_Vector(const CL_Vector
&other
)
39 float CL_Vector::norm() const
42 return (float)sqrt(x
*x
+y
*y
+z
*z
);
44 return sqrt(x
*x
+y
*y
+z
*z
);
48 void CL_Vector::normalize()
59 float CL_Vector::dot(const CL_Vector
& v
) const
61 return x
*v
.x
+ y
*v
.y
+ z
*v
.z
;
64 float CL_Vector::angle(const CL_Vector
& v
) const
66 return (float)acos(dot(v
)/(norm()*v
.norm()));
69 CL_Vector
CL_Vector::cross(const CL_Vector
& v
) const
71 CL_Vector tmp
= CL_Vector(y
* v
.z
- z
* v
.y
,
77 // quick hack, same as glRotatef(angle, a);
78 CL_Vector
CL_Vector::rotate(float angle
, const CL_Vector
& a
) const
80 CL_Vector tmp
= CL_Vector();
82 float s
= (float)sin(angle
);
83 float c
= (float)cos(angle
);
85 tmp
.x
= x
*(a
.x
*a
.x
*(1-c
)+c
) + y
*(a
.x
*a
.y
*(1-c
)-a
.z
*s
) + z
*(a
.x
*a
.z
*(1-c
)+a
.y
*s
);
86 tmp
.y
= x
*(a
.y
*a
.x
*(1-c
)+a
.z
*s
) + y
*(a
.y
*a
.y
*(1-c
)+c
) + z
*(a
.y
*a
.z
*(1-c
)-a
.x
*s
);
87 tmp
.z
= x
*(a
.x
*a
.z
*(1-c
)-a
.y
*s
) + y
*(a
.y
*a
.z
*(1-c
)+a
.x
*s
) + z
*(a
.z
*a
.z
*(1-c
)+c
);
91 void CL_Vector::round()
99 CL_Vector
CL_Vector::operator * (float s
) const
101 return CL_Vector(s
* x
,
107 CL_Vector
operator * (float s
, const CL_Vector
& v
)
109 return CL_Vector(s
* v
.x
,
115 void CL_Vector::operator += (const CL_Vector
& v
)
123 void CL_Vector::operator -= (const CL_Vector
& v
)
131 void CL_Vector::operator *= (float s
)
139 CL_Vector
CL_Vector::operator + (const CL_Vector
& v
) const
141 return CL_Vector(x
+ v
.x
,
147 CL_Vector
CL_Vector::operator - (const CL_Vector
& v
) const
149 return CL_Vector(x
- v
.x
,
155 CL_Vector
CL_Vector::operator - () const
163 CL_Vector
& CL_Vector::operator = (const CL_Vector
& v
)
172 int CL_Vector::operator == (const CL_Vector
& v
) const
174 return ((x
== v
.x
) && (y
== v
.y
) && (z
== v
.z
) && (w
== v
.w
));
177 int CL_Vector::operator != (const CL_Vector
& v
) const
179 return !(operator == (v
));
182 float & CL_Vector::operator [] (int n
)
195 std::ostream
& operator << (std::ostream
& os
, const CL_Vector
& v
)
197 os
<< v
.x
<< " " << v
.y
<< " " << v
.z
;