/* Copyright (c) 2019, Anthony Latorre * * This program 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 3 of the License, or (at your option) * any later version. * This program 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 * this program. If not, see . */ #include "vector.h" #include void normalize(double *a) { double c; c = 1.0/NORM(a); MUL(a,c); } void rotate(double *dest, double *v, double *n, double phi) { /* Rotate the vector `v` through an angle `phi` about the axis `n`. */ double temp[3], cos_theta; cos_theta = cos(phi); COPY(dest,v); MUL(dest,cos_theta); CROSS(temp,n,v); MUL(temp,sin(phi)); ADD(dest,dest,temp); COPY(temp,n); MUL(temp,DOT(n,v)*(1-cos_theta)); ADD(dest,dest,temp); }