+++ /dev/null
-// Copyright (C) 2006 Erik Dahlberg
-//
-// This file is part of LSystem3d.
-//
-// LSystem3D is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// LSystem3D is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with LSystem3D; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-
-
-#include <cmath>
-
-#include "vector.h"
-
-
-
-/**
- * Constructor
- * @param x the x-coordinate
- * @param y the y-coordinate
- * @param z the z-coordinate
- */
-Vector::Vector(double x, double y, double z)
-{
- setXYZ(x, y, z);
-}
-
-
-
-/**
- * Destructor
- */
-Vector::~Vector()
-{
-}
-
-
-
-/**
- * Rotate around another vector
- * @param angle rotation angle
- * @param vector arbitrary vector to rotate around
- */
-void Vector::rotate(double angle, Vector vector)
-{
- double c = cos(angle);
- double s = sin(angle);
-
- double x =
- _x * (vector._x * vector._x * (1.0 - c) + c) +
- _y * (vector._x * vector._y * (1.0 - c) + vector._z * s) +
- _z * (vector._x * vector._z * (1.0 - c) - vector._y * s);
-
- double y =
- _x * (vector._y * vector._x * (1.0 - c) - vector._z * s) +
- _y * (vector._y * vector._y * (1.0 - c) + c) +
- _z * (vector._y * vector._z * (1.0 - c) + vector._x * s);
-
- double z =
- _x * (vector._z * vector._x * (1.0 - c) + vector._y * s) +
- _y * (vector._z * vector._y * (1.0 - c) - vector._x * s) +
- _z * (vector._z * vector._z * (1.0 - c) + c);
-
- _x = x;
- _y = y;
- _z = z;
-
- // TODO: call it from outside?
- normalize();
-}
-
-
-
-/**
- * Normalize vector
- */
-void Vector::normalize()
-{
- double length = sqrt(_x * _x + _y * _y + _z * _z);
-
- if (length != 0)
- {
- _x /= length;
- _y /= length;
- _z /= length;
- }
-}
-
-
-
-/**
- * Get scalar product of the vectors
- * @param vector arbitrary vector
- * @return the scalar product
- */
-double Vector::getScalarProduct(Vector vector)
-{
- double scalarProduct = getX() * vector.getX() +
- getY() * vector.getY() +
- getZ() * vector.getZ();
-
- return scalarProduct;
-}
-
-
-
-/**
- * Get cross product of the vectors
- * @param vector arbitrary vector
- * @return the cross product
- */
-Vector Vector::getCrossProduct(Vector vector)
-{
- Vector crossProduct(getY() * vector.getZ() - getZ() * vector.getY(),
- getZ() * vector.getX() - getX() * vector.getZ(),
- getX() * vector.getY() - getY() * vector.getX());
-
- return crossProduct;
-}
-
-
-
-/**
- * Get angle between the vectors
- * @param vector the second (normalized) vector
- * @return the angle, in degrees
- */
-double Vector::getAngle(Vector vector)
-{
- double scalarProduct = getScalarProduct(vector);
- double angle = (acos(scalarProduct) / (M_PIl * 2.0)) * 360.0;
-
- return angle;
-}