MAV'RIC
/home/travis/build/lis-epfl/MAVRIC_Library/util/vectors.h
00001 /*******************************************************************************
00002  * Copyright (c) 2009-2016, MAV'RIC Development Team
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions are met:
00007  *
00008  * 1. Redistributions of source code must retain the above copyright notice,
00009  * this list of conditions and the following disclaimer.
00010  *
00011  * 2. Redistributions in binary form must reproduce the above copyright notice,
00012  * this list of conditions and the following disclaimer in the documentation
00013  * and/or other materials provided with the distribution.
00014  *
00015  * 3. Neither the name of the copyright holder nor the names of its contributors
00016  * may be used to endorse or promote products derived from this software without
00017  * specific prior written permission.
00018  *
00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00020  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00021  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00022  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00023  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00024  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00025  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00026  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00027  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00028  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00029  * POSSIBILITY OF SUCH DAMAGE.
00030  ******************************************************************************/
00031 
00032 /*******************************************************************************
00033  * \file vectors.h
00034  *
00035  * \author MAV'RIC Team
00036  * \author Felix Schill
00037  * \author Geraud L'Eplattenier
00038  *
00039  * \brief Stream
00040  *
00041  ******************************************************************************/
00042 
00043 
00044 #ifndef VECTORS_H_
00045 #define VECTORS_H_
00046 
00047 #ifdef __cplusplus
00048 extern "C"
00049 {
00050 #endif
00051 
00052 #include <stdint.h>
00053 #include "util/maths.h"
00054 
00055 
00063 #define CROSS(u,v,out) \
00064     out[0] = u[1] * v[2] - u[2] * v[1];\
00065     out[1] = u[2] * v[0] - u[0] * v[2];\
00066     out[2] = u[0] * v[1] - u[1] * v[0];
00067 
00068 
00077 #define SCP(u,v) \
00078     (u[0] * v[0] + u[1] * v[1] + u[2] * v[2])
00079 
00080 
00089 float static inline vectors_scalar_product(const float u[3], const float v[3]) //maths_scalar_product(const float u[3], const float v[3])
00090 {
00091     float scp = (u[0] * v[0] + u[1] * v[1] + u[2] * v[2]);
00092     return scp;
00093 }
00094 
00095 
00103 void static inline vectors_cross_product(const float u[3], const float v[3], float out[3]) //maths_cross_product(const float u[3], const float v[3], float out[3])
00104 {
00105     out[0] = u[1] * v[2] - u[2] * v[1];
00106     out[1] = u[2] * v[0] - u[0] * v[2];
00107     out[2] = u[0] * v[1] - u[1] * v[0];
00108 }
00109 
00110 
00117 float static inline vectors_norm_sqr(const float u[3]) //maths_vector_norm_sqr(float u[3])
00118 {
00119     float norm = vectors_scalar_product(u, u);
00120     return norm;
00121 }
00122 
00123 
00130 float static inline vectors_norm(const float u[3]) //maths_vector_norm(float u[3])
00131 {
00132     return maths_fast_sqrt(vectors_norm_sqr(u));
00133 }
00134 
00135 
00142 void static inline vectors_normalize(const float v[3], float u[3]) //maths_vector_normalize(float v[3], float u[3])
00143 {
00144     float norm = vectors_norm(v);
00145 
00146     for (int32_t i = 0; i < 3; ++i)
00147     {
00148         u[i] = v[i] / norm;
00149     }
00150 }
00151 
00152 
00153 #ifdef __cplusplus
00154 }
00155 #endif
00156 
00157 #endif /* VECTORS_H_ */
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines