vector: add homogenous converter
added for symmetry with point classes
This commit is contained in:
parent
6095c755cf
commit
5b8df525a2
@ -246,6 +246,7 @@ UTIL_FILES = \
|
||||
variadic.ipp \
|
||||
vector.cpp \
|
||||
vector.hpp \
|
||||
vector.ipp \
|
||||
version.cpp \
|
||||
version.hpp \
|
||||
view.cpp \
|
||||
|
@ -11,7 +11,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Copyright 2011 Danny Robson <danny@nerdcruft.net>
|
||||
* Copyright 2011-2015 Danny Robson <danny@nerdcruft.net>
|
||||
*/
|
||||
|
||||
#ifndef __UTIL_VECTOR_HPP
|
||||
@ -45,6 +45,9 @@ namespace util {
|
||||
vector<S,T>& normalise (void);
|
||||
vector<S,T> normalised [[gnu::warn_unused_result]] (void) const;
|
||||
|
||||
// representations
|
||||
template <size_t D> vector<D,T> homog (void) const;
|
||||
|
||||
// constants
|
||||
static const vector<S,T> UNIT;
|
||||
static const vector<S,T> ZERO;
|
||||
@ -83,5 +86,7 @@ namespace util {
|
||||
typedef vector<3,double> vector4d;
|
||||
}
|
||||
|
||||
#include "vector.ipp"
|
||||
|
||||
#endif
|
||||
|
||||
|
33
vector.ipp
Normal file
33
vector.ipp
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Copyright 2011-2015 Danny Robson <danny@nerdcruft.net>
|
||||
*/
|
||||
|
||||
#if defined(__UTIL_VECTOR_IPP)
|
||||
#error
|
||||
#else
|
||||
#define __UTIL_VECTOR_IPP
|
||||
#endif
|
||||
|
||||
|
||||
namespace util {
|
||||
template <size_t S, typename T>
|
||||
template <size_t D>
|
||||
vector<D,T>
|
||||
vector<S,T>::homog (void) const
|
||||
{
|
||||
static_assert (D > S, "reducing size loses data");
|
||||
return (*this).template redim<D> (0.f);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user