miniassimp
diff include/miniassimp/vector2.inl @ 0:879c81d94345
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 28 Jan 2019 18:19:26 +0200 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/include/miniassimp/vector2.inl Mon Jan 28 18:19:26 2019 +0200 1.3 @@ -0,0 +1,244 @@ 1.4 +/* 1.5 +--------------------------------------------------------------------------- 1.6 +Open Asset Import Library (assimp) 1.7 +--------------------------------------------------------------------------- 1.8 + 1.9 +Copyright (c) 2006-2018, assimp team 1.10 + 1.11 + 1.12 + 1.13 +All rights reserved. 1.14 + 1.15 +Redistribution and use of this software in source and binary forms, 1.16 +with or without modification, are permitted provided that the following 1.17 +conditions are met: 1.18 + 1.19 +* Redistributions of source code must retain the above 1.20 + copyright notice, this list of conditions and the 1.21 + following disclaimer. 1.22 + 1.23 +* Redistributions in binary form must reproduce the above 1.24 + copyright notice, this list of conditions and the 1.25 + following disclaimer in the documentation and/or other 1.26 + materials provided with the distribution. 1.27 + 1.28 +* Neither the name of the assimp team, nor the names of its 1.29 + contributors may be used to endorse or promote products 1.30 + derived from this software without specific prior 1.31 + written permission of the assimp team. 1.32 + 1.33 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1.34 +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1.35 +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1.36 +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1.37 +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1.38 +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1.39 +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1.40 +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1.41 +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1.42 +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1.43 +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1.44 +--------------------------------------------------------------------------- 1.45 +*/ 1.46 + 1.47 +/** @file vector2.inl 1.48 + * @brief Inline implementation of aiVector2t<TReal> operators 1.49 + */ 1.50 +#pragma once 1.51 +#ifndef AI_VECTOR2D_INL_INC 1.52 +#define AI_VECTOR2D_INL_INC 1.53 + 1.54 +#ifdef __cplusplus 1.55 +#include "vector2.h" 1.56 + 1.57 +#include <cmath> 1.58 + 1.59 +// ------------------------------------------------------------------------------------------------ 1.60 +template <typename TReal> 1.61 +template <typename TOther> 1.62 +aiVector2t<TReal>::operator aiVector2t<TOther> () const { 1.63 + return aiVector2t<TOther>(static_cast<TOther>(x),static_cast<TOther>(y)); 1.64 +} 1.65 +// ------------------------------------------------------------------------------------------------ 1.66 +template <typename TReal> 1.67 +inline 1.68 +void aiVector2t<TReal>::Set( TReal pX, TReal pY) { 1.69 + x = pX; y = pY; 1.70 +} 1.71 + 1.72 +// ------------------------------------------------------------------------------------------------ 1.73 +template <typename TReal> 1.74 +inline 1.75 +TReal aiVector2t<TReal>::SquareLength() const { 1.76 + return x*x + y*y; 1.77 +} 1.78 + 1.79 +// ------------------------------------------------------------------------------------------------ 1.80 +template <typename TReal> 1.81 +inline 1.82 +TReal aiVector2t<TReal>::Length() const { 1.83 + return std::sqrt( SquareLength()); 1.84 +} 1.85 + 1.86 +// ------------------------------------------------------------------------------------------------ 1.87 +template <typename TReal> 1.88 +inline 1.89 +aiVector2t<TReal>& aiVector2t<TReal>::Normalize() { 1.90 + *this /= Length(); 1.91 + return *this; 1.92 +} 1.93 + 1.94 +// ------------------------------------------------------------------------------------------------ 1.95 +template <typename TReal> 1.96 +inline 1.97 +const aiVector2t<TReal>& aiVector2t<TReal>::operator += (const aiVector2t& o) { 1.98 + x += o.x; y += o.y; 1.99 + return *this; 1.100 +} 1.101 + 1.102 +// ------------------------------------------------------------------------------------------------ 1.103 +template <typename TReal> 1.104 +inline 1.105 +const aiVector2t<TReal>& aiVector2t<TReal>::operator -= (const aiVector2t& o) { 1.106 + x -= o.x; y -= o.y; 1.107 + return *this; 1.108 +} 1.109 + 1.110 +// ------------------------------------------------------------------------------------------------ 1.111 +template <typename TReal> 1.112 +inline 1.113 +const aiVector2t<TReal>& aiVector2t<TReal>::operator *= (TReal f) { 1.114 + x *= f; y *= f; 1.115 + return *this; 1.116 +} 1.117 + 1.118 +// ------------------------------------------------------------------------------------------------ 1.119 +template <typename TReal> 1.120 +inline 1.121 +const aiVector2t<TReal>& aiVector2t<TReal>::operator /= (TReal f) { 1.122 + x /= f; y /= f; 1.123 + return *this; 1.124 +} 1.125 + 1.126 +// ------------------------------------------------------------------------------------------------ 1.127 +template <typename TReal> 1.128 +inline 1.129 +TReal aiVector2t<TReal>::operator[](unsigned int i) const { 1.130 + switch (i) { 1.131 + case 0: 1.132 + return x; 1.133 + case 1: 1.134 + return y; 1.135 + default: 1.136 + break; 1.137 + 1.138 + } 1.139 + return x; 1.140 +} 1.141 + 1.142 +// ------------------------------------------------------------------------------------------------ 1.143 +template <typename TReal> 1.144 +inline 1.145 +bool aiVector2t<TReal>::operator== (const aiVector2t& other) const { 1.146 + return x == other.x && y == other.y; 1.147 +} 1.148 + 1.149 +// ------------------------------------------------------------------------------------------------ 1.150 +template <typename TReal> 1.151 +inline 1.152 +bool aiVector2t<TReal>::operator!= (const aiVector2t& other) const { 1.153 + return x != other.x || y != other.y; 1.154 +} 1.155 + 1.156 +// --------------------------------------------------------------------------- 1.157 +template<typename TReal> 1.158 +inline 1.159 +bool aiVector2t<TReal>::Equal(const aiVector2t& other, TReal epsilon) const { 1.160 + return 1.161 + std::abs(x - other.x) <= epsilon && 1.162 + std::abs(y - other.y) <= epsilon; 1.163 +} 1.164 + 1.165 +// ------------------------------------------------------------------------------------------------ 1.166 +template <typename TReal> 1.167 +inline 1.168 +aiVector2t<TReal>& aiVector2t<TReal>::operator= (TReal f) { 1.169 + x = y = f; 1.170 + return *this; 1.171 +} 1.172 + 1.173 +// ------------------------------------------------------------------------------------------------ 1.174 +template <typename TReal> 1.175 +inline 1.176 +const aiVector2t<TReal> aiVector2t<TReal>::SymMul(const aiVector2t& o) { 1.177 + return aiVector2t(x*o.x,y*o.y); 1.178 +} 1.179 + 1.180 + 1.181 +// ------------------------------------------------------------------------------------------------ 1.182 +// symmetric addition 1.183 +template <typename TReal> 1.184 +inline 1.185 +aiVector2t<TReal> operator + (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2) { 1.186 + return aiVector2t<TReal>( v1.x + v2.x, v1.y + v2.y); 1.187 +} 1.188 + 1.189 +// ------------------------------------------------------------------------------------------------ 1.190 +// symmetric subtraction 1.191 +template <typename TReal> 1.192 +inline 1.193 +aiVector2t<TReal> operator - (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2) { 1.194 + return aiVector2t<TReal>( v1.x - v2.x, v1.y - v2.y); 1.195 +} 1.196 + 1.197 +// ------------------------------------------------------------------------------------------------ 1.198 +// scalar product 1.199 +template <typename TReal> 1.200 +inline 1.201 +TReal operator * (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2) { 1.202 + return v1.x*v2.x + v1.y*v2.y; 1.203 +} 1.204 + 1.205 +// ------------------------------------------------------------------------------------------------ 1.206 +// scalar multiplication 1.207 +template <typename TReal> 1.208 +inline 1.209 +aiVector2t<TReal> operator * ( TReal f, const aiVector2t<TReal>& v) { 1.210 + return aiVector2t<TReal>( f*v.x, f*v.y); 1.211 +} 1.212 + 1.213 +// ------------------------------------------------------------------------------------------------ 1.214 +// and the other way around 1.215 +template <typename TReal> 1.216 +inline 1.217 +aiVector2t<TReal> operator * ( const aiVector2t<TReal>& v, TReal f) { 1.218 + return aiVector2t<TReal>( f*v.x, f*v.y); 1.219 +} 1.220 + 1.221 +// ------------------------------------------------------------------------------------------------ 1.222 +// scalar division 1.223 +template <typename TReal> 1.224 +inline 1.225 +aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, TReal f) { 1.226 + return v * (1/f); 1.227 +} 1.228 + 1.229 +// ------------------------------------------------------------------------------------------------ 1.230 +// vector division 1.231 +template <typename TReal> 1.232 +inline 1.233 +aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, const aiVector2t<TReal>& v2) { 1.234 + return aiVector2t<TReal>(v.x / v2.x,v.y / v2.y); 1.235 +} 1.236 + 1.237 +// ------------------------------------------------------------------------------------------------ 1.238 +// vector negation 1.239 +template <typename TReal> 1.240 +inline 1.241 +aiVector2t<TReal> operator - ( const aiVector2t<TReal>& v) { 1.242 + return aiVector2t<TReal>( -v.x, -v.y); 1.243 +} 1.244 + 1.245 +#endif 1.246 + 1.247 +#endif // AI_VECTOR2D_INL_INC