1 #ifndef geo_Vectors_H__
2 #define geo_Vectors_H__
4 #include "../math/utility.h"
5 #include "../math/Vector.h"
6 #include "../math/Matrix.h"
17 template<
class Scalar>
35 Vector2D(Scalar
const& sx, Scalar
const& sy): x_(sx), y_(sy) {
52 return xy(v.
x(), v.
y());
56 Scalar
const&
x()
const {
71 Scalar
const&
y()
const {
76 Scalar
const&
x(Scalar
const& s) {
82 Scalar
const&
y(Scalar
const& s) {
116 return xy(
x() + v.
x(),
y() + v.
y());
126 return xy(
x() - v.
x(),
y() - v.
y());
136 return xy(
x() * s,
y() * s);
146 return xy(
x() / s,
y() / s);
156 return x() * v.
x() +
y() * v.
y();
161 return x() * v.
y() -
y() * v.
x();
166 return Scalar(sqrt(
double(
length2())));
186 Scalar cs(cos(-
double(theta)));
187 Scalar sn(sin(-
double(theta)));
225 return (n == 0 ?
x() :
y());
254 template<
class Scalar>
274 Scalar
const& sz): x_(sx), y_(sy), z_(sz) {
291 return xyz(v.
x(), v.
y(), v.
z());
295 Scalar
const&
x()
const{
300 Scalar
const&
y()
const{
305 Scalar
const&
z()
const{
325 Scalar
const&
x(Scalar
const& s) {
331 Scalar
const&
y(Scalar
const& s) {
337 Scalar
const&
z(Scalar
const& s) {
343 Vector3D&
xyz(Scalar
const& sx, Scalar
const& sy, Scalar
const& sz) {
367 return xyz(
x() + v.
x(),
y() + v.
y(),
z() + v.
z());
377 return xyz(
x() - v.
x(),
y() - v.
y(),
z() - v.
z());
387 return xyz(
x() * s,
y() * s,
z() * s);
397 return xyz(
x() / s,
y() / s,
z() / s);
407 return x() * v.
x() +
y() * v.
y() +
z() * v.
z();
413 z() * v.
x() -
x() * v.
z(),
414 x() * v.
y() -
y() * v.
x());
424 return Scalar(sqrt(
double(
length2())));
446 Vector3D yy(a.cross(*this).mul(sin(theta)));
447 return a.
mul(a.dot(*
this)).
add(xx).
add(yy);
485 return (n == 0 ?
x() : (n == 1 ?
y() :
z()));
489 return xyz(sx, sy, sz);
510 #endif // geo_Vectors_H__