summaryrefslogtreecommitdiff
path: root/modules/codec/c++
diff options
context:
space:
mode:
Diffstat (limited to 'modules/codec/c++')
-rw-r--r--modules/codec/c++/math.hpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/modules/codec/c++/math.hpp b/modules/codec/c++/math.hpp
index a227b46..34c64c7 100644
--- a/modules/codec/c++/math.hpp
+++ b/modules/codec/c++/math.hpp
@@ -107,5 +107,47 @@ data<schema::Scalar<T>,Encoding> cross(
return cross_prod;
}
+
+template<typename T, typename Encoding = FORSTIO_DEFAULT_DATA_ENCODING>
+data<schema::Scalar<T>,Encoding> cos(
+ const data<schema::Scalar<T>,Encoding>& val
+){
+ data<schema::Scalar<T>,Encoding> ret;
+ ret.at({}).set(std::cos(val.at({}).get()));
+ return ret;
+}
+
+template<typename T, typename Encoding = FORSTIO_DEFAULT_DATA_ENCODING>
+data<schema::Scalar<T>,Encoding> sin(
+ const data<schema::Scalar<T>,Encoding>& val
+){
+ data<schema::Scalar<T>,Encoding> ret;
+ ret.at({}).set(std::sin(val.at({}).get()));
+ return ret;
+}
+
+
+template<typename T, typename Encoding = FORSTIO_DEFAULT_DATA_ENCODING>
+data<schema::Vector<T,2u>,Encoding> rotate(
+ const data<schema::Vector<T,2u>, Encoding> vec,
+ const data<schema::Scalar<T>, Encoding> rot
+){
+ data<schema::Vector<T,2u>, Encoding> rot_vec;
+ rot_vec.at({{0u}}) = vec.at({{0u}}) * cos(rot);
+ rot_vec.at({{1u}}) = vec.at({{1u}}) * sin(rot);
+ return rot_vec;
+}
+
+template<typename T, uint64_t D, typename Encoding = FORSTIO_DEFAULT_DATA_ENCODING>
+data<schema::Vector<T,D>,Encoding> scale(
+ const data<schema::Vector<T,D>, Encoding> vec,
+ const data<schema::Scalar<T>, Encoding> scale
+){
+ data<schema::Vector<T,D>, Encoding> sc_vec;
+ for(uint64_t i = 0u; i< D; ++i){
+ sc_vec.at({{i}}) = vec.at({{i}}) * scale;
+ }
+ return sc_vec;
+}
}
}