miniassimp

annotate 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
rev   line source
nuclear@0 1 /*
nuclear@0 2 ---------------------------------------------------------------------------
nuclear@0 3 Open Asset Import Library (assimp)
nuclear@0 4 ---------------------------------------------------------------------------
nuclear@0 5
nuclear@0 6 Copyright (c) 2006-2018, assimp team
nuclear@0 7
nuclear@0 8
nuclear@0 9
nuclear@0 10 All rights reserved.
nuclear@0 11
nuclear@0 12 Redistribution and use of this software in source and binary forms,
nuclear@0 13 with or without modification, are permitted provided that the following
nuclear@0 14 conditions are met:
nuclear@0 15
nuclear@0 16 * Redistributions of source code must retain the above
nuclear@0 17 copyright notice, this list of conditions and the
nuclear@0 18 following disclaimer.
nuclear@0 19
nuclear@0 20 * Redistributions in binary form must reproduce the above
nuclear@0 21 copyright notice, this list of conditions and the
nuclear@0 22 following disclaimer in the documentation and/or other
nuclear@0 23 materials provided with the distribution.
nuclear@0 24
nuclear@0 25 * Neither the name of the assimp team, nor the names of its
nuclear@0 26 contributors may be used to endorse or promote products
nuclear@0 27 derived from this software without specific prior
nuclear@0 28 written permission of the assimp team.
nuclear@0 29
nuclear@0 30 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
nuclear@0 31 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
nuclear@0 32 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
nuclear@0 33 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
nuclear@0 34 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
nuclear@0 35 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
nuclear@0 36 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
nuclear@0 37 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
nuclear@0 38 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
nuclear@0 39 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nuclear@0 40 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nuclear@0 41 ---------------------------------------------------------------------------
nuclear@0 42 */
nuclear@0 43
nuclear@0 44 /** @file vector2.inl
nuclear@0 45 * @brief Inline implementation of aiVector2t<TReal> operators
nuclear@0 46 */
nuclear@0 47 #pragma once
nuclear@0 48 #ifndef AI_VECTOR2D_INL_INC
nuclear@0 49 #define AI_VECTOR2D_INL_INC
nuclear@0 50
nuclear@0 51 #ifdef __cplusplus
nuclear@0 52 #include "vector2.h"
nuclear@0 53
nuclear@0 54 #include <cmath>
nuclear@0 55
nuclear@0 56 // ------------------------------------------------------------------------------------------------
nuclear@0 57 template <typename TReal>
nuclear@0 58 template <typename TOther>
nuclear@0 59 aiVector2t<TReal>::operator aiVector2t<TOther> () const {
nuclear@0 60 return aiVector2t<TOther>(static_cast<TOther>(x),static_cast<TOther>(y));
nuclear@0 61 }
nuclear@0 62 // ------------------------------------------------------------------------------------------------
nuclear@0 63 template <typename TReal>
nuclear@0 64 inline
nuclear@0 65 void aiVector2t<TReal>::Set( TReal pX, TReal pY) {
nuclear@0 66 x = pX; y = pY;
nuclear@0 67 }
nuclear@0 68
nuclear@0 69 // ------------------------------------------------------------------------------------------------
nuclear@0 70 template <typename TReal>
nuclear@0 71 inline
nuclear@0 72 TReal aiVector2t<TReal>::SquareLength() const {
nuclear@0 73 return x*x + y*y;
nuclear@0 74 }
nuclear@0 75
nuclear@0 76 // ------------------------------------------------------------------------------------------------
nuclear@0 77 template <typename TReal>
nuclear@0 78 inline
nuclear@0 79 TReal aiVector2t<TReal>::Length() const {
nuclear@0 80 return std::sqrt( SquareLength());
nuclear@0 81 }
nuclear@0 82
nuclear@0 83 // ------------------------------------------------------------------------------------------------
nuclear@0 84 template <typename TReal>
nuclear@0 85 inline
nuclear@0 86 aiVector2t<TReal>& aiVector2t<TReal>::Normalize() {
nuclear@0 87 *this /= Length();
nuclear@0 88 return *this;
nuclear@0 89 }
nuclear@0 90
nuclear@0 91 // ------------------------------------------------------------------------------------------------
nuclear@0 92 template <typename TReal>
nuclear@0 93 inline
nuclear@0 94 const aiVector2t<TReal>& aiVector2t<TReal>::operator += (const aiVector2t& o) {
nuclear@0 95 x += o.x; y += o.y;
nuclear@0 96 return *this;
nuclear@0 97 }
nuclear@0 98
nuclear@0 99 // ------------------------------------------------------------------------------------------------
nuclear@0 100 template <typename TReal>
nuclear@0 101 inline
nuclear@0 102 const aiVector2t<TReal>& aiVector2t<TReal>::operator -= (const aiVector2t& o) {
nuclear@0 103 x -= o.x; y -= o.y;
nuclear@0 104 return *this;
nuclear@0 105 }
nuclear@0 106
nuclear@0 107 // ------------------------------------------------------------------------------------------------
nuclear@0 108 template <typename TReal>
nuclear@0 109 inline
nuclear@0 110 const aiVector2t<TReal>& aiVector2t<TReal>::operator *= (TReal f) {
nuclear@0 111 x *= f; y *= f;
nuclear@0 112 return *this;
nuclear@0 113 }
nuclear@0 114
nuclear@0 115 // ------------------------------------------------------------------------------------------------
nuclear@0 116 template <typename TReal>
nuclear@0 117 inline
nuclear@0 118 const aiVector2t<TReal>& aiVector2t<TReal>::operator /= (TReal f) {
nuclear@0 119 x /= f; y /= f;
nuclear@0 120 return *this;
nuclear@0 121 }
nuclear@0 122
nuclear@0 123 // ------------------------------------------------------------------------------------------------
nuclear@0 124 template <typename TReal>
nuclear@0 125 inline
nuclear@0 126 TReal aiVector2t<TReal>::operator[](unsigned int i) const {
nuclear@0 127 switch (i) {
nuclear@0 128 case 0:
nuclear@0 129 return x;
nuclear@0 130 case 1:
nuclear@0 131 return y;
nuclear@0 132 default:
nuclear@0 133 break;
nuclear@0 134
nuclear@0 135 }
nuclear@0 136 return x;
nuclear@0 137 }
nuclear@0 138
nuclear@0 139 // ------------------------------------------------------------------------------------------------
nuclear@0 140 template <typename TReal>
nuclear@0 141 inline
nuclear@0 142 bool aiVector2t<TReal>::operator== (const aiVector2t& other) const {
nuclear@0 143 return x == other.x && y == other.y;
nuclear@0 144 }
nuclear@0 145
nuclear@0 146 // ------------------------------------------------------------------------------------------------
nuclear@0 147 template <typename TReal>
nuclear@0 148 inline
nuclear@0 149 bool aiVector2t<TReal>::operator!= (const aiVector2t& other) const {
nuclear@0 150 return x != other.x || y != other.y;
nuclear@0 151 }
nuclear@0 152
nuclear@0 153 // ---------------------------------------------------------------------------
nuclear@0 154 template<typename TReal>
nuclear@0 155 inline
nuclear@0 156 bool aiVector2t<TReal>::Equal(const aiVector2t& other, TReal epsilon) const {
nuclear@0 157 return
nuclear@0 158 std::abs(x - other.x) <= epsilon &&
nuclear@0 159 std::abs(y - other.y) <= epsilon;
nuclear@0 160 }
nuclear@0 161
nuclear@0 162 // ------------------------------------------------------------------------------------------------
nuclear@0 163 template <typename TReal>
nuclear@0 164 inline
nuclear@0 165 aiVector2t<TReal>& aiVector2t<TReal>::operator= (TReal f) {
nuclear@0 166 x = y = f;
nuclear@0 167 return *this;
nuclear@0 168 }
nuclear@0 169
nuclear@0 170 // ------------------------------------------------------------------------------------------------
nuclear@0 171 template <typename TReal>
nuclear@0 172 inline
nuclear@0 173 const aiVector2t<TReal> aiVector2t<TReal>::SymMul(const aiVector2t& o) {
nuclear@0 174 return aiVector2t(x*o.x,y*o.y);
nuclear@0 175 }
nuclear@0 176
nuclear@0 177
nuclear@0 178 // ------------------------------------------------------------------------------------------------
nuclear@0 179 // symmetric addition
nuclear@0 180 template <typename TReal>
nuclear@0 181 inline
nuclear@0 182 aiVector2t<TReal> operator + (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2) {
nuclear@0 183 return aiVector2t<TReal>( v1.x + v2.x, v1.y + v2.y);
nuclear@0 184 }
nuclear@0 185
nuclear@0 186 // ------------------------------------------------------------------------------------------------
nuclear@0 187 // symmetric subtraction
nuclear@0 188 template <typename TReal>
nuclear@0 189 inline
nuclear@0 190 aiVector2t<TReal> operator - (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2) {
nuclear@0 191 return aiVector2t<TReal>( v1.x - v2.x, v1.y - v2.y);
nuclear@0 192 }
nuclear@0 193
nuclear@0 194 // ------------------------------------------------------------------------------------------------
nuclear@0 195 // scalar product
nuclear@0 196 template <typename TReal>
nuclear@0 197 inline
nuclear@0 198 TReal operator * (const aiVector2t<TReal>& v1, const aiVector2t<TReal>& v2) {
nuclear@0 199 return v1.x*v2.x + v1.y*v2.y;
nuclear@0 200 }
nuclear@0 201
nuclear@0 202 // ------------------------------------------------------------------------------------------------
nuclear@0 203 // scalar multiplication
nuclear@0 204 template <typename TReal>
nuclear@0 205 inline
nuclear@0 206 aiVector2t<TReal> operator * ( TReal f, const aiVector2t<TReal>& v) {
nuclear@0 207 return aiVector2t<TReal>( f*v.x, f*v.y);
nuclear@0 208 }
nuclear@0 209
nuclear@0 210 // ------------------------------------------------------------------------------------------------
nuclear@0 211 // and the other way around
nuclear@0 212 template <typename TReal>
nuclear@0 213 inline
nuclear@0 214 aiVector2t<TReal> operator * ( const aiVector2t<TReal>& v, TReal f) {
nuclear@0 215 return aiVector2t<TReal>( f*v.x, f*v.y);
nuclear@0 216 }
nuclear@0 217
nuclear@0 218 // ------------------------------------------------------------------------------------------------
nuclear@0 219 // scalar division
nuclear@0 220 template <typename TReal>
nuclear@0 221 inline
nuclear@0 222 aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, TReal f) {
nuclear@0 223 return v * (1/f);
nuclear@0 224 }
nuclear@0 225
nuclear@0 226 // ------------------------------------------------------------------------------------------------
nuclear@0 227 // vector division
nuclear@0 228 template <typename TReal>
nuclear@0 229 inline
nuclear@0 230 aiVector2t<TReal> operator / ( const aiVector2t<TReal>& v, const aiVector2t<TReal>& v2) {
nuclear@0 231 return aiVector2t<TReal>(v.x / v2.x,v.y / v2.y);
nuclear@0 232 }
nuclear@0 233
nuclear@0 234 // ------------------------------------------------------------------------------------------------
nuclear@0 235 // vector negation
nuclear@0 236 template <typename TReal>
nuclear@0 237 inline
nuclear@0 238 aiVector2t<TReal> operator - ( const aiVector2t<TReal>& v) {
nuclear@0 239 return aiVector2t<TReal>( -v.x, -v.y);
nuclear@0 240 }
nuclear@0 241
nuclear@0 242 #endif
nuclear@0 243
nuclear@0 244 #endif // AI_VECTOR2D_INL_INC