From 17f62e87887eb406f6af54c9765eba17c2f71631 Mon Sep 17 00:00:00 2001 From: k-a-z-u Date: Wed, 1 Aug 2018 18:07:10 +0200 Subject: [PATCH 1/6] minor changes --- floorplan/3D/Builder.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/floorplan/3D/Builder.h b/floorplan/3D/Builder.h index fb9ce77..0c2f4cd 100644 --- a/floorplan/3D/Builder.h +++ b/floorplan/3D/Builder.h @@ -32,7 +32,7 @@ namespace Floorplan3D { bool fancyStairs = true; bool exportHandrails = true; bool exportDoors = true; - bool exportAboveDoors = true; + // bool exportAboveDoors = true; bool doorsOpen = false; bool exportObjects = true; bool exportPillars = true; From d6ac8a72cabd5b0bb29735eb33087f6e01d70ea6 Mon Sep 17 00:00:00 2001 From: frank Date: Mon, 6 Aug 2018 18:33:17 +0200 Subject: [PATCH 2/6] worked on fir/iir filters --- math/dsp/fir/Complex.h | 12 +- math/dsp/fir/Real.h | 15 +- math/dsp/iir/BiQuad.h | 274 +++++++++++++------------ sensors/imu/PoseDetection.h | 344 +++----------------------------- sensors/imu/PoseDetectionPlot.h | 13 ++ 5 files changed, 216 insertions(+), 442 deletions(-) diff --git a/math/dsp/fir/Complex.h b/math/dsp/fir/Complex.h index 513ef6a..a194e13 100644 --- a/math/dsp/fir/Complex.h +++ b/math/dsp/fir/Complex.h @@ -181,8 +181,16 @@ private: } // https://dsp.stackexchange.com/questions/4693/fir-filter-gain - static void normalizeAC(std::vector>& kernel, const float freq) { - throw std::runtime_error("TODO"); + static void normalizeAC(std::vector>& kernel, const float freq, const float sRate) { +// std::complex sum; +// for (size_t i = 0; i < kernel.size(); ++i) { +// const float t = (float) i / sRate; +// const float v = std::sin(t*freq); + +// } +// for (auto f : kernel) {sum += f * sin;} +// for (auto& f : kernel) {f /= sum;} + throw std::runtime_error("todo"); } /** build a lowpass filter kernel */ diff --git a/math/dsp/fir/Real.h b/math/dsp/fir/Real.h index cae949c..c7eec85 100644 --- a/math/dsp/fir/Real.h +++ b/math/dsp/fir/Real.h @@ -35,6 +35,16 @@ namespace FIR { this->kernel = kernel; } + const Kernel& getKernel() const { + return this->kernel; + } + + void prefill(float val) { + for (size_t i = 0; i < (kernel.size()-1)/2; ++i) { + append(val); + } + } + /** filter the given incoming real data */ DataVec append(const DataVec& newData) { // append to local buffer (as we need some history) @@ -56,10 +66,11 @@ namespace FIR { DataVec processLocalBuffer() { // sanity check - Assert::isNot0(kernel.size(), "FIRComplex:: kernel not yet configured!"); + Assert::isNot0(kernel.size(), "FIR::Real::Filter kernel not yet configured!"); // number of processable elements (due to filter size) - const int processable = data.size() - kernel.size() + 1 - kernel.size()/2; + //const int processable = data.size() - kernel.size() + 1 - kernel.size()/2; + const int processable = data.size() - kernel.size(); // nothing to-do? if (processable <= 0) {return DataVec();} diff --git a/math/dsp/iir/BiQuad.h b/math/dsp/iir/BiQuad.h index 39bd679..67aee40 100644 --- a/math/dsp/iir/BiQuad.h +++ b/math/dsp/iir/BiQuad.h @@ -46,6 +46,14 @@ namespace IIR { } + float getA0() {return 1;} + float getA1() {return a1a0;} + float getA2() {return a2a0;} + + float getB0() {return b0a0;} + float getB1() {return b1a0;} + float getB2() {return b2a0;} + void preFill(const Scalar s) { for (int i = 0; i < 100; ++i) { filter(s); @@ -67,12 +75,14 @@ namespace IIR { } /** configure the filter as low-pass. freqFact between ]0;0.5[ */ - void setLowPass( double freqFact, const float octaves ) { + //void setLowPass( double freqFact, const float octaves ) { + void setLowPass( double freqFact, const float Q ) { sanityCheck(freqFact); double w0 = 2.0 * M_PI * freqFact; - double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + //double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + double alpha = sin(w0)/(2*Q); double b0 = (1.0 - cos(w0))/2.0; double b1 = 1.0 - cos(w0); @@ -94,46 +104,48 @@ namespace IIR { - //http://dspwiki.com/index.php?title=Lowpass_Resonant_Biquad_Filter - //http://www.opensource.apple.com/source/WebCore/WebCore-7536.26.14/platform/audio/Biquad.cpp - /** - * configure as low-pass filter with resonance - * @param freqFact the frequency factor between ]0;0.5[ - * @param res - */ - void setLowPassResonance( double freqFact, float res ) { +// //http://dspwiki.com/index.php?title=Lowpass_Resonant_Biquad_Filter +// //http://www.opensource.apple.com/source/WebCore/WebCore-7536.26.14/platform/audio/Biquad.cpp +// /** +// * configure as low-pass filter with resonance +// * @param freqFact the frequency factor between ]0;0.5[ +// * @param res +// */ +// void setLowPassResonance( double freqFact, float res ) { - sanityCheck(freqFact); +// sanityCheck(freqFact); - res *= 10; +// res *= 10; - double g = pow(10.0, 0.05 * res); - double d = sqrt((4 - sqrt(16 - 16 / (g * g))) / 2); +// double g = pow(10.0, 0.05 * res); +// double d = sqrt((4 - sqrt(16 - 16 / (g * g))) / 2); - double theta = M_PI * freqFact; - double sn = 0.5 * d * sin(theta); - double beta = 0.5 * (1 - sn) / (1 + sn); - double gamma = (0.5 + beta) * cos(theta); - double alpha = 0.25 * (0.5 + beta - gamma); +// double theta = M_PI * freqFact; +// double sn = 0.5 * d * sin(theta); +// double beta = 0.5 * (1 - sn) / (1 + sn); +// double gamma = (0.5 + beta) * cos(theta); +// double alpha = 0.25 * (0.5 + beta - gamma); - double a0 = 1.0; - double b0 = 2.0 * alpha; - double b1 = 2.0 * 2.0 * alpha; - double b2 = 2.0 * alpha; - double a1 = 2.0 * -gamma; - double a2 = 2.0 * beta; +// double a0 = 1.0; +// double b0 = 2.0 * alpha; +// double b1 = 2.0 * 2.0 * alpha; +// double b2 = 2.0 * alpha; +// double a1 = 2.0 * -gamma; +// double a2 = 2.0 * beta; - setValues(a0, a1, a2, b0, b1, b2); +// setValues(a0, a1, a2, b0, b1, b2); - } +// } /** configure the filter as high-pass. freqFact between ]0;0.5[ */ - void setHighPass( double freqFact, const float octaves ) { + //void setHighPass( double freqFact, const float octaves ) { + void setHighPass( double freqFact, const float Q ) { sanityCheck(freqFact); double w0 = 2.0 * M_PI * freqFact; - double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + //double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + double alpha = sin(w0)/(2*Q); double b0 = (1.0 + cos(w0))/2.0; double b1 = -(1.0 + cos(w0)); @@ -153,17 +165,21 @@ namespace IIR { } /** configure the filter as band-pass. freqFact between ]0;0.5[ */ - void setBandPass( double freqFact, const float octaves ) { + //void setBandPass( double freqFact, const float octaves ) { + void setBandPass( double freqFact, const float Q ) { sanityCheck(freqFact); //double w0 = 2 * K_PI * / 2 / freqFact; double w0 = 2.0 * M_PI * freqFact; - double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + //double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + double alpha = sin(w0)/(2*Q); - double b0 = sin(w0)/2.0; + + // constant 0dB peak gain + double b0 = alpha; double b1 = 0.0; - double b2 = -sin(w0)/2.0; + double b2 = -alpha; double a0 = 1.0 + alpha; double a1 = -2.0*cos(w0); double a2 = 1.0 - alpha; @@ -179,108 +195,112 @@ namespace IIR { } - /** configure the filter as all-pass. freqFact between ]0;0.5[ */ - void setAllPass( double freqFact, const float octaves ) { +// /** configure the filter as all-pass. freqFact between ]0;0.5[ */ +// void setAllPass( double freqFact, const float octaves ) { - sanityCheck(freqFact); +// sanityCheck(freqFact); - double w0 = 2.0 * M_PI * freqFact; - double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); +// double w0 = 2.0 * M_PI * freqFact; +// double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); - double b0 = 1 - alpha; - double b1 = -2*cos(w0); - double b2 = 1 + alpha; - double a0 = 1 + alpha; - double a1 = -2*cos(w0); - double a2 = 1 - alpha; +// double b0 = 1 - alpha; +// double b1 = -2*cos(w0); +// double b2 = 1 + alpha; +// double a0 = 1 + alpha; +// double a1 = -2*cos(w0); +// double a2 = 1 - alpha; - setValues(a0, a1, a2, b0, b1, b2); +// setValues(a0, a1, a2, b0, b1, b2); - } +// } - /** configure the filter as all-pass */ - void setAllPass( const float freq, const float octaves, const float sRate ) { - double freqFact = double(freq) / double(sRate); - setAllPass(freqFact, octaves); - } - - /** configure as notch filter. freqFact between ]0;0.5[ */ - void setNotch( double freqFact, const float octaves ) { - - sanityCheck(freqFact); - - double w0 = 2.0 * M_PI * freqFact; - double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); - - double b0 = 1.0; - double b1 = -2.0*cos(w0); - double b2 = 1.0; - double a0 = 1.0 + alpha; - double a1 = -2.0*cos(w0); - double a2 = 1.0 - alpha; - - setValues(a0, a1, a2, b0, b1, b2); - - } - - /** configure as notch filter */ - void setNotch( const float freq, const float octaves, const float sRate ) { - double freqFact = double(freq) / double(sRate); - setNotch(freqFact, octaves); - } - - /** configure the filter as low-shelf. increase all aplitudes below freq? freqFact between ]0;0.5[ */ - void setLowShelf( double freqFact, const float octaves, const float gain ) { - - sanityCheck(freqFact); - - double A = sqrt( pow(10, (gain/20.0)) ); - double w0 = 2.0 * M_PI * freqFact; - double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); - - double b0 = A*( (A+1.0) - (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha ); - double b1 = 2.0*A*( (A-1.0) - (A+1.0)*cos(w0) ); - double b2 = A*( (A+1.0) - (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha ); - double a0 = (A+1.0) + (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha; - double a1 = -2.0*( (A-1.0) + (A+1.0)*cos(w0) ); - double a2 = (A+1.0) + (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha; - - setValues(a0, a1, a2, b0, b1, b2); - - } - - /** configure the filter as low-shelf. increase all aplitudes below freq? */ - void setLowShelf( const float freq, const float octaves, const float gain, const float sRate ) { - double freqFact = double(freq) / double(sRate); - setLowShelf(freqFact, octaves, gain); - } - - /** configure the filter as high-shelf. increase all amplitues above freq? freqFact between ]0;0.5[ */ - void setHighShelf( double freqFact, const float octaves, const float gain ) { - - sanityCheck(freqFact); - - double A = sqrt( pow(10, (gain/20.0)) ); - double w0 = 2.0 * M_PI * freqFact; - double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); - - double b0 = A*( (A+1.0) + (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha ); - double b1 = -2.0*A*( (A-1.0) + (A+1.0)*cos(w0) ); - double b2 = A*( (A+1.0) + (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha ); - double a0 = (A+1.0) - (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha; - double a1 = 2.0*( (A-1.0) - (A+1.0)*cos(w0) ); - double a2 = (A+1.0) - (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha; - - setValues(a0, a1, a2, b0, b1, b2); - - } +// /** configure the filter as all-pass */ +// void setAllPass( const float freq, const float octaves, const float sRate ) { +// double freqFact = double(freq) / double(sRate); +// setAllPass(freqFact, octaves); +// } - /** configure the filter as high-shelf. increase all amplitues above freq? */ - void setHighShelf( const float freq, const float octaves, const float gain, const float sRate ) { - double freqFact = double(freq) / double(sRate); - setHighShelf(freqFact, octaves, gain); - } + + +// /** configure as notch filter. freqFact between ]0;0.5[ */ +// //void setNotch( double freqFact, const float octaves ) { +// void setNotch( double freqFact, const float Q ) { + +// sanityCheck(freqFact); + +// double w0 = 2.0 * M_PI * freqFact; +// double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + +// double b0 = 1.0; +// double b1 = -2.0*cos(w0); +// double b2 = 1.0; +// double a0 = 1.0 + alpha; +// double a1 = -2.0*cos(w0); +// double a2 = 1.0 - alpha; + +// setValues(a0, a1, a2, b0, b1, b2); + +// } + +// /** configure as notch filter */ +// void setNotch( const float freq, const float octaves, const float sRate ) { +// double freqFact = double(freq) / double(sRate); +// setNotch(freqFact, octaves); +// } + +// /** configure the filter as low-shelf. increase all aplitudes below freq? freqFact between ]0;0.5[ */ +// void setLowShelf( double freqFact, const float octaves, const float gain ) { + +// sanityCheck(freqFact); + +// double A = sqrt( pow(10, (gain/20.0)) ); +// double w0 = 2.0 * M_PI * freqFact; +// double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + +// double b0 = A*( (A+1.0) - (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha ); +// double b1 = 2.0*A*( (A-1.0) - (A+1.0)*cos(w0) ); +// double b2 = A*( (A+1.0) - (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha ); +// double a0 = (A+1.0) + (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha; +// double a1 = -2.0*( (A-1.0) + (A+1.0)*cos(w0) ); +// double a2 = (A+1.0) + (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha; + +// setValues(a0, a1, a2, b0, b1, b2); + +// } + +// /** configure the filter as low-shelf. increase all aplitudes below freq? */ +// void setLowShelf( const float freq, const float octaves, const float gain, const float sRate ) { +// double freqFact = double(freq) / double(sRate); +// setLowShelf(freqFact, octaves, gain); +// } + +// /** configure the filter as high-shelf. increase all amplitues above freq? freqFact between ]0;0.5[ */ +// void setHighShelf( double freqFact, const float octaves, const float gain ) { + +// sanityCheck(freqFact); + +// double A = sqrt( pow(10, (gain/20.0)) ); +// double w0 = 2.0 * M_PI * freqFact; +// double alpha = sin(w0)*sinh( log(2)/2 * octaves * w0/sin(w0) ); + +// double b0 = A*( (A+1.0) + (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha ); +// double b1 = -2.0*A*( (A-1.0) + (A+1.0)*cos(w0) ); +// double b2 = A*( (A+1.0) + (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha ); +// double a0 = (A+1.0) - (A-1.0)*cos(w0) + 2.0*sqrt(A)*alpha; +// double a1 = 2.0*( (A-1.0) - (A+1.0)*cos(w0) ); +// double a2 = (A+1.0) - (A-1.0)*cos(w0) - 2.0*sqrt(A)*alpha; + +// setValues(a0, a1, a2, b0, b1, b2); + +// } + + +// /** configure the filter as high-shelf. increase all amplitues above freq? */ +// void setHighShelf( const float freq, const float octaves, const float gain, const float sRate ) { +// double freqFact = double(freq) / double(sRate); +// setHighShelf(freqFact, octaves, gain); +// } protected: diff --git a/sensors/imu/PoseDetection.h b/sensors/imu/PoseDetection.h index c3c0770..968c3f1 100644 --- a/sensors/imu/PoseDetection.h +++ b/sensors/imu/PoseDetection.h @@ -21,61 +21,6 @@ */ class PoseDetection { -// struct LongTermTriggerAverage { - -// Eigen::Vector3f sum; -// int cnt; - -// XYZ() { -// reset(); -// } - -// /** add the given accelerometer reading */ -// void addAcc(const Timestamp ts, const AccelerometerData& acc) { - -// // did NOT improve the result for every smartphone (only some) -// //const float deltaMag = std::abs(acc.magnitude() - 9.81); -// //if (deltaMag > 5.0) {return;} - -// // adjust sum and count (for average calculation) -// Eigen::Vector3f vec; vec << acc.x, acc.y, acc.z; -// sum += vec; -// ++cnt; - - -// } - -// AccelerometerData getAvg() const { -// return AccelerometerData(sum(0), sum(1), sum(2)) / cnt; -// } - -// /** get the current rotation matrix estimation */ -// Eigen::Matrix3f get() const { - -// // get the current acceleromter average -// const Eigen::Vector3f avg = sum / cnt; - -// // rotate average accelerometer into (0,0,1) -// Eigen::Vector3f zAxis; zAxis << 0, 0, 1; -// const Eigen::Matrix3f rotMat = getRotationMatrix(avg.normalized(), zAxis); - -// // just a small sanity check. after applying to rotation the acc-average should become (0,0,1) -// Eigen::Vector3f aligned = (rotMat * avg).normalized(); -// Assert::isTrue((aligned-zAxis).norm() < 0.1f, "deviation too high"); - -// return rotMat; - -// } - -// /** reset the current sum etc. */ -// void reset() { -// cnt = 0; -// sum = Eigen::Vector3f::Zero(); -// } - - -// }; - /** live-pose-estimation using moving average of the smartphone's accelerometer */ struct EstMovingAverage { @@ -127,52 +72,52 @@ class PoseDetection { }; - /** live-pose-estimation using moving median of the smartphone's accelerometer */ - struct EstMovingMedian { +// /** live-pose-estimation using moving median of the smartphone's accelerometer */ +// struct EstMovingMedian { - // median the accelerometer - MovingMedianTS medianX; - MovingMedianTS medianY; - MovingMedianTS medianZ; +// // median the accelerometer +// MovingMedianTS medianX; +// MovingMedianTS medianY; +// MovingMedianTS medianZ; - EstMovingMedian(const Timestamp window) : - medianX(window), medianY(window), medianZ(window) { +// EstMovingMedian(const Timestamp window) : +// medianX(window), medianY(window), medianZ(window) { - // start approximately - addAcc(Timestamp(), AccelerometerData(0,0,9.81)); +// // start approximately +// addAcc(Timestamp(), AccelerometerData(0,0,9.81)); - } +// } - /** add the given accelerometer reading */ - void addAcc(const Timestamp ts, const AccelerometerData& acc) { - medianX.add(ts, acc.x); - medianY.add(ts, acc.y); - medianZ.add(ts, acc.z); - } +// /** add the given accelerometer reading */ +// void addAcc(const Timestamp ts, const AccelerometerData& acc) { +// medianX.add(ts, acc.x); +// medianY.add(ts, acc.y); +// medianZ.add(ts, acc.z); +// } - AccelerometerData getBase() const { - return AccelerometerData(medianX.get(), medianY.get(), medianZ.get()); - } +// AccelerometerData getBase() const { +// return AccelerometerData(medianX.get(), medianY.get(), medianZ.get()); +// } - /** get the current rotation matrix estimation */ - //Eigen::Matrix3f get() const { - Matrix3 get() const { +// /** get the current rotation matrix estimation */ +// //Eigen::Matrix3f get() const { +// Matrix3 get() const { - const Vector3 base(medianX.get(), medianY.get(), medianZ.get()); +// const Vector3 base(medianX.get(), medianY.get(), medianZ.get()); - // rotate average-accelerometer into (0,0,1) - const Vector3 zAxis(0,0,1); - const Matrix3 rotMat = getRotationMatrix(base.normalized(), zAxis); +// // rotate average-accelerometer into (0,0,1) +// const Vector3 zAxis(0,0,1); +// const Matrix3 rotMat = getRotationMatrix(base.normalized(), zAxis); - // just a small sanity check. after applying to rotation the acc-average should become (0,0,1) - const Vector3 aligned = (rotMat * base).normalized(); - Assert::isTrue((aligned-zAxis).norm() < 0.1f, "deviation too high"); +// // just a small sanity check. after applying to rotation the acc-average should become (0,0,1) +// const Vector3 aligned = (rotMat * base).normalized(); +// Assert::isTrue((aligned-zAxis).norm() < 0.1f, "deviation too high"); - return rotMat; +// return rotMat; - } +// } - }; +// }; @@ -202,11 +147,6 @@ public: ; } -// /** get the smartphone's rotation matrix */ -// Eigen::Matrix3f getMatrix() const { -// return orientation.rotationMatrix; -// } - /** get the smartphone's rotation matrix */ const Matrix3& getMatrix() const { return orientation.rotationMatrix; @@ -236,22 +176,6 @@ public: public: -// /** get a matrix that rotates the vector "from" into the vector "to" */ -// static Eigen::Matrix3f getRotationMatrix(const Eigen::Vector3f& from, const Eigen::Vector3f to) { - -// // http://math.stackexchange.com/questions/293116/rotating-one-3d-vector-to-another - -// const Eigen::Vector3f x = from.cross(to) / from.cross(to).norm(); -// const float angle = std::acos( from.dot(to) / from.norm() / to.norm() ); - -// Eigen::Matrix3f A; A << -// 0, -x(2), x(1), -// x(2), 0, -x(0), -// -x(1), x(0), 0; - -// return Eigen::Matrix3f::Identity() + (std::sin(angle) * A) + ((1-std::cos(angle)) * (A*A)); - -// } /** get a matrix that rotates the vector "from" into the vector "to" */ static Matrix3 getRotationMatrix(const Vector3& from, const Vector3 to) { @@ -271,208 +195,6 @@ public: } - - - - -// /** get a rotation matrix for the given x,y,z rotation (in radians) */ -// static Eigen::Matrix3f getRotation(const float x, const float y, const float z) { -// const float g = x; const float b = y; const float a = z; -// const float a11 = std::cos(a)*std::cos(b); -// const float a12 = std::cos(a)*std::sin(b)*std::sin(g)-std::sin(a)*std::cos(g); -// const float a13 = std::cos(a)*std::sin(b)*std::cos(g)+std::sin(a)*std::sin(g); -// const float a21 = std::sin(a)*std::cos(b); -// const float a22 = std::sin(a)*std::sin(b)*std::sin(g)+std::cos(a)*std::cos(g); -// const float a23 = std::sin(a)*std::sin(b)*std::cos(g)-std::cos(a)*std::sin(g); -// const float a31 = -std::sin(b); -// const float a32 = std::cos(b)*std::sin(g); -// const float a33 = std::cos(b)*std::cos(g); -// Eigen::Matrix3f m; -// m << -// a11, a12, a13, -// a21, a22, a23, -// a31, a32, a33; -// ; -// return m; -// } - -// /** estimate the smartphones current holding position */ -// void estimateHolding2() { - - -// // z-axis points through the device and is the axis we are interested in -// // http://www.kircherelectronics.com/blog/index.php/11-android/sensors/15-android-gyroscope-basics - -// avgAcc = Eigen::Vector3f::Zero(); - -// for (const AccelerometerData& acc : accData) { -// //for (const GyroscopeData& acc : gyroData) { -// Eigen::Vector3f vec; vec << std::abs(acc.x), std::abs(acc.y), std::abs(acc.z); -// // Eigen::Vector3f vec; vec << std::abs(acc.x), std::abs(acc.y), std::abs(acc.z); -// avgAcc += vec; -// } - -// //avgAcc /= accData.size(); -// avgAcc = avgAcc.normalized(); - -// Eigen::Vector3f rev; rev << 0,0,1; - -// rotMat = getRotationMatrix(avgAcc, rev); - - -// //Assert::isTrue(avgAcc(2) > avgAcc(0), "z is not the gravity axis"); -// //Assert::isTrue(avgAcc(2) > avgAcc(1), "z is not the gravity axis"); -//// Eigen::Vector3f re = rotMat * avgAcc; -//// Eigen::Vector3f diff = rev-re; -//// Assert::isTrue(diff.norm() < 0.001, "rotation error"); - -// } - -// struct RotationMatrixEstimationUsingAccAngle { - -// Eigen::Vector3f lastAvg; -// Eigen::Vector3f avg; -// int cnt; - -// RotationMatrixEstimationUsingAccAngle() { -// reset(); -// } - -// void add(const float x, const float y, const float z) { - -// Eigen::Vector3f vec; vec << x,y,z; -// avg += vec; -// ++cnt; - -// } - -// void reset() { -// cnt = 0; -// avg = Eigen::Vector3f::Zero(); -// } - -// Eigen::Matrix3f get() { - -// // http://www.hobbytronics.co.uk/accelerometer-info - -// avg /= cnt; -// lastAvg = avg; - -// //const float mag = avg.norm(); - -// const float baseX = 0; -// const float baseY = 0; -// const float baseZ = 0; // mag? - -// const float x = avg(0) - baseX; -// const float y = avg(1) - baseY; -// const float z = avg(2) - baseZ; - -// const float ax = std::atan( x / (std::sqrt(y*y + z*z)) ); -// const float ay = std::atan( y / (std::sqrt(x*x + z*z)) ); - -// const Eigen::Matrix3f rotMat = getRotation(ay, -ax, 0); // TODO -ax or +ax? - -// // sanity check -// Eigen::Vector3f zAxis; zAxis << 0, 0, 1; -// Eigen::Vector3f aligned = (rotMat * avg).normalized(); -// Assert::isTrue((aligned-zAxis).norm() < 0.1f, "deviation too high"); -// // int i = 0; (void) i; - -// reset(); -// return rotMat; - -// } - -// } est; - -// struct PCA { - -// Eigen::Vector3f avg; -// Eigen::Vector3f lastAvg; -// Eigen::Matrix3f covar; -// int cnt = 0; - -// PCA() { -// reset(); -// } - -// void add(const float x, const float y, const float z) { - -// Eigen::Vector3f vec; vec << x,y,z; -// avg += vec; -// covar += vec*vec.transpose(); -// ++cnt; - -// } - -// Eigen::Matrix3f get() { - -// avg /= cnt; -// covar /= cnt; -// lastAvg = avg; - -// std::cout << avg << std::endl; - -// Eigen::Matrix3f Q = covar;// - avg*avg.transpose(); -// for (int i = 0; i < 9; ++i) {Q(i) = std::abs(Q(i));} - -// Eigen::SelfAdjointEigenSolver solver(Q); -// solver.eigenvalues(); -// solver.eigenvectors(); - -// const auto eval = solver.eigenvalues(); -// const auto evec = solver.eigenvectors(); -// Assert::isTrue(eval(2) > eval(1) && eval(1) > eval(0), "eigenvalues are not sorted!"); - -// Eigen::Matrix3f rotMat; -// rotMat.col(0) = evec.col(0); -// rotMat.col(1) = evec.col(1); -// rotMat.col(2) = evec.col(2); // 0,0,1 (z-axis) belongs to the strongest eigenvalue -// rotMat.transposeInPlace(); - -// //Eigen::Vector3f gy; gy << 0, 30, 30; -// Eigen::Vector3f avg1 = rotMat * avg; -// int i = 0; (void) i; - -// reset(); - -// return rotMat; - -// } - -// void reset() { -// cnt = 0; -// avg = Eigen::Vector3f::Zero(); -// covar = Eigen::Matrix3f::Zero(); -// } - - -// } pca1; - - - - -// /** estimate the smartphones current holding position */ -// void estimateHolding() { - -// Eigen::Vector3f avg = Eigen::Vector3f::Zero(); -// Eigen::Matrix3f covar = Eigen::Matrix3f::Zero(); - -// for (const AccelerometerData& acc : accData) { -//// for (const GyroscopeData& acc : gyroData) { -// Eigen::Vector3f vec; vec << std::abs(acc.x), std::abs(acc.y), std::abs(acc.z); -//// Eigen::Vector3f vec; vec << (acc.x), (acc.y), (acc.z); -// avg += vec; -// covar += vec * vec.transpose(); -// } - -// avg /= accData.size(); // TODO -// covar /= accData.size(); //TODO - -// avgAcc = avg.normalized(); - - }; diff --git a/sensors/imu/PoseDetectionPlot.h b/sensors/imu/PoseDetectionPlot.h index 74aae10..46b0d8f 100644 --- a/sensors/imu/PoseDetectionPlot.h +++ b/sensors/imu/PoseDetectionPlot.h @@ -111,6 +111,19 @@ } } +// // update un-rotated 3D smartphone model +// for (size_t i = 0; i < pose.size(); ++i) { +// K::GnuplotObjectPolygon* gp = (K::GnuplotObjectPolygon*) plotPose.getObjects().get(i+1); gp->clear(); +// for (const std::vector& pts : pose[i]) { +// const Vector3 vec1(pts[0], pts[1], pts[2]); +// const Vector3 vec2 = vec1 - Vector3(0.5, 0.5, 0.5); // center cube at 0,0,0 +// const Vector3 vec3 = vec2 * Vector3(7, 15, 1); // stretch cube +// const Vector3 vec4 = rotation * vec3; + +// gp->add(K::GnuplotCoordinate3(vec4.x, vec4.y, vec4.z, K::GnuplotCoordinateSystem::FIRST)); +// } +// } + // add coordinate system const Vector3 vx = rotation * Vector3(2,0,0); const Vector3 vy = rotation * Vector3(0,3,0); From f990485d44a34ace7e57ac1b1a0f1f7c0830e33a Mon Sep 17 00:00:00 2001 From: frank Date: Tue, 7 Aug 2018 19:36:07 +0200 Subject: [PATCH 3/6] worked on step-detection adjusted iir biquad added biquad-stacking --- math/dsp/iir/BiQuad.h | 12 ++++----- math/dsp/iir/BiQuadStack.h | 42 ++++++++++++++++++++++++++++++++ sensors/imu/StepDetection2.h | 47 +++++++++++++++++++++++------------- sensors/imu/StepDetection3.h | 44 ++++++++++++++++++++++++--------- sensors/imu/StepDetection4.h | 34 ++++++++++++++++++-------- 5 files changed, 135 insertions(+), 44 deletions(-) create mode 100644 math/dsp/iir/BiQuadStack.h diff --git a/math/dsp/iir/BiQuad.h b/math/dsp/iir/BiQuad.h index 67aee40..ad15eb8 100644 --- a/math/dsp/iir/BiQuad.h +++ b/math/dsp/iir/BiQuad.h @@ -97,9 +97,9 @@ namespace IIR { /** configure the filter as low-pass */ - void setLowPass( const float freq, const float octaves, const float sRate ) { + void setLowPass( const float freq, const float Q, const float sRate ) { double freqFact = double(freq) / double(sRate); - setLowPass(freqFact, octaves); + setLowPass(freqFact, Q); } @@ -159,9 +159,9 @@ namespace IIR { } /** configure the filter as high-pass */ - void setHighPass( const float freq, const float octaves, const float sRate ) { + void setHighPass( const float freq, const float Q, const float sRate ) { double freqFact = double(freq) / double(sRate); - setHighPass(freqFact, octaves); + setHighPass(freqFact, Q); } /** configure the filter as band-pass. freqFact between ]0;0.5[ */ @@ -189,9 +189,9 @@ namespace IIR { } /** configure the filter as band-pass */ - void setBandPass( const float freq, const float octaves, float sRate ) { + void setBandPass( const float freq, const float Q, float sRate ) { double freqFact = double(freq) / double(sRate); - setBandPass(freqFact, octaves); + setBandPass(freqFact, Q); } diff --git a/math/dsp/iir/BiQuadStack.h b/math/dsp/iir/BiQuadStack.h new file mode 100644 index 0000000..6c92203 --- /dev/null +++ b/math/dsp/iir/BiQuadStack.h @@ -0,0 +1,42 @@ +#ifndef BIQUADSTACK_H +#define BIQUADSTACK_H + +#include +#include "BiQuad.h" + +namespace IIR { + + template class BiQuadStack { + + std::vector> filters; + + public: + + BiQuadStack() { + ; + } + + BiQuadStack(const int num) { + filters.resize(num); + } + + void resize(const int num) { + filters.resize(num); + } + + BiQuad& operator [] (const size_t idx) { + return filters.at(idx); + } + + Scalar filter(Scalar val) { + for (BiQuad& bq : filters) { + val = bq.filter(val); + } + return val; + } + + }; + +} + +#endif // BIQUADSTACK_H diff --git a/sensors/imu/StepDetection2.h b/sensors/imu/StepDetection2.h index 7cee7e6..0bb354b 100644 --- a/sensors/imu/StepDetection2.h +++ b/sensors/imu/StepDetection2.h @@ -22,8 +22,9 @@ #endif #include "../../Assertions.h" -#include "../../math/dsp/fir/Real.h" -#include "../../math/dsp/fir/RealFactory.h" +#include "../../math/dsp/iir/BiQuadStack.h" +//#include "../../math/dsp/fir/Real.h" +//#include "../../math/dsp/fir/RealFactory.h" #include "../../math/FixedFrequencyInterpolator.h" #include "../../math/LocalMaxima.h" #include "../../math/MovingAverageTS.h" @@ -36,19 +37,20 @@ */ class StepDetection2 { - static constexpr int sRate_hz = 75; + static constexpr int sRate_hz = 100; static constexpr int every_ms = 1000 / sRate_hz; private: FixedFrequencyInterpolator interpol; - FIR::Real::Filter fir; + //FIR::Real::Filter fir; + IIR::BiQuadStack biquad; LocalMaxima locMax; // longterm average to center around zero MovingAverageTS avg = MovingAverageTS(Timestamp::fromMS(2000), 0); - const float threshold = 0.50; + float threshold = 0.50; #ifdef WITH_DEBUG_PLOT K::Gnuplot gp; @@ -69,16 +71,28 @@ private: public: /** ctor */ - StepDetection2() : interpol(Timestamp::fromMS(every_ms)), locMax(8) { + StepDetection2(bool useBandPass) : interpol(Timestamp::fromMS(every_ms)), locMax(8) { //fir.lowPass(0.66, 40); // allow deviation of +/- 0.66Hz //fir.shiftBy(2.00); // typical step freq ~2Hz //fir.lowPass(3.5, 25); // everything up to 3 HZ - FIR::Real::Factory fac(sRate_hz); - fir.setKernel(fac.getBandpass(0.66, 2.0, 40)); + //FIR::Real::Factory fac(sRate_hz); + //fir.setKernel(fac.getBandpass(0.66, 2.0, 40)); + if (useBandPass) { + biquad.resize(3); + biquad[0].setHighPass(1, 0.7, sRate_hz); + biquad[1].setLowPass(3.0, 0.7, sRate_hz); + biquad[2].setLowPass(3.0, 1.0, sRate_hz); + //biquad.setBandPass(2, 3.0, sRate_hz); + threshold = 0.6; // needs a little reduction + } else { + threshold = 0.8; + biquad.resize(1); + biquad[0].setLowPass(3, 0.7, sRate_hz); + } #ifdef WITH_DEBUG_PLOT gp << "set autoscale xfix\n"; @@ -98,7 +112,7 @@ public: /** does the given data indicate a step? */ bool add(const Timestamp ts, const AccelerometerData& acc) { - bool step = false; + bool gotStep = false; // accel-data incoming on a fixed sampling rate (needed for FIR to work) auto onResample = [&] (const Timestamp ts, const AccelerometerData data) { @@ -109,17 +123,16 @@ public: avg.add(ts, mag); const float mag0 = mag - avg.get(); - //const std::complex c = fir.append(mag0); - //const float real = c.real(); - //if (real != real) {return;} - //const float fMag = real; - const float f = fir.append(mag0); - if (f != f) {return;} + +// const float f = fir.append(mag0); +// if (f != f) {return;} + const float f = biquad.filter(mag0); const float fMag = f; const bool isMax = locMax.add(fMag); - step = (isMax) && (locMax.get() > threshold); + const bool step = (isMax) && (locMax.get() > threshold); + if (step) {gotStep = true;} #ifdef WITH_DEBUG_OUTPUT if (step) { @@ -163,7 +176,7 @@ public: // ensure fixed sampling rate for FIR freq filters to work! interpol.add(ts, acc, onResample); - return step; + return gotStep; } diff --git a/sensors/imu/StepDetection3.h b/sensors/imu/StepDetection3.h index 8dab918..f4fffaf 100644 --- a/sensors/imu/StepDetection3.h +++ b/sensors/imu/StepDetection3.h @@ -22,7 +22,7 @@ #endif #include "../../Assertions.h" -#include "../../math/dsp/iir/BiQuad.h" +#include "../../math/dsp/iir/BiQuadStack.h" #include "../../math/FixedFrequencyInterpolator.h" #include "../../math/DelayBuffer.h" @@ -38,9 +38,12 @@ class StepDetection3 { static constexpr float gravity = 9.81; static constexpr float stepRate_hz = 2.0; + static constexpr float cutOff_hz = 3.0; + static constexpr float iirQ = 0.70; + static constexpr int sRate_hz = 100; static constexpr int every_ms = 1000 / sRate_hz; - static constexpr float threshold = 1.0; + float threshold = 0.8; float max = 0; Timestamp maxTS; @@ -48,8 +51,8 @@ class StepDetection3 { private: FixedFrequencyInterpolator interpol; - IIR::BiQuad biquad; - DelayBuffer delay; + IIR::BiQuadStack biquad; + DelayBuffer lookBehind; @@ -72,10 +75,23 @@ private: public: /** ctor */ - StepDetection3() : interpol(Timestamp::fromMS(every_ms)), delay(10) { + StepDetection3(bool useBandPass) : interpol(Timestamp::fromMS(every_ms)), lookBehind(5) { - biquad.setBandPass(stepRate_hz, 1.0, sRate_hz); - biquad.preFill(gravity); + //biquad.setBandPass(stepRate_hz, 1.5, sRate_hz); + //biquad.preFill(gravity); + + if (useBandPass) { + biquad.resize(3); + biquad[0].setHighPass(1, 0.7, sRate_hz); + biquad[1].setLowPass(3.0, 0.7, sRate_hz); + biquad[2].setLowPass(3.0, 1.0, sRate_hz); + //biquad.setBandPass(2, 3.0, sRate_hz); + threshold = 0.6; // needs a little reduction + } else { + threshold = 0.8; + biquad.resize(1); + biquad[0].setLowPass(3, 0.7, sRate_hz); + } #ifdef WITH_DEBUG_PLOT gp << "set autoscale xfix\n"; @@ -105,10 +121,10 @@ public: const float mag = data.magnitude(); // apply filter - const float fMag = biquad.filter(mag); + const float fMag = biquad.filter(mag - 9.81); // remove gravity // history buffer - float fMagOld = delay.add(fMag); + float fMagOld = lookBehind.add(fMag); // zero crossing? float tmp = max; @@ -117,16 +133,22 @@ public: step = true; gotStep = true; } - delay.setAll(0); + lookBehind.setAll(0); max = 0; } + + // track maximum value if (fMag > max) {max = fMag; maxTS = ts;} #ifdef WITH_DEBUG_OUTPUT if (step) { - std::cout << ts.ms() << std::endl; + +// // track delay due to zero crossing +// const float tsDelay = ts.ms() - maxTS.ms(); +// std::cout << "step at " << ts.ms() << ". delay due to zero crossing: " << tsDelay << std::endl; + outSteps << maxTS.ms() << " " << tmp << "\n"; outSteps.flush(); } diff --git a/sensors/imu/StepDetection4.h b/sensors/imu/StepDetection4.h index da088ed..4aa2174 100644 --- a/sensors/imu/StepDetection4.h +++ b/sensors/imu/StepDetection4.h @@ -24,7 +24,7 @@ #endif #include "../../Assertions.h" -#include "../../math/dsp/iir/BiQuad.h" +#include "../../math/dsp/iir/BiQuadStack.h" #include "../../math/FixedFrequencyInterpolator.h" #include "../../math/DelayBuffer.h" @@ -43,7 +43,7 @@ class StepDetection4 { static constexpr float stepRate_hz = 2.0; static constexpr int sRate_hz = 100; static constexpr int every_ms = 1000 / sRate_hz; - static constexpr float threshold = 1.0; + float threshold = 0.8; float max = 0; Timestamp maxTS; @@ -52,7 +52,7 @@ private: PoseDetection* pose; FixedFrequencyInterpolator interpol; - IIR::BiQuad biquad; + IIR::BiQuadStack biquad; DelayBuffer delay; @@ -75,16 +75,30 @@ private: public: /** ctor */ - StepDetection4(PoseDetection* pose) : pose(pose), interpol(Timestamp::fromMS(every_ms)), delay(10) { + StepDetection4(PoseDetection* pose, bool useBandPass) : pose(pose), interpol(Timestamp::fromMS(every_ms)), delay(10) { - plot.getKey().setVisible(true); - lineRaw.setTitle("unrotated Z"); - lineFiltered.setTitle("IIR filtered"); + //biquad.setBandPass(stepRate_hz, 1.0, sRate_hz); + //biquad.preFill(gravity); - biquad.setBandPass(stepRate_hz, 1.0, sRate_hz); - biquad.preFill(gravity); + if (useBandPass) { + biquad.resize(3); + biquad[0].setHighPass(1, 0.7, sRate_hz); + biquad[1].setLowPass(3.0, 0.7, sRate_hz); + biquad[2].setLowPass(3.0, 1.0, sRate_hz); + //biquad.setBandPass(2, 3.0, sRate_hz); + threshold = 0.6; // needs a little reduction + } else { + threshold = 0.8; + biquad.resize(1); + biquad[0].setLowPass(3, 0.7, sRate_hz); + } #ifdef WITH_DEBUG_PLOT + + plot.getKey().setVisible(true); + lineRaw.setTitle("unrotated Z"); + lineFiltered.setTitle("IIR filtered"); + gp << "set autoscale xfix\n"; plot.setTitle("Step Detection"); plot.add(&lineRaw); lineRaw.getStroke().getColor().setHexStr("#0000FF"); @@ -123,7 +137,7 @@ public: const float mag = data.z; // apply filter - const float fMag = biquad.filter(mag); + const float fMag = biquad.filter(mag - gravity); // history buffer float fMagOld = delay.add(fMag); From 857d7a1553d71123c4a77b6f5b222917d858c693 Mon Sep 17 00:00:00 2001 From: frank Date: Tue, 4 Sep 2018 10:49:00 +0200 Subject: [PATCH 4/6] fixed some issues added new pose/turn detections new helper classes define-flags for libEigen --- Assertions.h | 7 + CMakeLists.txt | 2 +- Exception.h | 8 +- data/Timestamp.h | 74 +++-- floorplan/3D/objects/MTLReader.h | 9 +- floorplan/3D/objects/OBJReader.h | 5 + geo/Point2.h | 3 + grid/factory/GridImportance.h | 2 +- grid/walk/GridWalkLightAtTheEndOfTheTunnel.h | 2 +- grid/walk/GridWalkWeighted.h | 2 +- grid/walk/v2/modules/WalkModuleHeading.h | 4 +- .../WalkModuleRelativePressureControl.h | 2 +- main.cpp | 2 +- math/FixedFrequencyInterpolator.h | 2 +- math/Floatingpoint.h | 219 +++++++++++++ math/KahanSum.h | 84 +++++ math/Matrix3.h | 106 ++++-- math/MovingAverageTS.h | 34 +- math/MovingMinMaxTS.h | 73 +++++ math/MovingStdDevTS.h | 11 +- math/Quaternion.h | 197 ++++++++++++ math/distribution/NormalN.h | 67 +++- math/dsp/iir/BiQuad.h | 2 +- math/filter/Complementary.h | 74 +++++ math/stats/SampleRateEstimator.h | 41 +++ sensors/gps/GPSData.h | 13 +- sensors/imu/AccelerometerData.h | 29 +- sensors/imu/CompassData.h | 8 +- sensors/imu/CompassDetection.h | 56 +++- sensors/imu/CompassDetectionPlot.h | 8 +- sensors/imu/GravityData.h | 14 +- sensors/imu/GyroscopeData.h | 11 +- sensors/imu/MagnetometerData.h | 24 +- sensors/imu/PoseDetection.h | 127 ++++++-- sensors/imu/PoseDetection2.h | 301 ++++++++++++++++++ sensors/imu/PoseDetection3.h | 179 +++++++++++ sensors/imu/PoseDetectionPlot.h | 134 ++++++-- sensors/imu/PoseProvider.h | 43 +++ sensors/imu/StepDetection2.h | 12 +- sensors/imu/TurnDetection.h | 40 ++- sensors/imu/TurnDetection2.h | 117 +++++++ sensors/imu/TurnDetectionPlot.h | 45 ++- sensors/imu/TurnProvider.h | 12 + sensors/pressure/BarometerData.h | 47 ++- tests/math/TestDistribution.cpp | 10 +- tests/math/TestQuaternion.cpp | 82 +++++ tests/math/distribution/TestNormalN.cpp | 2 + tests/math/divergence/TestJensenShannon.cpp | 2 + tests/math/divergence/TestKullbackLeibler.cpp | 2 + tests/sensors/imu/TestTurnDetection.cpp | 3 +- .../mixing/TestMixingSamplerDivergency.cpp | 3 +- 51 files changed, 2149 insertions(+), 207 deletions(-) create mode 100644 math/Floatingpoint.h create mode 100644 math/KahanSum.h create mode 100644 math/MovingMinMaxTS.h create mode 100644 math/Quaternion.h create mode 100644 math/filter/Complementary.h create mode 100644 math/stats/SampleRateEstimator.h create mode 100644 sensors/imu/PoseDetection2.h create mode 100644 sensors/imu/PoseDetection3.h create mode 100644 sensors/imu/PoseProvider.h create mode 100644 sensors/imu/TurnDetection2.h create mode 100644 sensors/imu/TurnProvider.h create mode 100644 tests/math/TestQuaternion.cpp diff --git a/Assertions.h b/Assertions.h index 4aba559..08649f2 100644 --- a/Assertions.h +++ b/Assertions.h @@ -70,6 +70,13 @@ namespace Assert { } } + template static inline void isNear(const T v1, const U v2, const V delta, const STR err) { + if (std::abs(v1-v2) > delta) { + std::stringstream ss; ss << "\nexpected " << v1 << " +/- " << delta << " but is " << v2 << "\n"; + doThrow(err+ss.str()); + } + } + template static inline void isBetween(const T v, const T min, const T max, const STR err) { if (v < min || v > max) { std::stringstream ss; ss << "\n[" << min << ":" << max << "] but is " << v << "\n"; diff --git a/CMakeLists.txt b/CMakeLists.txt index acfd892..18a9b20 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,7 +119,7 @@ ADD_EXECUTABLE( # needed external libraries TARGET_LINK_LIBRARIES( ${PROJECT_NAME} -# gtest + gtest # pthread ${EXTRA_LIBS} ) diff --git a/Exception.h b/Exception.h index 1e72f78..cd14319 100755 --- a/Exception.h +++ b/Exception.h @@ -5,7 +5,8 @@ #include #ifdef ANDROID -#include +//include +#include #endif class Exception : public std::exception { @@ -22,7 +23,10 @@ public: // TODO better solution? #ifdef ANDROID - QMessageBox::question(nullptr, "Exception", str.c_str(), QMessageBox::Ok); + qDebug() << "-------- ERROR --------"; + qDebug() << str.c_str(); + qDebug() << "------------------------"; + //QMessageBox::question(nullptr, "Exception", str.c_str(), QMessageBox::Ok); #endif } diff --git a/data/Timestamp.h b/data/Timestamp.h index 90fcf4b..8b08707 100644 --- a/data/Timestamp.h +++ b/data/Timestamp.h @@ -11,29 +11,51 @@ struct Timestamp { private: /** internal timestamp in milliseconds */ - int64_t _ms; + //int64_t _ms; + int64_t _us; - /** HIDDEN ctor. use factory methods */ - explicit Timestamp(const int64_t ms) : _ms(ms) {;} + /** hidden ctor. for internal methods only */ + Timestamp(int64_t us) : _us(us) {;} public: /** empty ctor */ - explicit Timestamp() : _ms(0) {;} + explicit Timestamp() : _us(0) {;} + /** get timestamp from the given value which represents microseconds */ + static inline Timestamp fromUS(const int64_t us) { + Timestamp ts; + ts._us = us; + return ts; + } /** get timestamp from the given value which represents milliesconds */ - static inline Timestamp fromMS(const int64_t ms) {return Timestamp(ms);} + static inline Timestamp fromMS(const int64_t ms) { + Timestamp ts; + ts._us = ms * 1000; + return ts; + } /** get timestamp from the given value which represents seconds */ - static inline Timestamp fromSec(const float sec) {return Timestamp(sec*1000);} + static inline Timestamp fromSec(const float sec) { + Timestamp ts; + ts._us = static_cast(sec * 1000 * 1000); + return ts; + } + + /** get timestamp from the given value which represents a sample rate in hz */ + static inline Timestamp fromHz(const float hz) { + const float sec = 1.0f / hz; + return Timestamp::fromSec(sec); + } /** get timestamp for the current unix-time */ static inline Timestamp fromUnixTime() { auto now = std::chrono::system_clock::now(); auto duration = now.time_since_epoch(); - auto millis = std::chrono::duration_cast(duration).count(); - return Timestamp(millis); + //auto millis = std::chrono::duration_cast(duration).count(); + auto micros = std::chrono::duration_cast(duration).count(); + return Timestamp::fromUS(micros); } /** get timestamp for the current system-time */ @@ -46,44 +68,50 @@ public: public: + /** get finest available value */ + inline int64_t finest() const {return _us;} + + /** get timestamp in microseconds */ + inline int64_t us() const {return _us;} + /** get timestamp in milliseconds */ - inline int64_t ms() const {return _ms;} + inline int64_t ms() const {return _us/1000;} /** get timestamp in seconds */ - inline float sec() const {return _ms/1000.0f;} + inline float sec() const {return _us/1000.0f/1000.0f;} public: /** is this timestamp zero? */ - bool isZero() const {return _ms == 0;} + bool isZero() const {return _us == 0;} /** equal? */ - bool operator == (const Timestamp& o) const {return _ms == o._ms;} + bool operator == (const Timestamp& o) const {return _us == o._us;} /** not equal? */ - bool operator != (const Timestamp& o) const {return _ms != o._ms;} + bool operator != (const Timestamp& o) const {return _us != o._us;} /** smaller than the given one? */ - bool operator < (const Timestamp& o) const {return _ms < o._ms;} - bool operator <= (const Timestamp& o) const {return _ms <= o._ms;} + bool operator < (const Timestamp& o) const {return _us < o._us;} + bool operator <= (const Timestamp& o) const {return _us <= o._us;} /** greater than the given one? */ - bool operator > (const Timestamp& o) const {return _ms > o._ms;} - bool operator >= (const Timestamp& o) const {return _ms >= o._ms;} + bool operator > (const Timestamp& o) const {return _us > o._us;} + bool operator >= (const Timestamp& o) const {return _us >= o._us;} - Timestamp operator - (const Timestamp& o) const {return Timestamp(_ms - o._ms);} - Timestamp& operator -= (const Timestamp& o) {_ms += o._ms; return *this;} + Timestamp operator - (const Timestamp& o) const {return Timestamp(_us - o._us);} + Timestamp& operator -= (const Timestamp& o) {_us += o._us; return *this;} - Timestamp operator + (const Timestamp& o) const {return Timestamp(_ms + o._ms);} - Timestamp& operator += (const Timestamp& o) {_ms += o._ms; return *this;} + Timestamp operator + (const Timestamp& o) const {return Timestamp(_us + o._us);} + Timestamp& operator += (const Timestamp& o) {_us += o._us; return *this;} - template Timestamp operator * (const T val) const {return Timestamp(_ms * val);} + template Timestamp operator * (const T val) const {return Timestamp(_us * val);} - template Timestamp operator / (const T val) const {return Timestamp(_ms / val);} + template Timestamp operator / (const T val) const {return Timestamp(_us / val);} // /** cast to float */ // operator float () const {return sec();} diff --git a/floorplan/3D/objects/MTLReader.h b/floorplan/3D/objects/MTLReader.h index 0007b74..21584b8 100644 --- a/floorplan/3D/objects/MTLReader.h +++ b/floorplan/3D/objects/MTLReader.h @@ -29,7 +29,7 @@ public: ; } - /** read .obj from the given file */ + /** read .mtl from the given file */ void readFile(const std::string& file) { std::ifstream is(file); std::string line; @@ -37,7 +37,12 @@ public: is.close(); } - /** read obj from the given data string (.obj file contents) */ + /** read mtl from the given data string (.mtl file contents) */ + void readData(const char* data) { + readData(std::string(data)); + } + + /** read mtl from the given data string (.mtl file contents) */ void readData(const std::string& data) { std::stringstream is(data); std::string line; diff --git a/floorplan/3D/objects/OBJReader.h b/floorplan/3D/objects/OBJReader.h index f9b6d27..dd4476c 100644 --- a/floorplan/3D/objects/OBJReader.h +++ b/floorplan/3D/objects/OBJReader.h @@ -65,6 +65,11 @@ public: is.close(); } + /** read obj from the given data string (.obj file contents) */ + void readData(const char* data) { + readData(std::string(data)); + } + /** read obj from the given data string (.obj file contents) */ void readData(const std::string& data) { std::stringstream is(data); diff --git a/geo/Point2.h b/geo/Point2.h index 16f79e8..cc36d29 100644 --- a/geo/Point2.h +++ b/geo/Point2.h @@ -78,6 +78,9 @@ inline float dot(const Point2 p1, const Point2 p2) { return (p1.x*p2.x) + (p1.y*p2.y); } +inline float determinant(const Point2 p1, const Point2 p2) { + return (p1.x*p2.y) - (p1.y*p2.x); +} inline void swap(Point2& p1, Point2& p2) { std::swap(p1.x, p2.x); diff --git a/grid/factory/GridImportance.h b/grid/factory/GridImportance.h index d374b6e..7ceeb90 100644 --- a/grid/factory/GridImportance.h +++ b/grid/factory/GridImportance.h @@ -11,7 +11,7 @@ #include "../../nav/dijkstra/Dijkstra.h" #include "../../nav/dijkstra/DijkstraPath.h" -#include "../../math/Distributions.h" +#include "../../math/distribution/Normal.h" diff --git a/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h b/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h index d59aa97..6920b1c 100644 --- a/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h +++ b/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h @@ -5,7 +5,7 @@ #include "../Grid.h" #include "../../math/DrawList.h" -#include "../../math/Distributions.h" +#include "../../math/distribution/Normal.h" #include "../../math/DrawList.h" #include "../../nav/dijkstra/Dijkstra.h" diff --git a/grid/walk/GridWalkWeighted.h b/grid/walk/GridWalkWeighted.h index 5159398..97459ed 100644 --- a/grid/walk/GridWalkWeighted.h +++ b/grid/walk/GridWalkWeighted.h @@ -5,7 +5,7 @@ #include "../Grid.h" #include "../../math/DrawList.h" -#include "../../math/Distributions.h" +#include "../../math/distribution/Normal.h" #include "../../math/DrawList.h" /** diff --git a/grid/walk/v2/modules/WalkModuleHeading.h b/grid/walk/v2/modules/WalkModuleHeading.h index beb3687..d992499 100644 --- a/grid/walk/v2/modules/WalkModuleHeading.h +++ b/grid/walk/v2/modules/WalkModuleHeading.h @@ -7,7 +7,9 @@ #include "../../../../Assertions.h" #include "../../../../geo/Heading.h" -#include "../../../../math/Distributions.h" +#include "../../../../math/distribution/Normal.h" +#include "../../../../math/distribution/LUT.h" +#include "../../../../math/distribution/VonMises.h" #include "../../../../geo/Heading.h" diff --git a/grid/walk/v2/modules/WalkModuleRelativePressureControl.h b/grid/walk/v2/modules/WalkModuleRelativePressureControl.h index 6e7853d..c3a5aed 100644 --- a/grid/walk/v2/modules/WalkModuleRelativePressureControl.h +++ b/grid/walk/v2/modules/WalkModuleRelativePressureControl.h @@ -6,7 +6,7 @@ #include "WalkStateHeading.h" #include "../../../../geo/Heading.h" -#include "../../../../math/Distributions.h" +#include "../../../../math/distribution/Normal.h" #include "../../../../Assertions.h" diff --git a/main.cpp b/main.cpp index 05b1969..376e399 100755 --- a/main.cpp +++ b/main.cpp @@ -111,7 +111,7 @@ int main(int argc, char** argv) { //::testing::GTEST_FLAG(filter) = "*Matrix4*"; //::testing::GTEST_FLAG(filter) = "*Sphere3*"; - ::testing::GTEST_FLAG(filter) = "*FIRComplex*"; + ::testing::GTEST_FLAG(filter) = "*Quaternion*"; //::testing::GTEST_FLAG(filter) = "Timestamp*"; //::testing::GTEST_FLAG(filter) = "*RayTrace3*"; diff --git a/math/FixedFrequencyInterpolator.h b/math/FixedFrequencyInterpolator.h index 3e386e8..a6d7a13 100644 --- a/math/FixedFrequencyInterpolator.h +++ b/math/FixedFrequencyInterpolator.h @@ -70,7 +70,7 @@ public: while(nextOutput < cur.ts) { // interpolation rate - const float percent = (nextOutput.ms() - last.ts.ms()) / (float) (diff.ms()); + const float percent = (nextOutput.finest() - last.ts.finest()) / (float) (diff.finest()); // sanity checks Assert::isNotNaN(percent, "detected NaN for interpolation"); diff --git a/math/Floatingpoint.h b/math/Floatingpoint.h new file mode 100644 index 0000000..4158e94 --- /dev/null +++ b/math/Floatingpoint.h @@ -0,0 +1,219 @@ +#ifndef FLOATINGPOINT_H +#define FLOATINGPOINT_H + +#include "../Assertions.h" + +template struct FP { + + T val; + +public: + + FP(int val) : val(val) {;} + FP(size_t val) : val(val) {;} + FP(float val) : val(val) {;} + FP(double val) : val(val) {;} + + FP(const FP& o) : val(o.val) {;} + FP(const FP& o) : val(o.val) {;} + + FP(const volatile FP& o) : val(o.val) {;} + FP(const volatile FP& o) : val(o.val) {;} + + //template explicit FP(const FP& o) : val(o.val) {;} + + //operator FP() const {return FP(val);} + operator FP() const {return FP(val);} + + operator float() const {return static_cast(val);} + operator double() const {return static_cast(val);} + + + FP& operator += (const FP o) { + checkAddSub(val, o.val); + val += o.val; + return *this; + } + + FP& operator -= (const FP o) { + checkAddSub(val, o.val); + val -= o.val; + return *this; + } + + FP& operator *= (const FP o) { + val *= o.val; + return *this; + } + + FP& operator /= (const FP o) { + val /= o.val; + return *this; + } + + /** -------- X -------- */ + + FP operator - () const { + return FP(-val); + } + + FP operator + (const FP o) const { + checkAddSub(val, o.val); + return FP(val+o.val); + } + + FP operator - (const FP o) const { + checkAddSub(val, o.val); + return FP(val-o.val); + } + + FP operator * (const FP o) const { + return FP(val*o.val); + } + + FP operator / (const FP o) const { + return FP(val/o.val); + } + + FP& operator = (const FP o) { + this->val = o; + return *this; + } + + + volatile FP& operator = (const FP& o) volatile { + this->val = o; + return *this; + } + + + + bool operator == (const FP o) const { + return val == o.val; + } + + bool operator != (const FP o) const { + return val != o.val; + } + + + + + friend std::ostream& operator << (std::ostream& stream, const FP& fp) { + stream << fp.val; + return stream; + } + +private: + + static inline void checkAddSub(const T a, const T b) { + const int x = expDiff(a,b); + Assert::isTrue(x <= 8, "invalid precision for +/-"); + } + + static inline int expDiff(const T a, const T b) { + int x, y; + frexp(a, &x); + frexp(b, &y); + const int d = (std::max(x,y) - std::min(x,y)) / 3; // 3 exponents in binary per 10 in decimal? + return d; + } + + + +}; + +inline FP operator + (const FP& a, const FP& b) {return FP(a.val + b.val);} +inline FP operator + (const FP& a, const FP& b) {return FP(a.val + b.val);} +inline FP operator + (const FP& a, const float b) {return a + FP(b);} +inline FP operator + (const float a, const FP& b) {return FP(a) + b;} +inline FP operator + (const FP& a, const double b) {return a + FP(b);} +inline FP operator + (const double a, const FP& b) {return FP(a) + b;} +inline FP operator + (const FP& a, const float b) {return a + FP(b);} +inline FP operator + (const float a, const FP& b) {return FP(a) + b;} +inline FP operator + (const FP& a, const double b) {return a + FP(b);} +inline FP operator + (const double a, const FP& b) {return FP(a) + b;} + +inline FP operator - (const FP& a, const FP& b) {return FP(a.val - b.val);} +inline FP operator - (const FP& a, const FP& b) {return FP(a.val - b.val);} +inline FP operator - (const FP& a, const float b) {return a - FP(b);} +inline FP operator - (const float a, const FP& b) {return FP(a) - b;} +inline FP operator - (const FP& a, const double b) {return a - FP(b);} +inline FP operator - (const double a, const FP& b) {return FP(a) - b;} +inline FP operator - (const FP& a, const float b) {return a - FP(b);} +inline FP operator - (const float a, const FP& b) {return FP(a) - b;} +inline FP operator - (const FP& a, const double b) {return a - FP(b);} +inline FP operator - (const double a, const FP& b) {return FP(a) - b;} + +inline FP operator / (const FP& a, const FP& b) {return FP(a.val / b.val);} +inline FP operator / (const FP& a, const FP& b) {return FP(a.val / b.val);} +inline FP operator / (const FP& a, const float b) {return a / FP(b);} +inline FP operator / (const float a, const FP& b) {return FP(a) / b;} +inline FP operator / (const FP& a, const double b) {return a / FP(b);} +inline FP operator / (const double a, const FP& b) {return FP(a) / b;} +inline FP operator / (const FP& a, const float b) {return a / FP(b);} +inline FP operator / (const float a, const FP& b) {return FP(a) / b;} +inline FP operator / (const FP& a, const double b) {return a / FP(b);} +inline FP operator / (const double a, const FP& b) {return FP(a) / b;} + +inline FP operator * (const FP& a, const FP& b) {return FP(a.val * b.val);} +inline FP operator * (const FP& a, const FP& b) {return FP(a.val * b.val);} +inline FP operator * (const FP& a, const float b) {return a * FP(b);} +inline FP operator * (const float a, const FP& b) {return FP(a) * b;} +inline FP operator * (const FP& a, const double b) {return a * FP(b);} +inline FP operator * (const double a, const FP& b) {return FP(a) * b;} +inline FP operator * (const FP& a, const float b) {return a * FP(b);} +inline FP operator * (const float a, const FP& b) {return FP(a) * b;} +inline FP operator * (const FP& a, const double b) {return a * FP(b);} +inline FP operator * (const double a, const FP& b) {return FP(a) * b;} + +inline FP operator / (const FP& a, const int b) {return a / FP(b);} +inline FP operator / (const FP& a, const size_t b) {return a / FP(b);} + +inline FP operator / (const FP& a, const int b) {return a / FP(b);} +inline FP operator / (const FP& a, const size_t b) {return a / FP(b);} + + +//template FP operator + (const FP& a, const U b) {return a + FP(b);} +//template FP operator + (const U a, const FP& b) {return FP(a) + b;} + +//template FP operator - (const FP& a, const U b) {return a - FP(b);} +//template FP operator - (const U a, const FP& b) {return FP(a) - b;} + +//template FP operator * (const FP& a, const U b) {return a * FP(b);} +//template FP operator * (const U a, const FP& b) {return FP(a) * b;} + +//template FP operator / (const FP& a, const U b) {return a / FP(b);} +//template FP operator / (const U a, const FP& b) {return FP(a) / b;} + + + +namespace std { + template FP pow (const FP& x, const FP& y) { + return FP(std::pow(x.val, y.val)); + } + template FP pow (const FP& x, const T& y) { + return FP(std::pow(x.val, y)); + } + template FP sqrt (const FP x) { + return FP(std::sqrt(x.val)); + } + template bool isnan(FP x) { + return std::isnan(x.val); + } +} + +#ifdef WITH_FP + using FPFloat = FP; + using FPDouble = FP; + using FPDefault = FPFloat; +#else + using FPFloat = float; + using FPDouble = double; + using FPDefault = double; +#endif + + + + +#endif // FLOATINGPOINT_H diff --git a/math/KahanSum.h b/math/KahanSum.h new file mode 100644 index 0000000..4ae2587 --- /dev/null +++ b/math/KahanSum.h @@ -0,0 +1,84 @@ +#ifndef KAHANSUM_H +#define KAHANSUM_H + +#include + +template class KahanSum { + +private: + + const T zero; + + /** current sum */ + T sum; + + /** current compensation */ + T comp; + + +public: + + /** ctor with zero element */ + KahanSum(const T zero) : zero(zero), sum(zero), comp(zero) { + + } + + KahanSum& operator += (const T val) { + add(val); + return *this; + } + + KahanSum& operator -= (const T val) { + sub(val); + return *this; + } + + T get() const { + return sum; + } + +private: + +#define NO_OPT __attribute__((optimize("-O0"))) + + /** adjust the sum */ + void add(const T val) NO_OPT { + const T y = val - comp; + const T t = sum + y; + comp = (t-sum) - y; // very important line + sum = t; + } + + /** adjust the sum */ + void sub(const T val) NO_OPT { + const T y = val - comp; + const T t = sum - y; + comp = (t-sum) + y; // very important line + sum = t; + } + +public: + + static T get(const std::vector& values, const T zero = T()) { + return get(values.data(), values.size(), zero); + } + + static T get(const T* values, const size_t cnt, const T zero = T()) { + + T sum = zero; + volatile T comp = zero; + for (size_t i = 0; i < cnt; ++i) { + const T inp = values[i]; + const volatile T y = inp - comp; + const volatile T t = sum + y; + comp = (t-sum) - y; + sum = t; + } + + return sum; + + } + +}; + +#endif // KAHANSUM_H diff --git a/math/Matrix3.h b/math/Matrix3.h index 2ca0b7f..e43eebc 100644 --- a/math/Matrix3.h +++ b/math/Matrix3.h @@ -4,6 +4,7 @@ #include #include +#include "../Assertions.h" class Matrix3 { @@ -24,30 +25,72 @@ public: return Matrix3( {1,0,0, 0,1,0, 0,0,1} ); } -// static Matrix3 getRotationDeg(const float degX, const float degY, const float degZ) { -// return getRotationRad(degX/180.0f*M_PI, degY/180.0f*M_PI, degZ/180.0f*M_PI); -// } + static Matrix3 getRotationDeg(const float degX, const float degY, const float degZ) { + return getRotationRad(degX/180.0f*M_PI, degY/180.0f*M_PI, degZ/180.0f*M_PI); + } -// static Matrix4 getRotationRad(const float radX, const float radY, const float radZ) { + static Matrix3 getRotationRad(const float radX, const float radY, const float radZ) { -// const float g = radX; const float b = radY; const float a = radZ; -// const float a11 = std::cos(a)*std::cos(b); -// const float a12 = std::cos(a)*std::sin(b)*std::sin(g)-std::sin(a)*std::cos(g); -// const float a13 = std::cos(a)*std::sin(b)*std::cos(g)+std::sin(a)*std::sin(g); -// const float a21 = std::sin(a)*std::cos(b); -// const float a22 = std::sin(a)*std::sin(b)*std::sin(g)+std::cos(a)*std::cos(g); -// const float a23 = std::sin(a)*std::sin(b)*std::cos(g)-std::cos(a)*std::sin(g); -// const float a31 = -std::sin(b); -// const float a32 = std::cos(b)*std::sin(g); -// const float a33 = std::cos(b)*std::cos(g); -// return Matrix4({ -// a11, a12, a13, 0, -// a21, a22, a23, 0, -// a31, a32, a33, 0, -// 0, 0, 0, 1 -// }); + const float g = radX; const float b = radY; const float a = radZ; + const float a11 = std::cos(a)*std::cos(b); + const float a12 = std::cos(a)*std::sin(b)*std::sin(g)-std::sin(a)*std::cos(g); + const float a13 = std::cos(a)*std::sin(b)*std::cos(g)+std::sin(a)*std::sin(g); + const float a21 = std::sin(a)*std::cos(b); + const float a22 = std::sin(a)*std::sin(b)*std::sin(g)+std::cos(a)*std::cos(g); + const float a23 = std::sin(a)*std::sin(b)*std::cos(g)-std::cos(a)*std::sin(g); + const float a31 = -std::sin(b); + const float a32 = std::cos(b)*std::sin(g); + const float a33 = std::cos(b)*std::cos(g); + return Matrix3({ + a11, a12, a13, + a21, a22, a23, + a31, a32, a33, + }); -// } + } + static Matrix3 getRotationVec(const float nx, const float ny, const float nz, const float mag) { + Assert::isNotNaN(nx, "detected NaN"); + Assert::isNotNaN(ny, "detected NaN"); + Assert::isNotNaN(nz, "detected NaN"); + Assert::isNotNaN(mag, "detected NaN"); + const float c = std::cos(mag); + const float s = std::sin(mag); + return Matrix3({ + c+nx*nx*(1-c), nx*ny*(1-c)+nz*s, nx*nz*(1-c)-ny*s, + ny*nx*(1-c)-nz*s, c+ny*ny*(1-c), ny*nz*(1-c)+nx*s, + nz*nx*(1-c)+ny*s, nz*ny*(1-c)-nx*s, c+nz*nz*(1-c) + }); + } + static Matrix3 getRotationRadX(const float x) { + return Matrix3({ + 1, 0, 0, + 0, cos(x), -sin(x), + 0, sin(x), cos(x) + }); + } + static Matrix3 getRotationRadY(const float y) { + return Matrix3({ + cos(y), 0, sin(y), + 0, 1, 0, + -sin(y),0, cos(y) + }); + } + static Matrix3 getRotationRadZ(const float z) { + return Matrix3({ + cos(z), -sin(z), 0, + sin(z), cos(z), 0, + 0, 0, 1 + }); + } + + + Matrix3 transposed() const { + return Matrix3({ + data[0], data[3], data[6], + data[1], data[4], data[7], + data[2], data[5], data[8] + }); + } static Matrix3 getTranslation(const float x, const float y) { return Matrix3({ @@ -126,6 +169,27 @@ struct Vector3 { return Vector3(x/v, y/v, z/v); } + Vector3& operator += (const Vector3 o) { + this->x += o.x; + this->y += o.y; + this->z += o.z; + return *this; + } + + Vector3& operator -= (const Vector3 o) { + this->x -= o.x; + this->y -= o.y; + this->z -= o.z; + return *this; + } + +// Vector& operator = (const float val) { +// this->x = val; +// this->y = val; +// this->z = val; +// return *this; +// } + bool operator == (const Vector3 o) const { return (x==o.x) && (y==o.y) && (z==o.z); } diff --git a/math/MovingAverageTS.h b/math/MovingAverageTS.h index dd8b7bd..20200a4 100644 --- a/math/MovingAverageTS.h +++ b/math/MovingAverageTS.h @@ -4,6 +4,7 @@ #include #include "../data/Timestamp.h" #include +#include "KahanSum.h" template class MovingAverageTS { @@ -22,14 +23,19 @@ private: /** the value history for the window-size */ std::vector history; + const T zero; + /** current sum */ T sum; + /** more exact running summation of many values */ + KahanSum kSum; + public: /** ctor with the window-size to use */ - MovingAverageTS(const Timestamp window, const T zeroElement) : window(window), sum(zeroElement) { + MovingAverageTS(const Timestamp window, const T zeroElement) : window(window), zero(zeroElement), sum(zeroElement), kSum(zeroElement) { } @@ -41,6 +47,7 @@ public: // adjust sum sum += data; + kSum += data; // remove too-old history entries const Timestamp oldest = ts - window; @@ -48,6 +55,7 @@ public: // adjust sum sum -= history.front().value; + kSum -= history.front().value; // remove from history history.erase(history.begin()); @@ -56,11 +64,31 @@ public: } - /** get the current average */ - T get() const { + /** get the current average (with increasing error due to float sum!) */ + T getOldAPX() const { return sum / history.size(); } + /** get the current average */ + T get() const { + return kSum.get() / history.size(); + } + +// T get() const { + +// T sum = zero; +// volatile T comp = zero; +// for (const auto e : history) { +// T inp = e.value; +// T y = inp - comp; +// T t = sum + y; +// comp = (t-sum) - y; +// sum = t; +// } + +// return sum / history.size(); + +// } }; diff --git a/math/MovingMinMaxTS.h b/math/MovingMinMaxTS.h new file mode 100644 index 0000000..a99aa19 --- /dev/null +++ b/math/MovingMinMaxTS.h @@ -0,0 +1,73 @@ +#ifndef MOVINGMINMAXTS_H +#define MOVINGMINMAXTS_H + +#include +#include "../data/Timestamp.h" +#include + +template class MovingMinMaxTS { + +private: + + /** timestamp -> value combination */ + struct Entry { + Timestamp ts; + T value; + Entry(const Timestamp ts, const T& value) : ts(ts), value(value) {;} + }; + + /** the regional window to use */ + Timestamp window; + + /** the value history for the window-size */ + std::vector history; + + /** current sum */ + T sum; + +public: + + + /** ctor with the window-size to use */ + MovingMinMaxTS(const Timestamp window, const T zeroElement) : window(window), sum(zeroElement) { + + } + + /** add a new entry */ + void add(const Timestamp ts, const T& data) { + + // append to history + history.push_back(Entry(ts, data)); + + // remove too-old history entries + const Timestamp oldest = ts - window; + while(history.front().ts < oldest) { + + // remove from history + history.erase(history.begin()); + + } + + } + + /** get the current min element */ + T getMin() const { + auto comp = [] (const Entry& e1, const Entry& e2) {return e1.value < e2.value;}; + auto it = std::min_element(history.begin(), history.end(), comp); + return it->value; + } + + /** get the current max element */ + T getMax() const { + auto comp = [] (const Entry& e1, const Entry& e2) {return e1.value < e2.value;}; + auto it = std::max_element(history.begin(), history.end(), comp); + return it->value; + } + + T getRange() const { + return getMax() - getMin(); + } + +}; + +#endif // MOVINGMINMAXTS_H diff --git a/math/MovingStdDevTS.h b/math/MovingStdDevTS.h index 4cfd439..f565611 100644 --- a/math/MovingStdDevTS.h +++ b/math/MovingStdDevTS.h @@ -10,8 +10,8 @@ template class MovingStdDevTS { private: - MovingAverageTS avg; - MovingAverageTS avg2; + MovingAverageTS avg; + MovingAverageTS avg2; public: @@ -36,9 +36,10 @@ public: /** get the current std-dev */ T get() const { - const T e = avg.get(); - const T e2 = avg2.get(); - const T var = e2 - e*e; + const double e = avg.get(); + const double e2 = avg2.get(); + const double var = e2 - e*e; + //if (var < 0) {return 0;} return std::sqrt(var); } diff --git a/math/Quaternion.h b/math/Quaternion.h new file mode 100644 index 0000000..c04bea8 --- /dev/null +++ b/math/Quaternion.h @@ -0,0 +1,197 @@ +#ifndef QUATERNION_H +#define QUATERNION_H + +#include "Matrix3.h" + +class Quaternion { + +public: + + float w; + float x, y, z; + + /** empty ctor */ + Quaternion() : w(1.0f), x(0.0f), y(0.0f), z(0.0f) { + ; + } + + /** valued ctor */ + Quaternion(float w, float x, float y, float z) : w(w), x(x), y(y), z(z) { + ; + } + + /** construct from Euler angles in radians */ + static Quaternion fromEuler(float x, float y, float z) { + Quaternion q; + q.setEuler(x,y,z); + return q; + } + + static Quaternion fromAxisAngle(float angle, float x, float y, float z) { + const float qx = x * std::sin(angle/2); + const float qy = y * std::sin(angle/2); + const float qz = z * std::sin(angle/2); + const float qw = std::cos(angle/2); + return Quaternion(qw, qx,qy,qz); + } + + + void normalize() { + *this *= 1.0 / std::sqrt( x*x + y*y + z*z + w*w ); + } + + inline float dotProduct(const Quaternion& q2) const { + return (x * q2.x) + (y * q2.y) + (z * q2.z) + (w * q2.w); + } + + + /** linear interpolation between q1 and q2 */ + static Quaternion lerp( Quaternion q1, Quaternion q2, float time) { + const float scale = 1.0f - time; + return (q1*scale) + (q2*time); + } + + /** spherical interpolation between q1 and q2 */ + static Quaternion slerp( Quaternion q1, Quaternion q2, float time, float threshold = 0.05) { + + float angle = q1.dotProduct(q2); + + // make sure we use the short rotation + if (angle < 0.0f) { + q1 *= -1.0f; + angle *= -1.0f; + } + + if (angle <= (1-threshold)) { + // spherical interpolation + const float theta = acosf(angle); + const float invsintheta = 1.0/(sinf(theta)); + const float scale = sinf(theta * (1.0f-time)) * invsintheta; + const float invscale = sinf(theta * time) * invsintheta; + return (q1*scale) + (q2*invscale); + } else { + // linear interpolation + return Quaternion::lerp(q1,q2,time); + } + + } + + + /** multiply by scalar */ + Quaternion& operator *= (float val) { + x *= val; + y *= val; + z *= val; + w *= val; + return *this; + } + + /** multiply by scalar */ + Quaternion operator * (float val) const { + return Quaternion(w*val, x*val, y*val, z*val); + } + + /** multiply by other quaterion */ + Quaternion& operator *= (const Quaternion& other) { + return (*this = other * (*this)); + } + + /** multiply by other quaterion */ + Quaternion operator * (const Quaternion& other) const { + Quaternion tmp; + tmp.w = (other.w * w) - (other.x * x) - (other.y * y) - (other.z * z); + tmp.x = (other.w * x) + (other.x * w) + (other.y * z) - (other.z * y); + tmp.y = (other.w * y) + (other.y * w) + (other.z * x) - (other.x * z); + tmp.z = (other.w * z) + (other.z * w) + (other.x * y) - (other.y * x); + return tmp; + } + + /** add two quaternions */ + Quaternion operator + (const Quaternion& b) const { + return Quaternion(w+b.w, x+b.x, y+b.y, z+b.z); + } + + + /** set from euler angles (in radians) */ + void setEuler(float x, float y, float z) { + + double angle; + + angle = x * 0.5; + const double sr = std::sin(angle); + const double cr = std::cos(angle); + + angle = y * 0.5; + const double sp = std::sin(angle); + const double cp = std::cos(angle); + + angle = z * 0.5; + const double sy = std::sin(angle); + const double cy = std::cos(angle); + + const double cpcy = cp * cy; + const double spcy = sp * cy; + const double cpsy = cp * sy; + const double spsy = sp * sy; + + this->x = (float)(sr * cpcy - cr * spsy); + this->y = (float)(cr * spcy + sr * cpsy); + this->z = (float)(cr * cpsy - sr * spcy); + this->w = (float)(cr * cpcy + sr * spsy); + normalize(); + + } + + /** convert to euler angles */ + Vector3 toEuler() const { + + Vector3 res; + + const double sqw = w*w; + const double sqx = x*x; + const double sqy = y*y; + const double sqz = z*z; + const double test = 2.0 * (y*w - x*z); + + if (near(test, 1.0)) { + // heading = rotation about z-axis + res.z = (float) (-2.0*atan2(x, w)); + // bank = rotation about x-axis + res.x = 0; + // attitude = rotation about y-axis + res.y = (float) (M_PI/2.0); + } else if (near(test, -1.0)) { + // heading = rotation about z-axis + res.z = (float) (2.0*std::atan2(x, w)); + // bank = rotation about x-axis + res.x = 0; + // attitude = rotation about y-axis + res.y = (float) (M_PI/-2.0); + } else { + // heading = rotation about z-axis + res.z = (float) std::atan2(2.0 * (x*y + z*w),(sqx - sqy - sqz + sqw)); + // bank = rotation about x-axis + res.x = (float) std::atan2(2.0 * (y*z + x*w),(-sqx - sqy + sqz + sqw)); + // attitude = rotation about y-axis + res.y = (float) std::asin( clamp(test, -1.0, 1.0) ); + } + + return res; + + } + +private: + + static inline bool near(double d1, double d2) { + return std::abs(d1-d2) < 0.00001; + } + + static inline double clamp(double val, double min, double max) { + if (val < min) {return min;} + if (val > max) {return max;} + return val; + } + +}; + +#endif // QUATERNION_H diff --git a/math/distribution/NormalN.h b/math/distribution/NormalN.h index 011f6ae..080922c 100644 --- a/math/distribution/NormalN.h +++ b/math/distribution/NormalN.h @@ -3,6 +3,7 @@ #include #include +#include #include @@ -20,23 +21,28 @@ namespace Distribution { Eigen::VectorXd mu; Eigen::MatrixXd sigma; - const double _a; - const Eigen::MatrixXd _sigmaInv; + double _a; + Eigen::MatrixXd _sigmaInv; - const Eigen::SelfAdjointEigenSolver eigenSolver; - Eigen::MatrixXd transform; //can i make this const? + Eigen::MatrixXd transform; - Random::RandomGenerator gen; - std::normal_distribution<> dist; + Random::RandomGenerator gen; + std::normal_distribution<> dist; public: - /** ctor */ - NormalDistributionN(const Eigen::VectorXd mu, const Eigen::MatrixXd sigma) : - mu(mu), sigma(sigma), _a( 1.0 / std::sqrt( (sigma * 2.0 * M_PI).determinant() ) ), _sigmaInv(sigma.inverse()), eigenSolver(sigma) { + /** empty ctor */ + NormalDistributionN() { + ; + } - transform = eigenSolver.eigenvectors() * eigenSolver.eigenvalues().cwiseSqrt().asDiagonal(); - } + /** ctor */ + NormalDistributionN(const Eigen::VectorXd mu, const Eigen::MatrixXd sigma) : + mu(mu), sigma(sigma), _a( 1.0 / std::sqrt( (sigma * 2.0 * M_PI).determinant() ) ), _sigmaInv(sigma.inverse()) { + + const Eigen::SelfAdjointEigenSolver eigenSolver(sigma); + transform = eigenSolver.eigenvectors() * eigenSolver.eigenvalues().cwiseSqrt().asDiagonal(); + } /** get probability for the given value */ double getProbability(const Eigen::VectorXd val) const { @@ -50,12 +56,12 @@ namespace Distribution { } /** get the mean vector */ - const Eigen::VectorXd getMu(){ + const Eigen::VectorXd getMu() const { return this->mu; } /** get covariance matrix */ - const Eigen::MatrixXd getSigma(){ + const Eigen::MatrixXd getSigma() const { return this->sigma; } @@ -71,6 +77,34 @@ namespace Distribution { this->mu = mu; } + /** return a NormalN based on given data */ + static NormalDistributionN getNormalNFromSamples(const std::vector>& data) { + + int numAttrs = data[0].size(); + Eigen::MatrixXd eCovar = Eigen::MatrixXd::Zero(numAttrs, numAttrs); + Eigen::VectorXd eSum = Eigen::VectorXd::Zero(numAttrs); + Eigen::VectorXd eAvg = Eigen::VectorXd::Zero(numAttrs); + + // mean + for (const std::vector& vec : data) { + const Eigen::Map eVec((double*)vec.data(), vec.size()); + eSum += eVec; + } + eAvg = eSum / data.size(); + + // covariance + for (const std::vector& vec : data) { + const Eigen::Map eVec((double*)vec.data(), vec.size()); + const Eigen::VectorXd eTmp = (eVec - eAvg); + eCovar += eTmp * eTmp.transpose(); + } + eCovar /= data.size(); + + return NormalDistributionN(eAvg, eCovar); + + } + + /** return a NormalN based on given data */ static NormalDistributionN getNormalNFromSamples(const Eigen::MatrixXd& data) { @@ -98,7 +132,7 @@ namespace Distribution { return NormalDistributionN(mean, cov); } - std::vector getContour2(const double percentWithin) { + std::vector getContour2(const double percentWithin) const { const int degreesOfFreedom = 2; // 2D distribution const ChiSquared chi(degreesOfFreedom); @@ -114,7 +148,7 @@ namespace Distribution { std::vector res; - std::cout << sigma << std::endl; + //std::cout << sigma << std::endl; Eigen::SelfAdjointEigenSolver solver(this->sigma); Eigen::Vector2d evec1 = solver.eigenvectors().col(0); @@ -127,7 +161,8 @@ namespace Distribution { const float rad = deg / 180.0f * M_PI; Eigen::Vector2d pos = std::cos(rad) * std::sqrt(mul * eval1) * evec1 + - std::sin(rad) * std::sqrt(mul * eval2) * evec2; + std::sin(rad) * std::sqrt(mul * eval2) * evec2 + + this->mu; res.push_back(Point2(pos(0), pos(1))); } diff --git a/math/dsp/iir/BiQuad.h b/math/dsp/iir/BiQuad.h index ad15eb8..896edcd 100644 --- a/math/dsp/iir/BiQuad.h +++ b/math/dsp/iir/BiQuad.h @@ -29,7 +29,7 @@ namespace IIR { /** filter the given amplitude of the given channel (history) */ Scalar filter( const Scalar aIn ) { - Scalar aOut = 0; + Scalar aOut = Scalar(); // zero aOut += aIn *(b0a0); aOut += in[0] *(b1a0); aOut += in[1] *(b2a0); diff --git a/math/filter/Complementary.h b/math/filter/Complementary.h new file mode 100644 index 0000000..3670c15 --- /dev/null +++ b/math/filter/Complementary.h @@ -0,0 +1,74 @@ +#ifndef COMPLEMENTARY_H +#define COMPLEMENTARY_H + +#include "../dsp/iir/BiQuad.h" +#include "../../math/stats/SampleRateEstimator.h" + +namespace Filter { + + template class Complementary { + + private: + + const float fLo; + const float fHi; + + IIR::BiQuad lp; + IIR::BiQuad hp; + + SampleRateEstimator slp; + SampleRateEstimator shp; + + T slow; + T fast; + + public: + + /** ctor with transition frequency and sample-rate */ + Complementary(const float fLo, const float fHi) : fLo(fLo), fHi(fHi), slow(), fast() { + //adjust(); + } + + void addSlow(const Timestamp ts, const T& slow) { + slp.update(ts); + this->slow = lp.filter(slow); + adjustLP(); + } + + void addFast(const Timestamp ts, const T& fast) { + shp.update(ts); + this->fast = hp.filter(fast); + adjustHP(); + } + + T get() const { + return slow+fast; + } + + T getLo() const { + return slow; + } + + T getHi() const { + return fast; + } + + private: + + void adjustLP() { + const float freqLP = slp.getCurHz(); + //std::cout << freqLP << ":" << freqHP << std::endl; + if (freqLP > fLo*2) {lp.setLowPass(fLo, 0.707, freqLP);} + } + + void adjustHP() { + const float freqHP = slp.getCurHz(); + //std::cout << freqLP << ":" << freqHP << std::endl; + if (freqHP > fHi*2) {hp.setHighPass(fHi, 0.707, freqHP);} + } + + }; + +} + +#endif // COMPLEMENTARY_H diff --git a/math/stats/SampleRateEstimator.h b/math/stats/SampleRateEstimator.h new file mode 100644 index 0000000..e5e1164 --- /dev/null +++ b/math/stats/SampleRateEstimator.h @@ -0,0 +1,41 @@ +#ifndef SAMPLERATEESTIMATOR_H +#define SAMPLERATEESTIMATOR_H + +#include "../../data/Timestamp.h" + +class SampleRateEstimator { + +private: + + const double a = 0.99; + double curHz = 0; + Timestamp tsLast; + +public: + + float update(const Timestamp ts) { + + // first + if (tsLast.isZero()) { + tsLast = ts; + return 0; + } + + const double diffSec = static_cast((ts-tsLast).sec()); + tsLast = ts; + + if (diffSec != 0) { + curHz = a*curHz + (1-a) * (1.0/diffSec); + } + + return static_cast(curHz); + + } + + float getCurHz() const { + return static_cast(curHz); + } + +}; + +#endif // SAMPLERATEESTIMATOR_H diff --git a/sensors/gps/GPSData.h b/sensors/gps/GPSData.h index 80f4360..c3fa77e 100644 --- a/sensors/gps/GPSData.h +++ b/sensors/gps/GPSData.h @@ -3,18 +3,19 @@ #include "../../data/Timestamp.h" #include "../../geo/EarthPos.h" +#include "../../math/Floatingpoint.h" struct GPSData { /** time this measurement was received (NOT the GPS-time) */ Timestamp tsReceived; - float lat; // deg - float lon; // deg - float alt; // m above sea-level + FPDefault lat; // deg + FPDefault lon; // deg + FPDefault alt; // m above sea-level - float accuracy; // m [might be NAN] - float speed; // m/s [might be NAN] + FPDefault accuracy; // m [might be NAN] + FPDefault speed; // m/s [might be NAN] /** ctor for invalid/unknown data */ GPSData() : tsReceived(), lat(NAN), lon(NAN), alt(NAN), accuracy(NAN), speed(NAN) {;} @@ -49,7 +50,7 @@ struct GPSData { private: - static inline bool EQ_OR_NAN(const float a, const float b) {return (a==b) || ( (a!=a) && (b!=b) );} + static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );} }; diff --git a/sensors/imu/AccelerometerData.h b/sensors/imu/AccelerometerData.h index 55e69d4..b71626d 100644 --- a/sensors/imu/AccelerometerData.h +++ b/sensors/imu/AccelerometerData.h @@ -3,20 +3,23 @@ #include #include +#include "../../math/Floatingpoint.h" /** data received from an accelerometer sensor */ struct AccelerometerData { - float x; - float y; - float z; + FPDefault x; + FPDefault y; + FPDefault z; AccelerometerData() : x(0), y(0), z(0) {;} - AccelerometerData(const float x, const float y, const float z) : x(x), y(y), z(z) {;} + AccelerometerData(const FPDefault x, const FPDefault y, const FPDefault z) : x(x), y(y), z(z) {;} - float magnitude() const { + //AccelerometerData(const FPDefault x, const FPDefault y, const FPDefault z) : x(x), y(y), z(z) {;} + + FPDefault magnitude() const { return std::sqrt( x*x + y*y + z*z ); } @@ -34,22 +37,24 @@ struct AccelerometerData { return *this; } - AccelerometerData operator - (const AccelerometerData& o) const { - return AccelerometerData(x-o.x, y-o.y, z-o.z); + + AccelerometerData operator + (const AccelerometerData o) const { + return AccelerometerData(x+o.x, y+o.y, z+o.z); } - AccelerometerData operator / (const float val) const { - return AccelerometerData(x/val, y/val, z/val); + AccelerometerData operator - (const AccelerometerData& o) const { + return AccelerometerData(x-o.x, y-o.y, z-o.z); } AccelerometerData operator * (const float val) const { return AccelerometerData(x*val, y*val, z*val); } - AccelerometerData operator + (const AccelerometerData o) const { - return AccelerometerData(x+o.x, y+o.y, z+o.z); + AccelerometerData operator / (const float val) const { + return AccelerometerData(x/val, y/val, z/val); } + std::string asString() const { std::stringstream ss; ss << "(" << x << "," << y << "," << z << ")"; @@ -68,7 +73,7 @@ struct AccelerometerData { private: - static inline bool EQ_OR_NAN(const float a, const float b) {return (a==b) || ( (a!=a) && (b!=b) );} + static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );} }; diff --git a/sensors/imu/CompassData.h b/sensors/imu/CompassData.h index c336091..551f63d 100644 --- a/sensors/imu/CompassData.h +++ b/sensors/imu/CompassData.h @@ -4,16 +4,16 @@ #include #include - +#include "../../math/Floatingpoint.h" /** data received from a compass sensor */ struct CompassData { /** azimuth angle. NAN if not available */ - float azimuth = NAN; + FPDefault azimuth = NAN; /** describes the sensor's quality */ - float quality01 = 0; + FPDefault quality01 = 0; /** empty ctor */ @@ -49,7 +49,7 @@ struct CompassData { private: - static inline bool EQ_OR_NAN(const float a, const float b) {return (a==b) || ( (a!=a) && (b!=b) );} + static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );} }; diff --git a/sensors/imu/CompassDetection.h b/sensors/imu/CompassDetection.h index 0af0398..2ec5635 100644 --- a/sensors/imu/CompassDetection.h +++ b/sensors/imu/CompassDetection.h @@ -2,18 +2,21 @@ #define INDOOR_IMU_COMPASSDETECTION_H #include "MagnetometerData.h" -#include "PoseDetection.h" +#include "PoseProvider.h" +#include "TurnProvider.h" #include "../../data/Timestamp.h" #include "../../math/MovingAverageTS.h" #include "../../math/MovingStdDevTS.h" #include "../../geo/Point3.h" #include "../../Assertions.h" +#include "../../geo/Angle.h" #include "CompassDetectionPlot.h" #include #include +#include "../../math/dsp/iir/BiQuad.h" /** @@ -33,21 +36,37 @@ private: // Timestamp lastEstimation; // } orientation; - MovingAverageTS avgIn = MovingAverageTS(Timestamp::fromMS(150), MagnetometerData(0,0,0)); + MovingAverageTS avgIn; //MovingStdDevTS stdDev = MovingStdDevTS(Timestamp::fromMS(2000), MagnetometerData(0,0,0)); MovingStdDevTS stdDev = MovingStdDevTS(Timestamp::fromMS(1500), 0); - PoseDetection* pose = nullptr; + + + const PoseProvider* pose = nullptr; + const TurnProvider* turn = nullptr; + int numMagReadings = 0; + bool stable; + + MovingStdDevTS stdDevForSigma = MovingStdDevTS(Timestamp::fromMS(500), 0); + float lastHeading = 0; + float curSigma = 0; + public: /** ctor */ - CompassDetection(PoseDetection* pose) : pose(pose) { + CompassDetection(const PoseProvider* pose, const TurnProvider* turn, const Timestamp avgFrame = Timestamp::fromMS(500)) : + pose(pose), turn(turn), avgIn(avgFrame, MagnetometerData(0,0,0)) { ; } + /** get the current uncertainty estimation */ + float getSigma() { + return curSigma + pose->getSigma() + turn->getSigma(); + } + /** add magnetometer readings, returns the current heading, or NAN (if unstable/unknown) */ float addMagnetometer(const Timestamp& ts, const MagnetometerData& mag) { @@ -73,30 +92,38 @@ public: // calculate angle // https://aerocontent.honeywell.com/aero/common/documents/myaerospacecatalog-documents/Defense_Brochures-documents/Magnetic__Literature_Application_notes-documents/AN203_Compass_Heading_Using_Magnetometers.pdf - const float mx = curMag.x; - const float my = curMag.y; + const float mx = (curMag.x); + const float my = (curMag.y); const float tmp = std::atan2(my, mx); //const float tmp = (my > 0) ? (M_PI*0.5 - std::atan(mx/my)) : (M_PI*1.5 - atan(mx/my)); // http://www.magnetic-declination.com/ // http://davidegironi.blogspot.de/2013/01/avr-atmega-hmc5883l-magnetometer-lib-01.html const float declination = 3.0f / 180.0f * M_PI; // GERMANY! - const float curHeading = - tmp + declination; + //const float declination = 0; // GERMANY! + float curHeading = Angle::makeSafe_2PI(- tmp + declination); + float resHeading; - bool stable = true; + stable = true; // calculate standard-deviation within a certain timeframe - stdDev.add(ts, curHeading); + const float curDiff = Angle::getSignedDiffRAD_2PI(curHeading, lastHeading); + stdDev.add(ts, curDiff); + stdDevForSigma.add(ts, curDiff); + curSigma = (5.0f/180.0f*(float)M_PI) + stdDevForSigma.get()*10; + lastHeading = curHeading; + + // if the standard-deviation is too high, // the compass is considered unstable - if (numMagReadings < 250 || stdDev.get() > 0.30) { - resHeading = NAN; - stable = false; - } else { +// if (numMagReadings < 250 || stdDev.get() > 0.30) { +// resHeading = NAN; +// stable = false; +// } else { resHeading = curHeading; stable = true; - } +// } #ifdef WITH_DEBUG_PLOT plot.add(ts, curHeading, stable, mag, curMag); @@ -107,6 +134,7 @@ public: } + }; #endif // INDOOR_IMU_COMPASSDETECTION_H diff --git a/sensors/imu/CompassDetectionPlot.h b/sensors/imu/CompassDetectionPlot.h index 2b4db3b..5c1cbe1 100644 --- a/sensors/imu/CompassDetectionPlot.h +++ b/sensors/imu/CompassDetectionPlot.h @@ -22,7 +22,7 @@ K::Gnuplot gp1; K::Gnuplot gp2; - K::GnuplotMultiplot multiplot = K::GnuplotMultiplot(1,2); + //K::GnuplotMultiplot multiplot = K::GnuplotMultiplot(1,2); K::GnuplotPlot plotMagRaw; K::GnuplotPlotElementLines lineMagRawX; @@ -47,8 +47,8 @@ gp1 << "set autoscale xfix\n"; gp2 << "set size ratio -1\n"; - multiplot.add(&plotMagRaw); - multiplot.add(&plotMagFix); + //multiplot.add(&plotMagRaw); + //multiplot.add(&plotMagFix); plotMagRaw.setTitle("Magnetometer (raw)"); plotMagRaw.add(&lineMagRawX); lineMagRawX.getStroke().getColor().setHexStr("#ff0000"); lineMagRawX.setTitle("x"); @@ -106,7 +106,7 @@ gp1 << "set arrow 1 from screen 0.85,0.85 to screen " << ax << "," << ay << "\n"; gp1 << "set object 2 circle at screen 0.85,0.85 radius screen 0.1 \n"; - gp1.draw(multiplot); + gp1.draw(plotMagFix); gp1.flush(); gp2.draw(plotMagScatter); diff --git a/sensors/imu/GravityData.h b/sensors/imu/GravityData.h index 3d87b0b..24fee76 100644 --- a/sensors/imu/GravityData.h +++ b/sensors/imu/GravityData.h @@ -3,20 +3,20 @@ #include #include - +#include "../../math/Floatingpoint.h" /** data received from an accelerometer sensor */ struct GravityData { - float x; - float y; - float z; + FPDefault x; + FPDefault y; + FPDefault z; GravityData() : x(0), y(0), z(0) {;} GravityData(const float x, const float y, const float z) : x(x), y(y), z(z) {;} - float magnitude() const { + FPDefault magnitude() const { return std::sqrt( x*x + y*y + z*z ); } @@ -38,7 +38,7 @@ struct GravityData { return GravityData(x-o.x, y-o.y, z-o.z); } - GravityData operator / (const float val) const { + GravityData operator / (const FPDefault val) const { return GravityData(x/val, y/val, z/val); } @@ -60,7 +60,7 @@ struct GravityData { private: - static inline bool EQ_OR_NAN(const float a, const float b) {return (a==b) || ( (a!=a) && (b!=b) );} + static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );} }; diff --git a/sensors/imu/GyroscopeData.h b/sensors/imu/GyroscopeData.h index d4f0ee3..5205a72 100644 --- a/sensors/imu/GyroscopeData.h +++ b/sensors/imu/GyroscopeData.h @@ -3,6 +3,7 @@ #include #include +#include "../../math/Floatingpoint.h" /** * data received from a gyroscope sensor @@ -10,14 +11,14 @@ */ struct GyroscopeData { - float x; - float y; - float z; + FPDefault x; + FPDefault y; + FPDefault z; GyroscopeData() : x(0), y(0), z(0) {;} /** ctor from RADIANS */ - GyroscopeData(const float x, const float y, const float z) : x(x), y(y), z(z) {;} + GyroscopeData(const FPDefault x, const FPDefault y, const FPDefault z) : x(x), y(y), z(z) {;} float magnitude() const { return std::sqrt( x*x + y*y + z*z ); @@ -41,7 +42,7 @@ struct GyroscopeData { private: - static inline bool EQ_OR_NAN(const float a, const float b) {return (a==b) || ( (a!=a) && (b!=b) );} + static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );} }; diff --git a/sensors/imu/MagnetometerData.h b/sensors/imu/MagnetometerData.h index 847ee49..613fa37 100644 --- a/sensors/imu/MagnetometerData.h +++ b/sensors/imu/MagnetometerData.h @@ -4,20 +4,21 @@ #include #include +#include "../../math/Floatingpoint.h" /** * data received from a magnetometer sensor */ struct MagnetometerData { - float x; - float y; - float z; + FPDefault x; + FPDefault y; + FPDefault z; MagnetometerData() : x(0), y(0), z(0) {;} /** ctor from RADIANS */ - MagnetometerData(const float x, const float y, const float z) : x(x), y(y), z(z) {;} + MagnetometerData(const FPDefault x, const FPDefault y, const FPDefault z) : x(x), y(y), z(z) {;} std::string asString() const { std::stringstream ss; @@ -29,7 +30,7 @@ struct MagnetometerData { return (x == x) && (y == y) && (z == z); } - bool operator == (const GyroscopeData& o ) const { + bool operator == (const MagnetometerData& o ) const { return EQ_OR_NAN(x, o.x) && EQ_OR_NAN(y, o.y) && EQ_OR_NAN(z, o.z); @@ -53,22 +54,27 @@ struct MagnetometerData { return *this; } - MagnetometerData operator * (const MagnetometerData& o) const { - return MagnetometerData(x*o.x, y*o.y, z*o.z); + + MagnetometerData operator + (const MagnetometerData& o) const { + return MagnetometerData(x+o.x, y+o.y, z+o.z); } MagnetometerData operator - (const MagnetometerData& o) const { return MagnetometerData(x-o.x, y-o.y, z-o.z); } - MagnetometerData operator / (const float val) const { + MagnetometerData operator * (const MagnetometerData& o) const { + return MagnetometerData(x*o.x, y*o.y, z*o.z); + } + + MagnetometerData operator / (const FPDefault val) const { return MagnetometerData(x/val, y/val, z/val); } private: - static inline bool EQ_OR_NAN(const float a, const float b) {return (a==b) || ( (a!=a) && (b!=b) );} + static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );} }; diff --git a/sensors/imu/PoseDetection.h b/sensors/imu/PoseDetection.h index 968c3f1..a990f43 100644 --- a/sensors/imu/PoseDetection.h +++ b/sensors/imu/PoseDetection.h @@ -5,6 +5,7 @@ #include "../../data/Timestamp.h" +#include "../../math/MovingStdDevTS.h" #include "../../math/MovingAverageTS.h" #include "../../math/MovingMedianTS.h" #include "../../math/Matrix3.h" @@ -14,12 +15,13 @@ //#include #include "PoseDetectionPlot.h" +#include "PoseProvider.h" /** * estimate the smartphones world-pose, * based on the accelerometer's data */ -class PoseDetection { +class PoseDetection : public PoseProvider { /** live-pose-estimation using moving average of the smartphone's accelerometer */ @@ -29,7 +31,7 @@ class PoseDetection { MovingAverageTS avg; EstMovingAverage(const Timestamp window) : - avg(MovingAverageTS(window, AccelerometerData())) { + avg(window, AccelerometerData()) { // start approximately addAcc(Timestamp(), AccelerometerData(0,0,9.81)); @@ -45,26 +47,82 @@ class PoseDetection { return avg.get(); } +// /** get the current rotation matrix estimation */ +// //Eigen::Matrix3f get() const { +// Matrix3 get() const { + +// // get the current acceleromter average +// const AccelerometerData avgAcc = avg.get(); +// //const Eigen::Vector3f avg(avgAcc.x, avgAcc.y, avgAcc.z); +// const Vector3 avg(avgAcc.x, avgAcc.y, avgAcc.z); + +// // rotate average-accelerometer into (0,0,1) +// //Eigen::Vector3f zAxis; zAxis << 0, 0, 1; +// const Vector3 zAxis(0,0,1); +// const Matrix3 rotMat = getRotationMatrix(avg.normalized(), zAxis); +// //const Matrix3 rotMat = getRotationMatrix(zAxis, avg.normalized()); // INVERSE +// //const Eigen::Matrix3f rotMat = getRotationMatrix(avg.normalized(), zAxis); + +// // just a small sanity check. after applying to rotation the acc-average should become (0,0,1) +// //Eigen::Vector3f aligned = (rotMat * avg).normalized(); +// const Vector3 aligned = (rotMat * avg).normalized(); +// Assert::isBetween(aligned.norm(), 0.95f, 1.05f, "result distorted"); +// Assert::isTrue((aligned-zAxis).norm() < 0.1f, "deviation too high"); + +// return rotMat; + +// } + + // FOR TESTING /** get the current rotation matrix estimation */ //Eigen::Matrix3f get() const { Matrix3 get() const { + // https://stackoverflow.com/questions/18558910/direction-vector-to-rotation-matrix // get the current acceleromter average const AccelerometerData avgAcc = avg.get(); //const Eigen::Vector3f avg(avgAcc.x, avgAcc.y, avgAcc.z); - const Vector3 avg(avgAcc.x, avgAcc.y, avgAcc.z); + const Point3 vZ = Point3(avgAcc.x, avgAcc.y, avgAcc.z).normalized(); + const Point3 vX = cross(Point3(0,1,0), vZ).normalized();//Point3(avgAcc.z, -avgAcc.y, avgAcc.x); + //const Point3 v2 = cross(v3, vx).normalized(); + const Point3 vY = cross(vZ, vX).normalized(); - // rotate average-accelerometer into (0,0,1) - //Eigen::Vector3f zAxis; zAxis << 0, 0, 1; - const Vector3 zAxis(0,0,1); - const Matrix3 rotMat = getRotationMatrix(avg.normalized(), zAxis); - //const Matrix3 rotMat = getRotationMatrix(zAxis, avg.normalized()); // INVERSE - //const Eigen::Matrix3f rotMat = getRotationMatrix(avg.normalized(), zAxis); + Matrix3 rotMat({ + vX.x, vY.x, vZ.x, + vX.y, vY.y, vZ.y, + vX.z, vY.z, vZ.z, + }); + + // above transposed = inverse matrix = undo rotation + rotMat = rotMat.transposed(); + +// // https://stackoverflow.com/questions/18558910/direction-vector-to-rotation-matrix +// // get the current acceleromter average +// const AccelerometerData avgAcc = avg.get(); +// //const Eigen::Vector3f avg(avgAcc.x, avgAcc.y, avgAcc.z); +// const Point3 vZ = Point3(-avgAcc.x, -avgAcc.y, -avgAcc.z).normalized(); +// const Point3 vX = cross(vZ, Point3(0,1,0)).normalized();//Point3(avgAcc.z, -avgAcc.y, avgAcc.x); +// //const Point3 v2 = cross(v3, vx).normalized(); +// const Point3 vY = cross(vX, vZ).normalized(); + +// Matrix3 rotMat({ +// vX.x, vY.x, vZ.x, +// vX.y, vY.y, vZ.y, +// vX.z, vY.z, vZ.z, +// }); + +// //rotMat = Matrix3::getRotationDeg(180, 0, 0) * rotMat; +// //rotMat = Matrix3::getRotationDeg(0, 0, 180) * rotMat; + +// // above transposed = inverse matrix = undo rotation +// //rotMat = rotMat.transposed(); // just a small sanity check. after applying to rotation the acc-average should become (0,0,1) - //Eigen::Vector3f aligned = (rotMat * avg).normalized(); - const Vector3 aligned = (rotMat * avg).normalized(); - Assert::isTrue((aligned-zAxis).norm() < 0.1f, "deviation too high"); + const Vector3 zAxis(0,0,1); + const Vector3 inp(avgAcc.x, avgAcc.y, avgAcc.z); + const Vector3 aligned = (rotMat * inp).normalized(); + Assert::isBetween(aligned.norm(), 0.95f, 1.05f, "result distorted"); + //Assert::isTrue((aligned-zAxis).norm() < 0.10f, "deviation too high"); return rotMat; @@ -120,22 +178,24 @@ class PoseDetection { // }; - private: struct { - //Eigen::Matrix3f rotationMatrix = Eigen::Matrix3f::Identity(); Matrix3 rotationMatrix = Matrix3::identity(); + float curSigma = 0; bool isKnown = false; Timestamp lastEstimation; } orientation; /** how the pose is estimated */ //LongTermMovingAverage est = LongTermMovingAverage(Timestamp::fromMS(1250)); - EstMovingAverage est = EstMovingAverage(Timestamp::fromMS(450)); + EstMovingAverage est; //EstMovingMedian est = EstMovingMedian(Timestamp::fromMS(300)); + MovingStdDevTS stdDevForSigma = MovingStdDevTS(Timestamp::fromMS(500), 0); + #ifdef WITH_DEBUG_PLOT + int plotLimit = 0; PoseDetectionPlot plot; #endif @@ -143,22 +203,46 @@ private: public: /** ctor */ - PoseDetection() { - ; + PoseDetection(const Timestamp delay = Timestamp::fromMS(450)) : est(delay) { + #ifdef WITH_DEBUG_PLOT + plot.setName("PoseDetection1"); + #endif } /** get the smartphone's rotation matrix */ - const Matrix3& getMatrix() const { + const Matrix3& getMatrix() const override { return orientation.rotationMatrix; } /** is the pose known and stable? */ - bool isKnown() const { + bool isKnown() const override { return orientation.isKnown; } + Matrix3 getMatrixGyro() const { + return Matrix3::identity(); + } + + Matrix3 getMatrixAcc() const { + return orientation.rotationMatrix; + } + + /** current uncertainty */ + float getSigma() const { + return orientation.curSigma; + } + + void addAccelerometer(const Timestamp& ts, const AccelerometerData& acc) { + // uncertainty + const Vector3 curAcc = Vector3(acc.x, acc.y, acc.z); + float angleDiff = std::acos(curAcc.normalized().dot(Vector3(0,0,1))); + if (!std::isnan(angleDiff)) { + stdDevForSigma.add(ts, angleDiff); + orientation.curSigma = stdDevForSigma.get()*1; + } + // add accelerometer data est.addAcc(ts, acc); @@ -169,7 +253,10 @@ public: // debug-plot (if configured) #ifdef WITH_DEBUG_PLOT - plot.add(ts, est.getBase(), orientation.rotationMatrix); + if (++plotLimit > 5) { + plot.add(ts, est.getBase(), orientation.rotationMatrix); + plotLimit = 0; + } #endif } diff --git a/sensors/imu/PoseDetection2.h b/sensors/imu/PoseDetection2.h new file mode 100644 index 0000000..e3b6ef3 --- /dev/null +++ b/sensors/imu/PoseDetection2.h @@ -0,0 +1,301 @@ +#ifndef POSEDETECTION2_H +#define POSEDETECTION2_H + + +#include "AccelerometerData.h" +#include "GyroscopeData.h" + +#include "../../data/Timestamp.h" + +//#include "../../math/MovingAverageTS.h" +//#include "../../math/MovingMedianTS.h" +#include "../../math/Matrix3.h" + +#include "../../math/filter/Complementary.h" + +#include "../../geo/Point3.h" + +//#include "../../math/FixedFrequencyInterpolator.h" + +#include "PoseDetectionPlot.h" +#include "PoseProvider.h" + +/** + * estimate the smartphones world-pose, + * based on the accelerometer's data + * + * https://robotics.stackexchange.com/questions/6953/how-to-calculate-euler-angles-from-gyroscope-output + */ +class PoseDetection2 : public PoseProvider { + +private: + + struct { + //Eigen::Matrix3f rotationMatrix = Eigen::Matrix3f::Identity(); + Matrix3 rotationMatrix = Matrix3::identity(); + bool isKnown = false; + Timestamp lastEstimation; + } orientation; + + /** how the pose is estimated */ + //LongTermMovingAverage est = LongTermMovingAverage(Timestamp::fromMS(1250)); + //EstMovingAverage est = EstMovingAverage(Timestamp::fromMS(450)); + //EstMovingMedian est = EstMovingMedian(Timestamp::fromMS(300)); + + #ifdef WITH_DEBUG_PLOT + PoseDetectionPlot plot; + PoseDetectionPlotAngles plotAngles; + #endif + + Vector3 lastGyroReading; + Timestamp lastGyroReadingTS; + + //FixedFrequencyInterpolator interpolAcc; + //FixedFrequencyInterpolator interpolGyro; + + Filter::Complementary filter; + + //std::vector accBuf; + //std::vector gyroBuf; + + + + Vector3 curAccel; + + bool firstAccel = true; + Vector3 curAccel_rad; + Vector3 curGyroSum_rad; + + //Matrix3 curGyroMatrix = Matrix3::identity(); + + static constexpr float splitFreq = 2.5; + static constexpr float sRate = 50; + static constexpr int sRateTS = 1000/sRate; + + +public: + + /** ctor */ + //PoseDetection2() : interpolAcc(Timestamp::fromMS(sRateTS)), interpolGyro(Timestamp::fromMS(sRateTS)), filter(splitFreq, sRate) { + PoseDetection2() : filter(1, 2.5) { + #ifdef WITH_DEBUG_PLOT + plot.setName("PoseDetection2"); + #endif + } + + /** get the smartphone's rotation matrix */ + const Matrix3& getMatrix() const override { + return orientation.rotationMatrix; + } + + /** is the pose known and stable? */ + bool isKnown() const override { + return orientation.isKnown; + } + + + float angleX_old_rad = 0; + float angleY_old_rad = 0; + + + void addAccelerometer(const Timestamp& ts, const AccelerometerData& acc) { + + // https://theccontinuum.com/2012/09/24/arduino-imu-pitch-roll-from-accelerometer/#docs + + float angleX_rad = std::atan2( acc.y, acc.z); + float angleY_rad = std::atan2(-acc.x, std::sqrt(acc.y*acc.y + acc.z*acc.z)); + float angleZ_rad = 0; + + if (std::abs(angleX_rad-angleX_old_rad) > M_PI) {angleX_rad += 2*M_PI;} + if (std::abs(angleY_rad-angleY_old_rad) > M_PI) {angleY_rad += 2*M_PI;} + + angleX_old_rad = angleX_rad; + angleY_old_rad = angleY_rad; + +// float angleX_rad = std::atan2(acc.y, std::sqrt(acc.x*acc.x + acc.z*acc.z)); +// float angleY_rad = std::atan2(-acc.x, std::sqrt(acc.y*acc.y + acc.z*acc.z)); +// float angleZ_rad = 0; + +// Point2 ref(0,1); +// Point2 xz( acc.x, acc.z); +// Point2 yz(-acc.y, acc.z); +// float angleY_rad = std::atan2( determinant(ref,xz), dot(ref,xz) ); +// float angleX_rad = std::atan2( determinant(ref,yz), dot(ref,yz) ); +// float angleZ_rad = 0.0; + +// float angleX_rad = std::atan2(acc.y, acc.z); +// float angleY_rad = -std::atan2(acc.x, acc.z); +// float angleZ_rad = 0;//-std::atan2(acc.y, acc.x); + + + // float angleX2_rad = (angleX1_rad > 0) ? (angleX1_rad - 2*M_PI) : (angleX1_rad + 2*M_PI); +// float angleY2_rad = (angleY1_rad > 0) ? (angleY1_rad - 2*M_PI) : (angleY1_rad + 2*M_PI); +// float angleX_rad = (std::abs(curAngle_rad.x-angleX1_rad) < std::abs(curAccel_rad.x-angleX2_rad)) ? (angleX1_rad) : (angleX2_rad); +// float angleY_rad = (std::abs(curAngle_rad.y-angleY1_rad) < std::abs(curAccel_rad.y-angleY2_rad)) ? (angleY1_rad) : (angleY2_rad); + + curAccel = Vector3(acc.x, acc.y, acc.z); + curAccel_rad = Vector3(angleX_rad, angleY_rad, angleZ_rad); + + //curAccel_rad = Matrix3::getRotationRad(0,0,-angleZ_rad) * Vector3(angleX_rad, angleY_rad, angleZ_rad); + + + if (firstAccel) { + curGyroSum_rad = curAccel_rad; + firstAccel = false; + } + + + + } + + + + + void addGyroscope(const Timestamp& ts, const GyroscopeData& gyro) { + + Vector3 vec(gyro.x, gyro.y, gyro.z); + + // ignore the first reading completely, just remember its timestamp + if (lastGyroReadingTS.isZero()) {lastGyroReadingTS = ts; return;} + + // time-difference between previous and current reading + const Timestamp curDiff = ts - lastGyroReadingTS; + lastGyroReadingTS = ts; + + // fast sensors might lead to delay = 0 ms. filter those values + if (curDiff.isZero()) {return;} + + // current area + const Vector3 curArea = (lastGyroReading * curDiff.sec()); + +// // update sum +// curAngle_rad += curArea; +// curGyroSum_rad += curArea; + +// // PAPER + const float dx = 1 * lastGyroReading.x + std::sin(curGyroSum_rad.x)*std::sin(curGyroSum_rad.y)/std::cos(curGyroSum_rad.y)*lastGyroReading.y + std::cos(curGyroSum_rad.x)*std::sin(curGyroSum_rad.y)/std::cos(curGyroSum_rad.y)*lastGyroReading.z; + const float dy = std::cos(curGyroSum_rad.x)*lastGyroReading.y + -std::sin(curGyroSum_rad.x)*lastGyroReading.z; + const float dz = std::sin(curGyroSum_rad.x)/std::cos(curGyroSum_rad.y)*lastGyroReading.y + std::cos(curGyroSum_rad.x)/std::cos(curGyroSum_rad.y)*lastGyroReading.z; + curGyroSum_rad.x += dx*curDiff.sec(); + curGyroSum_rad.y += dy*curDiff.sec(); + curGyroSum_rad.z += dz*curDiff.sec(); + + +// // PAPER +// const Vector3 n = lastGyroReading / lastGyroReading.norm(); +// const float mag = lastGyroReading.norm() * curDiff.sec(); +// if (mag != 0) { +// curGyroMatrix = Matrix3::getRotationVec(n.x, n.y, n.z, mag).transposed() * curGyroMatrix; +// } + + // DEBUG PLOT + + + // update old reading + lastGyroReading = vec; + + update(ts); + + + + } + + Matrix3 getMatrixGyro() const { + return Matrix3::getRotationRad(curGyroSum_rad.x, curGyroSum_rad.y, curGyroSum_rad.z); + } + + Matrix3 getMatrixAcc() const { + return Matrix3::getRotationRad(curAccel_rad.x, curAccel_rad.y, curAccel_rad.z); + } + +private: + + Vector3 curAngle_rad; + int cnt = 0; + + void update(const Timestamp ts) { + + + // complementary filter x = alpha * x + (1-alpha) * y; + const float alpha = 0.98f; + //curAngle_rad = curAngle_rad*alpha + curAccel_rad*(1-alpha); + //curAngle_rad = curAccel_rad; + //curAngle_rad = curGyroSum_rad; + + //std::cout << curGyroSum_rad.x <<" " << curGyroSum_rad.y << " " << curGyroSum_rad.z << std::endl; + + //curAngle_rad = filter.get(); + + filter.addSlow(ts, curAccel_rad); + filter.addFast(ts, curGyroSum_rad); + + static Vector3 fused; + static Vector3 pref; + Vector3 diff = curGyroSum_rad - pref; + fused = (fused+diff) * alpha + curAccel_rad * (1-alpha); + pref = curGyroSum_rad; + + // update + //orientation.rotationMatrix = Matrix3::getRotationRad(curAccel_rad.x, curAccel_rad.y, curAccel_rad.z); //getMatrixFor(cur); + //orientation.rotationMatrix = Matrix3::getRotationRad(curGyroSum_rad.x, curGyroSum_rad.y, curGyroSum_rad.z); //getMatrixFor(cur); + //orientation.rotationMatrix = curGyroMatrix; + //orientation.rotationMatrix = Matrix3::getRotationRadZ(curGyroSum_rad.z) * Matrix3::getRotationRadX(curGyroSum_rad.x) * Matrix3::getRotationRadY(curGyroSum_rad.y); + //orientation.rotationMatrix = Matrix3::getRotationRad(curGyroSum_rad.x, curGyroSum_rad.y, curGyroSum_rad.z); + orientation.rotationMatrix = Matrix3::getRotationRad(fused.x, fused.y, 0); //getMatrixFor(cur); + + + orientation.isKnown = true; + orientation.lastEstimation = ts; + + // debug-plot (if configured) + #ifdef WITH_DEBUG_PLOT + plot.add(ts, curAccel, orientation.rotationMatrix); + if (++cnt % 2 == 0) { + plotAngles.addAcc(ts, curAccel_rad.x, curAccel_rad.y); + plotAngles.addGyro(ts, curGyroSum_rad.x, curGyroSum_rad.y); + plotAngles.addFused(ts, fused.x, fused.y); + } + #endif + + } + +// /** get the current rotation matrix estimation */ +// Matrix3 getMatrixFor(const Vector3 cur) const { + +// // rotate average-accelerometer into (0,0,1) +// //Eigen::Vector3f zAxis; zAxis << 0, 0, 1; +// const Vector3 zAxis(0,0,1); +// const Matrix3 rotMat = getRotationMatrix(cur.normalized(), zAxis); +// //const Matrix3 rotMat = getRotationMatrix(zAxis, avg.normalized()); // INVERSE +// //const Eigen::Matrix3f rotMat = getRotationMatrix(avg.normalized(), zAxis); + +// // just a small sanity check. after applying to rotation the acc-average should become (0,0,1) +// //Eigen::Vector3f aligned = (rotMat * avg).normalized(); +// const Vector3 aligned = (rotMat * cur).normalized(); +// Assert::isTrue((aligned-zAxis).norm() < 0.1f, "deviation too high"); + +// return rotMat; + +// } + +// /** get a matrix that rotates the vector "from" into the vector "to" */ +// static Matrix3 getRotationMatrix(const Vector3& from, const Vector3 to) { + +// // http://math.stackexchange.com/questions/293116/rotating-one-3d-vector-to-another + +// const Vector3 v = from.cross(to) / from.cross(to).norm(); +// const float angle = std::acos( from.dot(to) / from.norm() / to.norm() ); + +// Matrix3 A({ +// 0.0f, -v.z, v.y, +// v.z, 0.0f, -v.x, +// -v.y, v.x, 0.0f +// }); + +// return Matrix3::identity() + (A * std::sin(angle)) + ((A*A) * (1-std::cos(angle))); + +// } + +}; + +#endif // POSEDETECTION2_H diff --git a/sensors/imu/PoseDetection3.h b/sensors/imu/PoseDetection3.h new file mode 100644 index 0000000..b22d8da --- /dev/null +++ b/sensors/imu/PoseDetection3.h @@ -0,0 +1,179 @@ +#ifndef POSEDETECTION3_H +#define POSEDETECTION3_H + +#include "AccelerometerData.h" +#include "GyroscopeData.h" + +#include "../../data/Timestamp.h" +#include "../../math/Matrix3.h" +#include "../../math/Quaternion.h" + +#include "../../geo/Point3.h" + +#include "PoseDetectionPlot.h" +#include "PoseProvider.h" + + +class PoseDetection3 : public PoseProvider { + +private: + + struct { + //Eigen::Matrix3f rotationMatrix = Eigen::Matrix3f::Identity(); + Matrix3 rotationMatrix = Matrix3::identity(); + bool isKnown = false; + Timestamp lastEstimation; + } orientation; + + #ifdef WITH_DEBUG_PLOT + PoseDetectionPlot plot; + PoseDetectionPlotAngles plotAngles; + #endif + + Vector3 lastGyroReading; + Timestamp lastGyroReadingTS; + +public: + + /** ctor */ + PoseDetection3() { + #ifdef WITH_DEBUG_PLOT + plot.setName("PoseDetection3"); + #endif + } + + /** get the smartphone's rotation matrix */ + const Matrix3& getMatrix() const override { + return orientation.rotationMatrix; + } + + /** is the pose known and stable? */ + bool isKnown() const override { + return orientation.isKnown; + } + + + bool first = true; + + Quaternion qGyro = Quaternion(1, 0,0,0); + Quaternion qGyroUpdate; + Quaternion qAccel; + Quaternion qFiltered; + + void addAccelerometer(const Timestamp& ts, const AccelerometerData& acc) { + + const Vector3 vec(-acc.x, -acc.y, acc.z); + const Vector3 v = vec.normalized(); + + + const float mag = -std::acos(v.dot(Vector3(0,0,1)));//-std::acos(v.z); << same + const Vector3 n = Vector3(v.y, -v.x, 0).normalized(); + qAccel = Quaternion::fromAxisAngle(mag, n.x, n.y, n.z); + + //const float magY = std::atan2(acc.x, acc.z); + //const float magX = std::atan2(acc.y, acc.z); + //qAccel = Quaternion::fromAxisAngle(magX, 1, 0, 0) * Quaternion::fromAxisAngle(-magY, 0, 1, 0); + + + + //Vector3 dv = qAccel.toEuler(); + //dv.z = 0; + //std::cout << dv.x << " " << dv.y << " " << dv.z << std::endl; + + // for plotting + if (first) { + qGyro = qAccel; + first = false; + } + + int i = 0; (void) i; + + } + + + + + void addGyroscope(const Timestamp& ts, const GyroscopeData& gyro) { + + Vector3 vec(gyro.x, gyro.y, gyro.z); + + // ignore the first reading completely, just remember its timestamp + if (lastGyroReadingTS.isZero()) {lastGyroReadingTS = ts; return;} + + // time-difference between previous and current reading + const Timestamp curDiff = ts - lastGyroReadingTS; + lastGyroReadingTS = ts; + + // fast sensors might lead to delay = 0 ms. filter those values + if (curDiff.isZero()) {return;} + + // current area + //const Vector3 curArea = (lastGyroReading * curDiff.sec()); + + + // length of the rotation vector + const float theta = curDiff.sec() * lastGyroReading.norm(); + const Vector3 v = lastGyroReading.normalized(); + lastGyroReading = vec; + + if (theta == 0) {return;} + qGyroUpdate = Quaternion::fromAxisAngle(theta, v.x, v.y, v.z);// qUpdate(cos(theta/2), v.x * sin(theta/2), v.y * sin(theta/2), v.z * sin(theta/2)); + + // update + qGyro = qGyroUpdate * qGyro; + + + + update(ts); + + } + + Matrix3 getMatrixAcc() const { + Vector3 r = qAccel.toEuler(); + return Matrix3::getRotationRad(r.x, r.y, r.z); + } + Matrix3 getMatrixGyro() const { + Vector3 r = qGyro.toEuler(); + return Matrix3::getRotationRad(r.x, r.y, r.z); + } + +private: + + Vector3 curAngle_rad; + int cnt = 0; + + void update(const Timestamp ts) { + + + //Quaternion qFused = qGyro; + //qFiltered = qAccel; + //Quaternion qFused = (qGyro * alpha) + (qAccel * (1-alpha)); + qFiltered = Quaternion::lerp(qFiltered*qGyroUpdate, qAccel, 0.05); + //qFiltered = Quaternion::fromAxisAngle(qAccel.w*0.02, qAccel.x, qAccel.y, qAccel.z) * (qFiltered * qGyroUpdate) * 0.98; + + Vector3 fused = qFiltered.toEuler(); + //std::cout << fused.x <<" " << fused.y << " " << fused.z << std::endl; + + // update + orientation.rotationMatrix = Matrix3::getRotationRad(fused.x, fused.y, fused.z); //getMatrixFor(cur); + + + orientation.isKnown = true; + orientation.lastEstimation = ts; + + // debug-plot (if configured) + #ifdef WITH_DEBUG_PLOT + plot.add(ts, Vector3(0,0,0), orientation.rotationMatrix); + if (++cnt % 2 == 0) { + plotAngles.addAcc(ts, qAccel.toEuler().x, qAccel.toEuler().y); + plotAngles.addGyro(ts, qGyro.toEuler().x, qGyro.toEuler().y); + plotAngles.addFused(ts, fused.x, fused.y); + } + #endif + + } + + +}; + +#endif // POSEDETECTION3_H diff --git a/sensors/imu/PoseDetectionPlot.h b/sensors/imu/PoseDetectionPlot.h index 46b0d8f..8d86d71 100644 --- a/sensors/imu/PoseDetectionPlot.h +++ b/sensors/imu/PoseDetectionPlot.h @@ -17,19 +17,103 @@ #include "../../math/Matrix3.h" #include "AccelerometerData.h" + class PoseDetectionPlotAngles { + + Timestamp plotRef; + Timestamp lastPlot; + + K::Gnuplot gp; + + K::GnuplotPlot plotAcc; + + K::GnuplotPlotElementLines lineAccX; + K::GnuplotPlotElementLines lineAccY; + + K::GnuplotPlotElementLines lineGyroX; + K::GnuplotPlotElementLines lineGyroY; + + K::GnuplotPlotElementLines lineFusedX; + K::GnuplotPlotElementLines lineFusedY; + + public: + + PoseDetectionPlotAngles() { + + gp << "set autoscale xfix\n"; + + plotAcc.setTitle("Accelerometer"); + + plotAcc.add(&lineFusedX); lineFusedX.getStroke().getColor().setHexStr("#990000"); lineFusedX.setTitle("FusedX");lineFusedX.getStroke().setWidth(3); + plotAcc.add(&lineFusedY); lineFusedY.getStroke().getColor().setHexStr("#09900"); lineFusedY.setTitle("FusedY"); lineFusedY.getStroke().setWidth(3); + + plotAcc.add(&lineAccX); lineAccX.getStroke().getColor().setHexStr("#ff8888"); lineAccX.setTitle("AccX"); lineAccX.getStroke().setType(K::GnuplotDashtype::DOTTED); lineAccX.getStroke().setWidth(2); + plotAcc.add(&lineAccY); lineAccY.getStroke().getColor().setHexStr("#88ff88"); lineAccY.setTitle("AccY"); lineAccY.getStroke().setType(K::GnuplotDashtype::DOTTED); lineAccY.getStroke().setWidth(2); + + plotAcc.add(&lineGyroX); lineGyroX.getStroke().getColor().setHexStr("#ff8888"); lineGyroX.setTitle("GyroX"); lineGyroX.getStroke().setType(K::GnuplotDashtype::DASHED); lineGyroX.getStroke().setWidth(2); + plotAcc.add(&lineGyroY); lineGyroY.getStroke().getColor().setHexStr("#88ff88"); lineGyroY.setTitle("GyroY"); lineGyroY.getStroke().setType(K::GnuplotDashtype::DASHED); lineGyroY.getStroke().setWidth(2); + + plotAcc.getKey().setVisible(true); + + } + + void addAcc(Timestamp ts, float x, float y) { + if (plotRef.isZero()) {plotRef = ts;} + const Timestamp tsPlot = (ts-plotRef); + lineAccX.add( K::GnuplotPoint2(tsPlot.ms(), x) ); + lineAccY.add( K::GnuplotPoint2(tsPlot.ms(), y) ); + } + + void addGyro(Timestamp ts, float x, float y) { + if (plotRef.isZero()) {plotRef = ts;} + const Timestamp tsPlot = (ts-plotRef); + lineGyroX.add( K::GnuplotPoint2(tsPlot.ms(), x) ); + lineGyroY.add( K::GnuplotPoint2(tsPlot.ms(), y) ); + } + + void addFused(Timestamp ts, float x, float y) { + if (plotRef.isZero()) {plotRef = ts;} + const Timestamp tsPlot = (ts-plotRef); + lineFusedX.add( K::GnuplotPoint2(tsPlot.ms(), x) ); + lineFusedY.add( K::GnuplotPoint2(tsPlot.ms(), y) ); + if (++cnt % 40 == 0) {flush(ts);} + } + + + + private: + + int cnt = 0; + + void flush(Timestamp ts) { + cleanup(ts); + gp.draw(plotAcc); + gp.flush(); + } + + // remove old entries + void cleanup(Timestamp ts) { + const Timestamp tsPlot = (ts-plotRef); + const Timestamp tsOldest = tsPlot - Timestamp::fromMS(3000); + auto remove = [tsOldest] (const K::GnuplotPoint2 pt) {return pt.x < tsOldest.ms();}; + lineAccX.removeIf(remove); + lineAccY.removeIf(remove); + lineGyroX.removeIf(remove); + lineGyroY.removeIf(remove); + lineFusedX.removeIf(remove); + lineFusedY.removeIf(remove); + } + + + + }; + class PoseDetectionPlot { Timestamp plotRef; Timestamp lastPlot; - K::Gnuplot gp1; K::Gnuplot gp2; - K::GnuplotPlot plotAcc; - K::GnuplotPlotElementLines lineAccX; - K::GnuplotPlotElementLines lineAccY; - K::GnuplotPlotElementLines lineAccZ; - K::GnuplotSplot plotPose; K::GnuplotSplotElementLines linePose; //K::GnuplotSplotElementEmpty emptyPose; @@ -41,14 +125,9 @@ /** ctor */ PoseDetectionPlot() { - gp1 << "set autoscale xfix\n"; + //gp1 << "set autoscale xfix\n"; gp2 << "set view equal xyz\n"; - plotAcc.setTitle("Accelerometer"); - plotAcc.add(&lineAccX); lineAccX.getStroke().getColor().setHexStr("#ff0000"); lineAccX.setTitle("gyroX"); - plotAcc.add(&lineAccY); lineAccY.getStroke().getColor().setHexStr("#00ff00"); lineAccY.setTitle("gyroY"); - plotAcc.add(&lineAccZ); lineAccZ.getStroke().getColor().setHexStr("#0000ff"); lineAccZ.setTitle("gyroZ"); - plotPose.setTitle("Pose"); plotPose.getView().setEnabled(false); plotPose.add(&linePose); @@ -58,6 +137,10 @@ plotPose.getAxisY().setRange(-8,+8); plotPose.getAxisZ().setRange(-8,+8); + plotPose.getAxisX().setLabel("x"); + plotPose.getAxisY().setLabel("y"); + plotPose.getAxisZ().setLabel("z"); + const float a = 0.05; const float b = 0.95; pose = { {{0, 0, 0},{1, 0, 0},{1, 1, 0},{0, 1, 0},{0, 0, 0}}, // boden @@ -85,17 +168,20 @@ } + void setName(const std::string& name) { + plotPose.setTitle(name); + } + + void add(Timestamp ts, const Vector3& avg, const Matrix3& rotation) { + add(ts, AccelerometerData(avg.x, avg.y, avg.z), rotation); + } + void add(Timestamp ts, const AccelerometerData& avg, const Matrix3& rotation) { if (plotRef.isZero()) {plotRef = ts;} const Timestamp tsPlot = (ts-plotRef); const Timestamp tsOldest = tsPlot - Timestamp::fromMS(5000); - // acc - lineAccX.add( K::GnuplotPoint2(tsPlot.ms(), avg.x) ); - lineAccY.add( K::GnuplotPoint2(tsPlot.ms(), avg.y) ); - lineAccZ.add( K::GnuplotPoint2(tsPlot.ms(), avg.z) ); - if (lastPlot + Timestamp::fromMS(50) < tsPlot) { lastPlot = tsPlot; @@ -128,20 +214,18 @@ const Vector3 vx = rotation * Vector3(2,0,0); const Vector3 vy = rotation * Vector3(0,3,0); const Vector3 vz = rotation * Vector3(0,0,5); + const Vector3 vA = Vector3(avg.x, avg.y, -avg.z) * 1; linePose.clear(); linePose.addSegment(K::GnuplotPoint3(0,0,0), K::GnuplotPoint3(vx.x, vx.y, vx.z)); linePose.addSegment(K::GnuplotPoint3(0,0,0), K::GnuplotPoint3(vy.x, vy.y, vy.z)); linePose.addSegment(K::GnuplotPoint3(0,0,0), K::GnuplotPoint3(vz.x, vz.y, vz.z)); + linePose.addSegment(K::GnuplotPoint3(0,0,0), K::GnuplotPoint3(vA.x, vA.y, vA.z)); - // remove old accelerometer entries - auto remove = [tsOldest] (const K::GnuplotPoint2 pt) {return pt.x < tsOldest.ms();}; - lineAccX.removeIf(remove); - lineAccY.removeIf(remove); - lineAccZ.removeIf(remove); + gp2 << "set label 91 at " << vx.x << "," << vx.y << "," << vx.z << " 'x' \n"; + gp2 << "set label 92 at " << vy.x << "," << vy.y << "," << vy.z << " 'y' \n"; + gp2 << "set label 93 at " << vz.x << "," << vz.y << "," << vz.z << " 'z' \n"; + gp2 << "set label 99 at " << vA.x << "," << vA.y << "," << vA.z << " 'accel' \n"; - // raw accelerometer - gp1.draw(plotAcc); - gp1.flush(); // 3D pose gp2.draw(plotPose); diff --git a/sensors/imu/PoseProvider.h b/sensors/imu/PoseProvider.h new file mode 100644 index 0000000..37cc8b5 --- /dev/null +++ b/sensors/imu/PoseProvider.h @@ -0,0 +1,43 @@ +#ifndef POSEPROVIDER_H +#define POSEPROVIDER_H + +#include "../../math/Matrix3.h" + +class PoseProvider { + +public: + + virtual const Matrix3& getMatrix() const = 0; + + virtual float getSigma() const = 0; + + virtual bool isKnown() const = 0; + +}; + + +class PoseProviderDummy : public PoseProvider { + + Matrix3 mat = Matrix3::identity(); + +public: + + virtual const Matrix3& getMatrix() const override { + return mat; + } + + Matrix3 getMatrixGyro() const { + return mat; + } + + Matrix3 getMatrixAcc() const { + return mat; + } + + virtual bool isKnown() const override { + return true; + } + +}; + +#endif // POSEPROVIDER_H diff --git a/sensors/imu/StepDetection2.h b/sensors/imu/StepDetection2.h index 0bb354b..9df73df 100644 --- a/sensors/imu/StepDetection2.h +++ b/sensors/imu/StepDetection2.h @@ -1,7 +1,6 @@ #ifndef STEPDETECTION2_H #define STEPDETECTION2_H - #include "AccelerometerData.h" #include "../../data/Timestamp.h" @@ -52,6 +51,8 @@ private: float threshold = 0.50; + float curFiltered = 0; + #ifdef WITH_DEBUG_PLOT K::Gnuplot gp; K::GnuplotPlot plot; @@ -109,6 +110,10 @@ public: } + float getCurFiltered() const { + return curFiltered; + } + /** does the given data indicate a step? */ bool add(const Timestamp ts, const AccelerometerData& acc) { @@ -118,6 +123,7 @@ public: auto onResample = [&] (const Timestamp ts, const AccelerometerData data) { const float mag = data.magnitude(); + Assert::isNotNaN(mag, "detected NaN magnitude"); // use long-term average to center around zero avg.add(ts, mag); @@ -128,6 +134,8 @@ public: // if (f != f) {return;} const float f = biquad.filter(mag0); const float fMag = f; + curFiltered = fMag; + Assert::isNotNaN(fMag, "detected NaN filtered magnitude"); const bool isMax = locMax.add(fMag); @@ -173,6 +181,8 @@ public: }; + //qDebug() << ts.ms() << " ---" << acc.x << " " << acc.y << " " << acc.z; + // ensure fixed sampling rate for FIR freq filters to work! interpol.add(ts, acc, onResample); diff --git a/sensors/imu/TurnDetection.h b/sensors/imu/TurnDetection.h index 7e932d6..794f1f9 100644 --- a/sensors/imu/TurnDetection.h +++ b/sensors/imu/TurnDetection.h @@ -4,11 +4,11 @@ #include "GyroscopeData.h" #include "AccelerometerData.h" #include "../../data/Timestamp.h" -#include "../../math/MovingAverageTS.h" +#include "../../math/MovingStdDevTS.h" #include "../../math/Matrix3.h" #include "../../geo/Point3.h" -#include "PoseDetection.h" +#include "PoseProvider.h" //#include @@ -19,12 +19,13 @@ #include "../../Assertions.h" +#include "TurnProvider.h" -class TurnDetection { +class TurnDetection : public TurnProvider { private: - PoseDetection* pose = nullptr; + PoseProvider* pose = nullptr; //std::vector gyroData; //Eigen::Vector3f prevGyro = Eigen::Vector3f::Zero(); @@ -32,6 +33,10 @@ private: Timestamp lastGyroReading; + float curSigma = 0; + + MovingStdDevTS stdDevForSigma = MovingStdDevTS(Timestamp::fromMS(500), 0); + #ifdef WITH_DEBUG_PLOT TurnDetectionPlot plot; #endif @@ -39,7 +44,7 @@ private: public: /** ctor */ - TurnDetection(PoseDetection* pose) : pose(pose) { + TurnDetection(PoseProvider* pose) : pose(pose) { ; } @@ -65,6 +70,11 @@ public: // } driftEst; + /** get the current uncertainty estimation */ + float getSigma() const override { + return curSigma; + } + float addGyroscope(const Timestamp& ts, const GyroscopeData& gyro) { // ignore the first reading completely, just remember its timestamp @@ -90,17 +100,20 @@ public: const Vector3 curGyro = pose->getMatrix() * vec; //driftEst.removeDrift(ts, curGyro); + // area //const Eigen::Vector3f area = const Vector3 area = - // Trapezoid rule (should be more accurate but does not always help?!) - //(prevGyro * curDiff.sec()) + // squared region - //((curGyro - prevGyro) * 0.5 * curDiff.sec()); // triangle region to the next (enhances the quality) + // Trapezoid rule (should be more accurate but does not always help?!) + //(prevGyro * curDiff.sec()) + // squared region + //((curGyro - prevGyro) * 0.5 * curDiff.sec()); // triangle region to the next (enhances the quality) - // just the rectangular region - (prevGyro * curDiff.sec()); // BEST?! + // average (is the same as above) + //((curGyro+prevGyro)/2 * curDiff.sec()); + // just the rectangular region + (prevGyro * curDiff.sec()); // BEST?! //} @@ -112,9 +125,14 @@ public: const float delta = area.z; #ifdef WITH_DEBUG_PLOT - plot.add(ts, delta, gyro, curGyro); + plot.addRelative(ts, delta, gyro, curGyro); #endif + //stdDevForSigma.add(ts, prevGyro.z); // ignore delta T. directly us radians-per-sec as sigma + //curSigma = stdDevForSigma.get(); + const float radPerSec = 1.0f / 180.0f * M_PI; + curSigma = radPerSec + std::abs(prevGyro.z * 0.05); // constant of 1deg/sec + 5% of current turn rate + // done return delta; diff --git a/sensors/imu/TurnDetection2.h b/sensors/imu/TurnDetection2.h new file mode 100644 index 0000000..e15d451 --- /dev/null +++ b/sensors/imu/TurnDetection2.h @@ -0,0 +1,117 @@ +#ifndef TURNDETECTION2_H +#define TURNDETECTION2_H + + +#include "GyroscopeData.h" +#include "AccelerometerData.h" +#include "../../data/Timestamp.h" +#include "../../math/MovingAverageTS.h" +#include "../../math/Matrix3.h" + +#include "../../geo/Point3.h" +#include "PoseProvider.h" + +//#include + +#include +#include + +#include "TurnDetectionPlot.h" + + +#include "../../Assertions.h" + +/** THIS WILL NOT WORK AS EXPECTED! */ +class TurnDetection2 { + +private: + + PoseProvider* pose = nullptr; + + Vector3 sumSinceStart = Vector3(0,0,0); + + Timestamp lastGyroReadingTS; + Vector3 lastGyroReading = Vector3(0,0,0); + + bool first = true; + Matrix3 poseMat = Matrix3::identity(); + + float curRes = 0; + + #ifdef WITH_DEBUG_PLOT + TurnDetectionPlot plot; + #endif + +public: + + /** ctor */ + TurnDetection2(PoseProvider* pose) : pose(pose) { + ; + } + + + float addGyroscope(const Timestamp& ts, const GyroscopeData& gyro) { + + + + // ignore the first reading completely, just remember its timestamp + if (lastGyroReadingTS.isZero()) {lastGyroReadingTS = ts; return curRes;} + + // time-difference between previous and current reading + const Timestamp curDiff = ts - lastGyroReadingTS; + lastGyroReadingTS = ts; + + // fast sensors might lead to delay = 0 ms. filter those values + if (curDiff.isZero()) {return curRes;} + + // current area + //const Eigen::Vector3f area = + const Vector3 curArea = + + // Trapezoid rule (should be more accurate but does not always help?!) + //(prevGyro * curDiff.sec()) + // squared region + //((curGyro - prevGyro) * 0.5 * curDiff.sec()); // triangle region to the next (enhances the quality) + + // just the rectangular region + (lastGyroReading * curDiff.sec()); // BEST?! + + //} + + // adjust sum + sumSinceStart = sumSinceStart + curArea; + + // update the previous value + lastGyroReading = Vector3(gyro.x, gyro.y, gyro.z); + + + // TESTING + const float sign = (curArea.z < 0) ? (-1) : (+1); + const float mag = curArea.norm(); + return (mag * sign); + + +// // ignore readings until the first orientation-estimation is available +// // otherwise we would use a wrong rotation matrix which yields wrong results! +// if (!pose->isKnown()) {return curRes;} +// if (first) {poseMat = pose->getMatrix(); first = false;} + +// // rotate the sum since start into our desired coordinate system, where the smartphone lies flat on the ground +// const Vector3 angles = pose->getMatrix() * sumSinceStart; +// //const Vector3 angles = poseMat * sumSinceStart; + +// // rotation = z-axis only! +// //const float delta = area(2); +// curRes = angles.z; + +// #ifdef WITH_DEBUG_PLOT +// plot.addAbsolute(ts, curRes, gyro, sumSinceStart); +// #endif + +// // done +// return curRes; + + } + +}; + +#endif // TURNDETECTION2_H diff --git a/sensors/imu/TurnDetectionPlot.h b/sensors/imu/TurnDetectionPlot.h index 4f76849..0f78847 100644 --- a/sensors/imu/TurnDetectionPlot.h +++ b/sensors/imu/TurnDetectionPlot.h @@ -69,7 +69,7 @@ } - void add(Timestamp ts, const float delta, const GyroscopeData& gyro, const Vector3& gyroFixed) { + void addRelative(Timestamp ts, const float delta, const GyroscopeData& gyro, const Vector3& gyroFixed) { plotCurHead += delta; @@ -114,6 +114,49 @@ } + void addAbsolute(Timestamp ts, const float curHead, const GyroscopeData& gyro, const Vector3& gyroFixed) { + + if (plotRef.isZero()) {plotRef = ts;} + const Timestamp tsPlot = (ts-plotRef); + const Timestamp tsOldest = tsPlot - Timestamp::fromMS(5000); + + // raw gyro + lineGyroRawX.add( K::GnuplotPoint2(tsPlot.ms(), gyro.x) ); + lineGyroRawY.add( K::GnuplotPoint2(tsPlot.ms(), gyro.y) ); + lineGyroRawZ.add( K::GnuplotPoint2(tsPlot.ms(), gyro.z) ); + + // adjusted gyro + lineGyroFixX.add( K::GnuplotPoint2(tsPlot.ms(), gyroFixed.x) ); + lineGyroFixY.add( K::GnuplotPoint2(tsPlot.ms(), gyroFixed.y) ); + lineGyroFixZ.add( K::GnuplotPoint2(tsPlot.ms(), gyroFixed.z) ); + + if (lastPlot + Timestamp::fromMS(50) < tsPlot) { + + lastPlot = tsPlot; + + auto remove = [tsOldest] (const K::GnuplotPoint2 pt) {return pt.x < tsOldest.ms();}; + lineGyroRawX.removeIf(remove); + lineGyroRawY.removeIf(remove); + lineGyroRawZ.removeIf(remove); + lineGyroFixX.removeIf(remove); + lineGyroFixY.removeIf(remove); + lineGyroFixZ.removeIf(remove); + + const float ax = 0.85 + std::cos(curHead)*0.1; + const float ay = 0.85 + std::sin(curHead)*0.1; + gp1 << "set arrow 1 from screen 0.85,0.85 to screen " << ax << "," << ay << "\n"; + gp1 << "set object 2 circle at screen 0.85,0.85 radius screen 0.1 \n"; + + //gp1.draw(plotGyroRaw); // raw only + gp1.draw(plotGyroFix); // fixed only + //gp1.draw(multiplot); // both + + gp1.flush(); + + } + + } + }; #endif diff --git a/sensors/imu/TurnProvider.h b/sensors/imu/TurnProvider.h new file mode 100644 index 0000000..7db1cdc --- /dev/null +++ b/sensors/imu/TurnProvider.h @@ -0,0 +1,12 @@ +#ifndef TURN_PROVIDER_H +#define TURN_PROVIDER_H + +class TurnProvider { + +public: + + virtual float getSigma() const = 0; + +}; + +#endif // TURN_PROVIDER_H diff --git a/sensors/pressure/BarometerData.h b/sensors/pressure/BarometerData.h index 23d17c6..931418d 100644 --- a/sensors/pressure/BarometerData.h +++ b/sensors/pressure/BarometerData.h @@ -3,28 +3,67 @@ #include +#include "../../math/Floatingpoint.h" /** data received from a barometer sensor */ struct BarometerData { - float hPa; + FPDefault hPa; explicit BarometerData() : hPa(0) {;} - explicit BarometerData(const float hPa) : hPa(hPa) {;} + explicit BarometerData(const FPDefault hPa) : hPa(hPa) {;} /** valid data? */ bool isValid() const { - return hPa == hPa; + return !std::isnan(hPa); } bool operator == (const BarometerData& o ) const { return EQ_OR_NAN(hPa, o.hPa); } +public: + + static constexpr double R = 8.31447; // universal gas constant for air, newton meter / mol kelvin + static constexpr double L = 0.0065; // standard temperature lapse rate, degree kelven per meter + static constexpr double g = 9.80665; // gravity constant, meter per square second + static constexpr double M = 0.0289644; // molar mass for dry air, kg / mol + static constexpr double P0 = 1013.25; // pressure at mean sea level, hPa + static constexpr double T0 = 288.15; // temperature at mean sea level, kelvin + + /** hPa->meter assuming a constant 1013.25 at 0m as reference */ + static FPDefault hpaToMeter(const FPDefault pressure) { + return static_cast( + (T0/L) * (std::pow(static_cast(pressure)/P0, -(R*L)/(g*M))-1.0) + ); + } + + /** hPa->meter by using the given pressure pRef at hRef as reference */ + static FPDefault hpaToMeter(const FPDefault pressure, const FPDefault PRef, const FPDefault hRef) { + return static_cast( + hRef + (T0/L) * (std::pow(static_cast(pressure)/PRef, -(R*L)/(g*M))-1.0) + ); + } + + /** meter->hPa assuming a constant 1013.25 at 0m as reference */ + static FPDefault meterTohPa(const FPDefault altitude) { + return static_cast( + P0 * std::pow(T0 / (T0+L*altitude), (g*M)/(R*L)) + ); + } + + /** meter->hPa by using the given pressure pRef at hRef as reference */ + static FPDefault meterTohPa(const FPDefault altitude, const FPDefault PRef, const FPDefault hRef) { + return static_cast( + PRef * std::pow(T0 / (T0+L*(altitude-hRef)), (g*M)/(R*L)) + ); + } + + private: - static inline bool EQ_OR_NAN(const float a, const float b) {return (a==b) || ( (a!=a) && (b!=b) );} + static inline bool EQ_OR_NAN(const FPDefault a, const FPDefault b) {return (a==b) || ( (a!=a) && (b!=b) );} }; diff --git a/tests/math/TestDistribution.cpp b/tests/math/TestDistribution.cpp index 68d5655..f12cd42 100644 --- a/tests/math/TestDistribution.cpp +++ b/tests/math/TestDistribution.cpp @@ -1,7 +1,15 @@ #ifdef WITH_TESTS #include "../Tests.h" -#include "../../math/Distributions.h" +#include "../../math/distribution/Normal.h" +#include "../../math/distribution/Bessel.h" +#include "../../math/distribution/LUT.h" +#include "../../math/distribution/VonMises.h" +#include "../../math/distribution/Exponential.h" +#include "../../math/distribution/NormalCDF.h" +#include "../../math/distribution/Region.h" +#include "../../math/distribution/Triangle.h" + #include "../../misc/Time.h" template void benchDist(Dist dist) { diff --git a/tests/math/TestQuaternion.cpp b/tests/math/TestQuaternion.cpp new file mode 100644 index 0000000..50a82fa --- /dev/null +++ b/tests/math/TestQuaternion.cpp @@ -0,0 +1,82 @@ +#ifdef WITH_TESTS + +#include "../Tests.h" +#include "../../math/Quaternion.h" + +const float d = 0.00001; + +TEST(Quaternion, fromEuler) { + + Quaternion q1 = Quaternion::fromEuler(0,0,0); + + +} + +TEST(Quaternion, mul1) { + + Quaternion q1 = Quaternion::fromEuler(0.5,0,0); + Quaternion q2 = Quaternion::fromEuler(0.3,0,0); + Quaternion q3 = q1*q2; + ASSERT_NEAR(0.8, q3.toEuler().x, d); + ASSERT_NEAR(0.0, q3.toEuler().y, d); + ASSERT_NEAR(0.0, q3.toEuler().z, d); + +} + +TEST(Quaternion, mul2) { + + Quaternion q1 = Quaternion::fromEuler(0.5, 0.0, 0.0); + Quaternion q2 = Quaternion::fromEuler(0.0, 0.3, 0.0); + Quaternion q3 = Quaternion::fromEuler(0.0, 0.0, 0.2); + Quaternion q4 = q1*q2*q3; + ASSERT_NEAR(0.5, q4.toEuler().x, d); + ASSERT_NEAR(0.3, q4.toEuler().y, d); + ASSERT_NEAR(0.2, q4.toEuler().z, d); + +} + +TEST(Quaternion, toEuler) { + + + + Quaternion q1 = Quaternion::fromEuler(0,0,0); + ASSERT_NEAR(0, q1.toEuler().x, d); + ASSERT_NEAR(0, q1.toEuler().y, d); + ASSERT_NEAR(0, q1.toEuler().z, d); + + { + Quaternion q2 = Quaternion::fromEuler(0.2, 1.0, 1.2); + ASSERT_NEAR(0.2, q2.toEuler().x, d); + ASSERT_NEAR(1.0, q2.toEuler().y, d); + ASSERT_NEAR(1.2, q2.toEuler().z, d); + } + + { + Quaternion q = Quaternion::fromEuler(0.5, 0, 0); + ASSERT_NEAR(0.5, q.toEuler().x, d); + ASSERT_NEAR(0.0, q.toEuler().y, d); + ASSERT_NEAR(0.0, q.toEuler().z, d); + }{ + Quaternion q = Quaternion::fromEuler(0, 0.5, 0); + ASSERT_NEAR(0.0, q.toEuler().x, d); + ASSERT_NEAR(0.5, q.toEuler().y, d); + ASSERT_NEAR(0.0, q.toEuler().z, d); + }{ + Quaternion q = Quaternion::fromEuler(0, 0, 0.5); + ASSERT_NEAR(0.0, q.toEuler().x, d); + ASSERT_NEAR(0.0, q.toEuler().y, d); + ASSERT_NEAR(0.5, q.toEuler().z, d); + }{ + Quaternion q = Quaternion::fromEuler(-0.5, 0, 0.5); + ASSERT_NEAR(-0.5, q.toEuler().x, d); + ASSERT_NEAR(0.0, q.toEuler().y, d); + ASSERT_NEAR(0.5, q.toEuler().z, d); + } + +} + + + + + +#endif diff --git a/tests/math/distribution/TestNormalN.cpp b/tests/math/distribution/TestNormalN.cpp index 39f79e6..9899ce2 100644 --- a/tests/math/distribution/TestNormalN.cpp +++ b/tests/math/distribution/TestNormalN.cpp @@ -1,4 +1,5 @@ #ifdef WITH_TESTS +#ifdef WITH_EIGEN #include "../../Tests.h" #include "../../../math/divergence/KullbackLeibler.h" @@ -74,4 +75,5 @@ TEST(NormalN, multivariateGaussSampleData) { } #endif +#endif diff --git a/tests/math/divergence/TestJensenShannon.cpp b/tests/math/divergence/TestJensenShannon.cpp index 4bf8cf3..0841e54 100644 --- a/tests/math/divergence/TestJensenShannon.cpp +++ b/tests/math/divergence/TestJensenShannon.cpp @@ -1,4 +1,5 @@ #ifdef WITH_TESTS +#ifdef WITH_EIGEN #include "../../Tests.h" #include "../../../math/divergence/JensenShannon.h" @@ -92,3 +93,4 @@ TEST(JensenShannon, generalFromSamples) { } #endif +#endif diff --git a/tests/math/divergence/TestKullbackLeibler.cpp b/tests/math/divergence/TestKullbackLeibler.cpp index 6f066cb..f8585b6 100644 --- a/tests/math/divergence/TestKullbackLeibler.cpp +++ b/tests/math/divergence/TestKullbackLeibler.cpp @@ -1,4 +1,5 @@ #ifdef WITH_TESTS +#ifdef WITH_EIGEN #include "../../Tests.h" #include "../../../math/divergence/KullbackLeibler.h" @@ -301,3 +302,4 @@ TEST(KullbackLeibler, generalFromSamples) { } #endif +#endif diff --git a/tests/sensors/imu/TestTurnDetection.cpp b/tests/sensors/imu/TestTurnDetection.cpp index 3f79dad..049ed4a 100644 --- a/tests/sensors/imu/TestTurnDetection.cpp +++ b/tests/sensors/imu/TestTurnDetection.cpp @@ -1,5 +1,6 @@ #ifdef WITH_TESTS +#ifdef TODO #include "../../Tests.h" #include "../../../sensors/imu/TurnDetection.h" @@ -67,5 +68,5 @@ TEST(TurnDetection, xx) { } - +#endif #endif diff --git a/tests/smc/merging/mixing/TestMixingSamplerDivergency.cpp b/tests/smc/merging/mixing/TestMixingSamplerDivergency.cpp index 159161d..ef6beba 100644 --- a/tests/smc/merging/mixing/TestMixingSamplerDivergency.cpp +++ b/tests/smc/merging/mixing/TestMixingSamplerDivergency.cpp @@ -1,4 +1,5 @@ #ifdef WITH_TESTS +#ifdef WITH_EIGEN #include "../../../../smc/merging/mixing/MixingSamplerDivergency.h" #include "../../../../smc/filtering/ParticleFilterMixing.h" @@ -142,5 +143,5 @@ namespace K { } - +#endif #endif From ac91eeaa3d52a1525715eb983bc78d23223ca062 Mon Sep 17 00:00:00 2001 From: kazu Date: Thu, 25 Oct 2018 11:50:12 +0200 Subject: [PATCH 5/6] changes --- data/File.h | 10 ++++++++++ data/HistoryTS.h | 10 ++++++++++ data/RingBuffer.h | 10 ++++++++++ data/Timestamp.h | 10 ++++++++++ data/XMLload.h | 10 ++++++++++ data/XMLsave.h | 10 ++++++++++ data/XMLserialize.h | 10 ++++++++++ data/csv.h | 10 ++++++++++ data/xml.h | 10 ++++++++++ floorplan/3D/Builder.h | 10 ++++++++++ floorplan/3D/Doors.h | 10 ++++++++++ floorplan/3D/FloorplanMesh.h | 10 ++++++++++ floorplan/3D/Handrails.h | 10 ++++++++++ floorplan/3D/Lines.h | 10 ++++++++++ floorplan/3D/Objects.h | 10 ++++++++++ floorplan/3D/Obstacle3.h | 10 ++++++++++ floorplan/3D/Outline.h | 10 ++++++++++ floorplan/3D/Pillars.h | 10 ++++++++++ floorplan/3D/Stairs.h | 10 ++++++++++ floorplan/3D/Walls.h | 10 ++++++++++ floorplan/3D/WallsViaCubes.h | 10 ++++++++++ floorplan/3D/WallsViaCuttedQuads.h | 10 ++++++++++ floorplan/3D/misc.h | 10 ++++++++++ floorplan/3D/objects/MTLReader.h | 10 ++++++++++ floorplan/3D/objects/OBJPool.h | 10 ++++++++++ floorplan/3D/objects/OBJReader.h | 10 ++++++++++ floorplan/3D/primitives/Cube.h | 10 ++++++++++ floorplan/3D/primitives/Cylinder.h | 10 ++++++++++ floorplan/3D/primitives/Mesh.h | 10 ++++++++++ floorplan/3D/primitives/Tube.h | 10 ++++++++++ floorplan/Floor.h | 10 ++++++++++ floorplan/FloorplanFactorySVG.h | 10 ++++++++++ floorplan/PlatformStair.h | 10 ++++++++++ floorplan/Stair.h | 10 ++++++++++ floorplan/Stairs.h | 10 ++++++++++ floorplan/v2/Floorplan.h | 11 +++++++++++ floorplan/v2/FloorplanCeilings.h | 11 +++++++++++ floorplan/v2/FloorplanHelper.h | 10 ++++++++++ floorplan/v2/FloorplanLINT.h | 10 ++++++++++ floorplan/v2/FloorplanReader.h | 11 +++++++++++ floorplan/v2/FloorplanWriter.h | 11 +++++++++++ geo/Angle.h | 10 ++++++++++ geo/BBox2.h | 11 +++++++++++ geo/BBox3.h | 10 ++++++++++ geo/EarthMapping.h | 10 ++++++++++ geo/EarthPos.h | 10 ++++++++++ geo/GPCPolygon2.h | 10 ++++++++++ geo/Heading.h | 10 ++++++++++ geo/Length.h | 10 ++++++++++ geo/Line2.h | 10 ++++++++++ geo/Plane3.h | 10 ++++++++++ geo/Point2.h | 10 ++++++++++ geo/Point3.h | 10 ++++++++++ geo/Polygon2.h | 10 ++++++++++ geo/Ray2.h | 10 ++++++++++ geo/Ray3.h | 10 ++++++++++ geo/Sphere3.h | 10 ++++++++++ geo/Triangle3.h | 10 ++++++++++ geo/TriangleStrip3.h | 10 ++++++++++ geo/Units.h | 10 ++++++++++ geo/volume/BVH.h | 10 ++++++++++ geo/volume/BVHDebug.h | 10 ++++++++++ geo/volume/BoundingVolume.h | 10 ++++++++++ geo/volume/BoundingVolumeAABB2.h | 10 ++++++++++ geo/volume/BoundingVolumeAABB3.h | 10 ++++++++++ geo/volume/BoundingVolumeCircle2.h | 10 ++++++++++ geo/volume/BoundingVolumeSphere3.h | 10 ++++++++++ grid/DefaultGridNode.h | 10 ++++++++++ grid/Grid.h | 10 ++++++++++ grid/GridNeighborIterator.h | 10 ++++++++++ grid/GridNode.h | 10 ++++++++++ grid/GridNodeBBox.h | 10 ++++++++++ grid/GridPoint.h | 10 ++++++++++ grid/factory/GridFactory.h | 10 ++++++++++ grid/factory/GridImportance.h | 10 ++++++++++ grid/factory/v2/Elevators.h | 10 ++++++++++ grid/factory/v2/GridFactory.h | 10 ++++++++++ grid/factory/v2/GridFactoryListener.h | 10 ++++++++++ grid/factory/v2/GridNodeImportance.h | 10 ++++++++++ grid/factory/v2/Helper.h | 10 ++++++++++ grid/factory/v2/Importance.h | 10 ++++++++++ grid/factory/v2/Stairs.h | 10 ++++++++++ grid/factory/v2/Stairs2.h | 10 ++++++++++ grid/factory/v3/GridFactory3.h | 10 ++++++++++ grid/factory/v3/HelperPoly3.h | 10 ++++++++++ grid/walk/GridWalk.h | 10 ++++++++++ grid/walk/GridWalkHelper.h | 10 ++++++++++ grid/walk/GridWalkLightAtTheEndOfTheTunnel.h | 10 ++++++++++ grid/walk/GridWalkPathControl.h | 10 ++++++++++ grid/walk/GridWalkPushForward.h | 10 ++++++++++ grid/walk/GridWalkRandomHeadingUpdate.h | 10 ++++++++++ grid/walk/GridWalkRandomHeadingUpdateAdv.h | 10 ++++++++++ grid/walk/GridWalkShortestPathControl.h | 10 ++++++++++ grid/walk/GridWalkSimpleControl.h | 10 ++++++++++ grid/walk/GridWalkState.h | 10 ++++++++++ grid/walk/GridWalkWeighted.h | 10 ++++++++++ grid/walk/GridWalkWeighted2.h | 10 ++++++++++ grid/walk/TestWalkWeighted3.h | 10 ++++++++++ grid/walk/v2/GridWalker.h | 10 ++++++++++ grid/walk/v2/GridWalkerMulti.h | 10 ++++++++++ grid/walk/v2/modules/WalkModule.h | 10 ++++++++++ .../v2/modules/WalkModuleAbsoluteHeadingControl.h | 10 ++++++++++ grid/walk/v2/modules/WalkModuleFavorZ.h | 10 ++++++++++ grid/walk/v2/modules/WalkModuleFollowDestination.h | 10 ++++++++++ grid/walk/v2/modules/WalkModuleHeading.h | 10 ++++++++++ grid/walk/v2/modules/WalkModuleHeadingControl.h | 10 ++++++++++ grid/walk/v2/modules/WalkModuleNodeImportance.h | 10 ++++++++++ grid/walk/v2/modules/WalkModulePreventVisited.h | 10 ++++++++++ grid/walk/v2/modules/WalkModuleSpread.h | 10 ++++++++++ grid/walk/v2/modules/WalkStateHeading.h | 10 ++++++++++ grid/walk/v3/Helper.h | 10 ++++++++++ grid/walk/v3/Reachable.h | 10 ++++++++++ grid/walk/v3/ReachableSampler.h | 10 ++++++++++ grid/walk/v3/Structs.h | 10 ++++++++++ grid/walk/v3/WalkEvaluator.h | 10 ++++++++++ grid/walk/v3/WalkGenerator.h | 10 ++++++++++ grid/walk/v3/Walker.h | 10 ++++++++++ math/Delay.h | 10 ++++++++++ math/DelayBuffer.h | 10 ++++++++++ math/DrawList.h | 10 ++++++++++ math/FixedFrequencyInterpolator.h | 10 ++++++++++ math/Floatingpoint.h | 10 ++++++++++ math/Interpolator.h | 10 ++++++++++ math/KahanSum.h | 10 ++++++++++ math/Math.h | 10 ++++++++++ math/Matrix3.h | 10 ++++++++++ math/Matrix4.h | 10 ++++++++++ math/MiniMat2.h | 10 ++++++++++ math/MovingAVG.h | 10 ++++++++++ math/MovingAverageTS.h | 10 ++++++++++ math/MovingMedian.h | 10 ++++++++++ math/MovingMedianTS.h | 10 ++++++++++ math/MovingMinMaxTS.h | 10 ++++++++++ math/MovingStdDevTS.h | 10 ++++++++++ math/distribution/Bessel.h | 10 ++++++++++ math/distribution/ChiSquared.h | 10 ++++++++++ math/distribution/Exponential.h | 10 ++++++++++ math/distribution/LUT.h | 10 ++++++++++ math/distribution/Logistic.h | 10 ++++++++++ math/distribution/Normal.h | 10 ++++++++++ math/distribution/Rectangular.h | 10 ++++++++++ math/distribution/Region.h | 10 ++++++++++ math/distribution/Triangle.h | 10 ++++++++++ math/distribution/Uniform.h | 10 ++++++++++ math/distribution/VonMises.h | 10 ++++++++++ math/dsp/Convolution.h | 10 ++++++++++ math/dsp/fir/Complex.h | 10 ++++++++++ math/dsp/fir/ComplexFactory.h | 10 ++++++++++ math/dsp/fir/Real.h | 10 ++++++++++ math/dsp/fir/RealFactory.h | 10 ++++++++++ math/dsp/iir/BiQuad.h | 10 ++++++++++ math/dsp/iir/BiQuadStack.h | 10 ++++++++++ math/filter/Complementary.h | 10 ++++++++++ math/random/DrawList.h | 10 ++++++++++ math/random/DrawWheel.h | 10 ++++++++++ math/random/RandomGenerator.h | 10 ++++++++++ math/random/RandomIterator.h | 10 ++++++++++ math/random/Uniform.h | 10 ++++++++++ math/random/Unique.h | 10 ++++++++++ math/stats/Average.h | 10 ++++++++++ math/stats/Histogram.h | 10 ++++++++++ math/stats/Histogram2.h | 10 ++++++++++ math/stats/Maximum.h | 10 ++++++++++ math/stats/Median.h | 10 ++++++++++ math/stats/Minimum.h | 10 ++++++++++ math/stats/SampleRateEstimator.h | 10 ++++++++++ math/stats/Statistics.h | 10 ++++++++++ math/stats/Variance.h | 10 ++++++++++ nav/dijkstra/Dijkstra.h | 10 ++++++++++ nav/dijkstra/DijkstraPath.h | 10 ++++++++++ nav/dijkstra/DijkstraStructs.h | 10 ++++++++++ navMesh/NavMesh.h | 10 ++++++++++ navMesh/NavMeshDebug.h | 10 ++++++++++ navMesh/NavMeshFactory.h | 10 ++++++++++ navMesh/NavMeshFactoryListener.h | 10 ++++++++++ navMesh/NavMeshLocation.h | 10 ++++++++++ navMesh/NavMeshRandom.h | 10 ++++++++++ navMesh/NavMeshSettings.h | 10 ++++++++++ navMesh/NavMeshTriangle.h | 10 ++++++++++ navMesh/NavMeshType.h | 10 ++++++++++ navMesh/meta/NavMeshDijkstra.h | 10 ++++++++++ navMesh/walk/NavMeshSub.h | 10 ++++++++++ navMesh/walk/NavMeshWalkEval.h | 10 ++++++++++ navMesh/walk/NavMeshWalkParams.h | 10 ++++++++++ navMesh/walk/NavMeshWalkRandom.h | 10 ++++++++++ navMesh/walk/NavMeshWalkSemiDirected.h | 10 ++++++++++ navMesh/walk/NavMeshWalkSemiRandom.h | 10 ++++++++++ navMesh/walk/NavMeshWalkSimple.h | 11 +++++++++++ navMesh/walk/NavMeshWalkSinkOrSwim.h | 10 ++++++++++ sensors/MACAddress.h | 10 ++++++++++ sensors/beacon/Beacon.h | 10 ++++++++++ sensors/beacon/BeaconMeasurement.h | 10 ++++++++++ sensors/beacon/BeaconMeasurements.h | 10 ++++++++++ sensors/beacon/BeaconProbability.h | 10 ++++++++++ sensors/beacon/BeaconProbabilityFree.h | 10 ++++++++++ sensors/beacon/model/BeaconModel.h | 10 ++++++++++ sensors/beacon/model/BeaconModelLogDist.h | 10 ++++++++++ sensors/beacon/model/BeaconModelLogDistCeiling.h | 10 ++++++++++ sensors/gps/GPSData.h | 10 ++++++++++ sensors/gps/GPSProbability.h | 10 ++++++++++ sensors/imu/AccelerometerData.h | 10 ++++++++++ sensors/imu/CompassData.h | 11 ++++++++++- sensors/imu/CompassDetection.h | 10 ++++++++++ sensors/imu/CompassDetectionPlot.h | 10 ++++++++++ sensors/imu/GravityData.h | 10 ++++++++++ sensors/imu/GyroscopeData.h | 10 ++++++++++ sensors/imu/LinearAccelerationData.h | 10 ++++++++++ sensors/imu/MagnetometerData.h | 10 ++++++++++ sensors/imu/MotionDetection.h | 10 ++++++++++ sensors/imu/PoseDetection.h | 10 ++++++++++ sensors/imu/PoseDetection2.h | 10 ++++++++++ sensors/imu/PoseDetection3.h | 10 ++++++++++ sensors/imu/PoseDetectionPlot.h | 10 ++++++++++ sensors/imu/PoseProvider.h | 10 ++++++++++ sensors/imu/StepDetection.h | 10 ++++++++++ sensors/imu/StepDetection2.h | 10 ++++++++++ sensors/imu/StepDetection3.h | 10 ++++++++++ sensors/imu/StepDetection4.h | 10 ++++++++++ sensors/imu/TurnDetection.h | 10 ++++++++++ sensors/imu/TurnDetection2.h | 10 ++++++++++ sensors/imu/TurnDetectionPlot.h | 10 ++++++++++ sensors/imu/TurnProvider.h | 10 ++++++++++ sensors/offline/FilePlayer.h | 10 ++++++++++ sensors/offline/FileReader.h | 10 ++++++++++ sensors/offline/FileWriter.h | 10 ++++++++++ sensors/offline/Listener.h | 10 ++++++++++ sensors/offline/OfflineAndroid.h | 10 ++++++++++ sensors/offline/Sensors.h | 10 ++++++++++ sensors/offline/Splitter.h | 10 ++++++++++ sensors/radio/AccessPoint.h | 10 ++++++++++ sensors/radio/VAPGrouper.h | 10 ++++++++++ sensors/radio/WiFiGridEstimator.h | 10 ++++++++++ sensors/radio/WiFiGridNode.h | 10 ++++++++++ sensors/radio/WiFiMeasurement.h | 10 ++++++++++ sensors/radio/WiFiMeasurements.h | 10 ++++++++++ sensors/radio/WiFiProbability.h | 10 ++++++++++ sensors/radio/WiFiProbabilityFree.h | 10 ++++++++++ sensors/radio/WiFiProbabilityGrid.h | 10 ++++++++++ sensors/radio/WiFiQualityAnalyzer.h | 10 ++++++++++ sensors/radio/model/LogDistanceModel.h | 10 ++++++++++ sensors/radio/model/WiFiModel.h | 10 ++++++++++ sensors/radio/model/WiFiModelFactory.h | 11 ++++++++++- sensors/radio/model/WiFiModelFactoryImpl.h | 10 ++++++++++ sensors/radio/model/WiFiModelLogDist.h | 10 ++++++++++ sensors/radio/model/WiFiModelLogDistCeiling.h | 10 ++++++++++ sensors/radio/model/WiFiModelPerBBox.h | 11 ++++++++++- sensors/radio/model/WiFiModelPerFloor.h | 10 ++++++++++ sensors/radio/model/WiFiModels.h | 10 ++++++++++ sensors/radio/scan/WiFiChannels.h | 10 ++++++++++ sensors/radio/scan/WiFiRAW.h | 10 ++++++++++ sensors/radio/scan/WiFiScan.h | 10 ++++++++++ sensors/radio/setup/WiFiFingerprint.h | 10 ++++++++++ sensors/radio/setup/WiFiFingerprints.h | 10 ++++++++++ sensors/radio/setup/WiFiOptimizer.h | 10 ++++++++++ sensors/radio/setup/WiFiOptimizerLogDistCeiling.h | 10 ++++++++++ sensors/radio/setup/WiFiOptimizerPerFloor.h | 10 ++++++++++ sensors/radio/setup/WiFiOptimizerStructs.h | 10 ++++++++++ 257 files changed, 2576 insertions(+), 3 deletions(-) diff --git a/data/File.h b/data/File.h index 0f6d48f..77e1fcc 100644 --- a/data/File.h +++ b/data/File.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FS_FILE_H #define FS_FILE_H diff --git a/data/HistoryTS.h b/data/HistoryTS.h index 87e4291..e4d0bea 100755 --- a/data/HistoryTS.h +++ b/data/HistoryTS.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef HISTORYTS_H #define HISTORYTS_H diff --git a/data/RingBuffer.h b/data/RingBuffer.h index 3259aa2..8def92c 100644 --- a/data/RingBuffer.h +++ b/data/RingBuffer.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef RINGBUFFER_H #define RINGBUFFER_H diff --git a/data/Timestamp.h b/data/Timestamp.h index 8b08707..46b426e 100644 --- a/data/Timestamp.h +++ b/data/Timestamp.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef TIMESTAMP_H #define TIMESTAMP_H diff --git a/data/XMLload.h b/data/XMLload.h index f9dc5e4..ec57558 100644 --- a/data/XMLload.h +++ b/data/XMLload.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef XMLLOAD_H #define XMLLOAD_H diff --git a/data/XMLsave.h b/data/XMLsave.h index f457c40..64abe46 100644 --- a/data/XMLsave.h +++ b/data/XMLsave.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef XMLSAVE_H #define XMLSAVE_H diff --git a/data/XMLserialize.h b/data/XMLserialize.h index 7fc4817..abf3211 100644 --- a/data/XMLserialize.h +++ b/data/XMLserialize.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef XMLSERIALIZE_H #define XMLSERIALIZE_H diff --git a/data/csv.h b/data/csv.h index 4f65517..b36feea 100644 --- a/data/csv.h +++ b/data/csv.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef CSV_H #define CSV_H diff --git a/data/xml.h b/data/xml.h index b222148..537ceea 100644 --- a/data/xml.h +++ b/data/xml.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DATA_XML_H #define DATA_XML_H diff --git a/floorplan/3D/Builder.h b/floorplan/3D/Builder.h index 0c2f4cd..4f9757f 100644 --- a/floorplan/3D/Builder.h +++ b/floorplan/3D/Builder.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_BUILDER_H #define FLOORPLAN_3D_BUILDER_H diff --git a/floorplan/3D/Doors.h b/floorplan/3D/Doors.h index 8537ffd..9624737 100644 --- a/floorplan/3D/Doors.h +++ b/floorplan/3D/Doors.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_DOORS_H #define FLOORPLAN_3D_DOORS_H diff --git a/floorplan/3D/FloorplanMesh.h b/floorplan/3D/FloorplanMesh.h index 5bec327..d80e8dc 100644 --- a/floorplan/3D/FloorplanMesh.h +++ b/floorplan/3D/FloorplanMesh.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_FLOORPLANMESH_H #define FLOORPLAN_3D_FLOORPLANMESH_H diff --git a/floorplan/3D/Handrails.h b/floorplan/3D/Handrails.h index 77f70ee..15a38b8 100644 --- a/floorplan/3D/Handrails.h +++ b/floorplan/3D/Handrails.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_HANDRAILS_H #define FLOORPLAN_3D_HANDRAILS_H diff --git a/floorplan/3D/Lines.h b/floorplan/3D/Lines.h index 8c8b848..13930d9 100644 --- a/floorplan/3D/Lines.h +++ b/floorplan/3D/Lines.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_LINES_H #define FLOORPLAN_3D_LINES_H diff --git a/floorplan/3D/Objects.h b/floorplan/3D/Objects.h index c8e9f47..8e64799 100644 --- a/floorplan/3D/Objects.h +++ b/floorplan/3D/Objects.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_OBJECTS_H #define FLOORPLAN_3D_OBJECTS_H diff --git a/floorplan/3D/Obstacle3.h b/floorplan/3D/Obstacle3.h index 2ef7ad1..5781b61 100644 --- a/floorplan/3D/Obstacle3.h +++ b/floorplan/3D/Obstacle3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_OBSTACLE3_H #define FLOORPLAN_3D_OBSTACLE3_H diff --git a/floorplan/3D/Outline.h b/floorplan/3D/Outline.h index e9c4b96..8ba3484 100644 --- a/floorplan/3D/Outline.h +++ b/floorplan/3D/Outline.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_OUTLINE_H #define FLOORPLAN_3D_OUTLINE_H diff --git a/floorplan/3D/Pillars.h b/floorplan/3D/Pillars.h index 85cb5f3..052e860 100644 --- a/floorplan/3D/Pillars.h +++ b/floorplan/3D/Pillars.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_PILLARS_H #define FLOORPLAN_3D_PILLARS_H diff --git a/floorplan/3D/Stairs.h b/floorplan/3D/Stairs.h index ddf35de..1d4e474 100644 --- a/floorplan/3D/Stairs.h +++ b/floorplan/3D/Stairs.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_STAIRS_H #define FLOORPLAN_3D_STAIRS_H diff --git a/floorplan/3D/Walls.h b/floorplan/3D/Walls.h index 01b0d74..363014f 100644 --- a/floorplan/3D/Walls.h +++ b/floorplan/3D/Walls.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_WALLS_H #define FLOORPLAN_3D_WALLS_H diff --git a/floorplan/3D/WallsViaCubes.h b/floorplan/3D/WallsViaCubes.h index a585c3d..1cc6020 100644 --- a/floorplan/3D/WallsViaCubes.h +++ b/floorplan/3D/WallsViaCubes.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_WALLSVIACUBE_H #define FLOORPLAN_3D_WALLSVIACUBE_H diff --git a/floorplan/3D/WallsViaCuttedQuads.h b/floorplan/3D/WallsViaCuttedQuads.h index fc5a4e7..c9a1bb3 100644 --- a/floorplan/3D/WallsViaCuttedQuads.h +++ b/floorplan/3D/WallsViaCuttedQuads.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_WALLSVIACUTTEDQUADS_H #define FLOORPLAN_3D_WALLSVIACUTTEDQUADS_H diff --git a/floorplan/3D/misc.h b/floorplan/3D/misc.h index 35edbe8..757e185 100644 --- a/floorplan/3D/misc.h +++ b/floorplan/3D/misc.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_MISC_H #define FLOORPLAN_3D_MISC_H diff --git a/floorplan/3D/objects/MTLReader.h b/floorplan/3D/objects/MTLReader.h index 21584b8..a9b3751 100644 --- a/floorplan/3D/objects/MTLReader.h +++ b/floorplan/3D/objects/MTLReader.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MTLREADER_H #define MTLREADER_H diff --git a/floorplan/3D/objects/OBJPool.h b/floorplan/3D/objects/OBJPool.h index fd49930..cd82eb4 100644 --- a/floorplan/3D/objects/OBJPool.h +++ b/floorplan/3D/objects/OBJPool.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_OBJPOOL_H #define FLOORPLAN_3D_OBJPOOL_H diff --git a/floorplan/3D/objects/OBJReader.h b/floorplan/3D/objects/OBJReader.h index dd4476c..54e4758 100644 --- a/floorplan/3D/objects/OBJReader.h +++ b/floorplan/3D/objects/OBJReader.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef OBJREADER_H #define OBJREADER_H diff --git a/floorplan/3D/primitives/Cube.h b/floorplan/3D/primitives/Cube.h index 416c0f5..a5712c3 100644 --- a/floorplan/3D/primitives/Cube.h +++ b/floorplan/3D/primitives/Cube.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_CUBE_H #define FLOORPLAN_3D_CUBE_H diff --git a/floorplan/3D/primitives/Cylinder.h b/floorplan/3D/primitives/Cylinder.h index a4f2f82..8e2ebc4 100644 --- a/floorplan/3D/primitives/Cylinder.h +++ b/floorplan/3D/primitives/Cylinder.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_CYLINDER_H #define FLOORPLAN_3D_CYLINDER_H diff --git a/floorplan/3D/primitives/Mesh.h b/floorplan/3D/primitives/Mesh.h index 7a6bef8..0b1cc74 100644 --- a/floorplan/3D/primitives/Mesh.h +++ b/floorplan/3D/primitives/Mesh.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_MESH_H #define FLOORPLAN_3D_MESH_H diff --git a/floorplan/3D/primitives/Tube.h b/floorplan/3D/primitives/Tube.h index 8f8a8ad..ed9c87e 100644 --- a/floorplan/3D/primitives/Tube.h +++ b/floorplan/3D/primitives/Tube.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN_3D_TUBE_H #define FLOORPLAN_3D_TUBE_H diff --git a/floorplan/Floor.h b/floorplan/Floor.h index 4940dee..161a7bd 100755 --- a/floorplan/Floor.h +++ b/floorplan/Floor.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOOR_H #define FLOOR_H diff --git a/floorplan/FloorplanFactorySVG.h b/floorplan/FloorplanFactorySVG.h index fe93d88..366ad8b 100755 --- a/floorplan/FloorplanFactorySVG.h +++ b/floorplan/FloorplanFactorySVG.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLANFACTORYSVG_H #define FLOORPLANFACTORYSVG_H diff --git a/floorplan/PlatformStair.h b/floorplan/PlatformStair.h index fdfc8ac..1daf94b 100644 --- a/floorplan/PlatformStair.h +++ b/floorplan/PlatformStair.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef PLATFORMSTAIR_H #define PLATFORMSTAIR_H diff --git a/floorplan/Stair.h b/floorplan/Stair.h index 505de8b..3bebec0 100644 --- a/floorplan/Stair.h +++ b/floorplan/Stair.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STAIR_H #define STAIR_H diff --git a/floorplan/Stairs.h b/floorplan/Stairs.h index 2982f7c..4d25b4a 100644 --- a/floorplan/Stairs.h +++ b/floorplan/Stairs.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STAIRS_H #define STAIRS_H diff --git a/floorplan/v2/Floorplan.h b/floorplan/v2/Floorplan.h index d0b6291..f655e12 100644 --- a/floorplan/v2/Floorplan.h +++ b/floorplan/v2/Floorplan.h @@ -1,3 +1,14 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Einige Aenderungen beigetragen von Toni Fetzer + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLAN2_H #define FLOORPLAN2_H diff --git a/floorplan/v2/FloorplanCeilings.h b/floorplan/v2/FloorplanCeilings.h index 5a8699f..f323c7b 100644 --- a/floorplan/v2/FloorplanCeilings.h +++ b/floorplan/v2/FloorplanCeilings.h @@ -1,3 +1,14 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Einige Aenderungen beigetragen von Toni Fetzer + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLANCEILINGS_H #define FLOORPLANCEILINGS_H diff --git a/floorplan/v2/FloorplanHelper.h b/floorplan/v2/FloorplanHelper.h index 537d30b..9bebc8f 100644 --- a/floorplan/v2/FloorplanHelper.h +++ b/floorplan/v2/FloorplanHelper.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLANHELPER2_H #define FLOORPLANHELPER2_H diff --git a/floorplan/v2/FloorplanLINT.h b/floorplan/v2/FloorplanLINT.h index 86856e1..c46c027 100644 --- a/floorplan/v2/FloorplanLINT.h +++ b/floorplan/v2/FloorplanLINT.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLANLINT_H #define FLOORPLANLINT_H diff --git a/floorplan/v2/FloorplanReader.h b/floorplan/v2/FloorplanReader.h index 8665530..5032641 100644 --- a/floorplan/v2/FloorplanReader.h +++ b/floorplan/v2/FloorplanReader.h @@ -1,3 +1,14 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Einige Aenderungen beigetragen von Toni Fetzer + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLANREADER_H #define FLOORPLANREADER_H diff --git a/floorplan/v2/FloorplanWriter.h b/floorplan/v2/FloorplanWriter.h index f98037b..8450c52 100644 --- a/floorplan/v2/FloorplanWriter.h +++ b/floorplan/v2/FloorplanWriter.h @@ -1,3 +1,14 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Einige Aenderungen beigetragen von Toni Fetzer + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOORPLANWRITER_H #define FLOORPLANWRITER_H diff --git a/geo/Angle.h b/geo/Angle.h index a568450..2c2e779 100755 --- a/geo/Angle.h +++ b/geo/Angle.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef ANGLE_H #define ANGLE_H diff --git a/geo/BBox2.h b/geo/BBox2.h index b24e1c7..88049f8 100644 --- a/geo/BBox2.h +++ b/geo/BBox2.h @@ -1,3 +1,14 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Einige Aenderungen beigetragen von Toni Fetzer + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GEO_BBOX2_H #define GEO_BBOX2_H diff --git a/geo/BBox3.h b/geo/BBox3.h index 5270c61..a473111 100644 --- a/geo/BBox3.h +++ b/geo/BBox3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BBOX3_H #define BBOX3_H diff --git a/geo/EarthMapping.h b/geo/EarthMapping.h index aa1471c..1dc8e4e 100644 --- a/geo/EarthMapping.h +++ b/geo/EarthMapping.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef EARTHMAPPING_H #define EARTHMAPPING_H diff --git a/geo/EarthPos.h b/geo/EarthPos.h index e46c50d..d46dba9 100644 --- a/geo/EarthPos.h +++ b/geo/EarthPos.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef EARTHPOS_H #define EARTHPOS_H diff --git a/geo/GPCPolygon2.h b/geo/GPCPolygon2.h index 625b234..0cd40ec 100644 --- a/geo/GPCPolygon2.h +++ b/geo/GPCPolygon2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GPCPOLYGON2_H #define GPCPOLYGON2_H diff --git a/geo/Heading.h b/geo/Heading.h index 8381f10..c77e2f3 100644 --- a/geo/Heading.h +++ b/geo/Heading.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef HEADING_H #define HEADING_H diff --git a/geo/Length.h b/geo/Length.h index 1c3afb9..2d4038a 100644 --- a/geo/Length.h +++ b/geo/Length.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef LENGTH_H #define LENGTH_H diff --git a/geo/Line2.h b/geo/Line2.h index dea9e45..fe72648 100755 --- a/geo/Line2.h +++ b/geo/Line2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef LINE2D_H #define LINE2D_H diff --git a/geo/Plane3.h b/geo/Plane3.h index eb479bb..c606d2e 100644 --- a/geo/Plane3.h +++ b/geo/Plane3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef PLANE3_H #define PLANE3_H diff --git a/geo/Point2.h b/geo/Point2.h index cc36d29..17d9899 100644 --- a/geo/Point2.h +++ b/geo/Point2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef POINT2_H #define POINT2_H diff --git a/geo/Point3.h b/geo/Point3.h index 9a59283..9467c01 100644 --- a/geo/Point3.h +++ b/geo/Point3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GEO_Point3_H #define GEO_Point3_H diff --git a/geo/Polygon2.h b/geo/Polygon2.h index c92f2b4..6bec136 100644 --- a/geo/Polygon2.h +++ b/geo/Polygon2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef POLYGON2_H #define POLYGON2_H diff --git a/geo/Ray2.h b/geo/Ray2.h index a53e2cc..7f7c66c 100644 --- a/geo/Ray2.h +++ b/geo/Ray2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GEO_RAY2_H #define GEO_RAY2_H diff --git a/geo/Ray3.h b/geo/Ray3.h index 3adab2a..9551df6 100644 --- a/geo/Ray3.h +++ b/geo/Ray3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GEO_RAY3_H #define GEO_RAY3_H diff --git a/geo/Sphere3.h b/geo/Sphere3.h index 9b71b38..38e3a77 100644 --- a/geo/Sphere3.h +++ b/geo/Sphere3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GEO_SPHERE3_H #define GEO_SPHERE3_H diff --git a/geo/Triangle3.h b/geo/Triangle3.h index f656272..0f4c593 100644 --- a/geo/Triangle3.h +++ b/geo/Triangle3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef TRIANGLE3_H #define TRIANGLE3_H diff --git a/geo/TriangleStrip3.h b/geo/TriangleStrip3.h index 4bebb93..9f3d86d 100644 --- a/geo/TriangleStrip3.h +++ b/geo/TriangleStrip3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef TRIANGLESTRIP3_H #define TRIANGLESTRIP3_H diff --git a/geo/Units.h b/geo/Units.h index 05a38e8..7504706 100755 --- a/geo/Units.h +++ b/geo/Units.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef UNITS_H #define UNITS_H diff --git a/geo/volume/BVH.h b/geo/volume/BVH.h index 36d3963..88c4377 100644 --- a/geo/volume/BVH.h +++ b/geo/volume/BVH.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BOUNDINGVOLUMEHIERARCHY_H #define BOUNDINGVOLUMEHIERARCHY_H diff --git a/geo/volume/BVHDebug.h b/geo/volume/BVHDebug.h index 466ca54..3615ee4 100644 --- a/geo/volume/BVHDebug.h +++ b/geo/volume/BVHDebug.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BVHDEBUG_H #define BVHDEBUG_H diff --git a/geo/volume/BoundingVolume.h b/geo/volume/BoundingVolume.h index 80516a3..5582451 100644 --- a/geo/volume/BoundingVolume.h +++ b/geo/volume/BoundingVolume.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BOUNDINGVOLUME_H #define BOUNDINGVOLUME_H diff --git a/geo/volume/BoundingVolumeAABB2.h b/geo/volume/BoundingVolumeAABB2.h index 1abd746..f18533a 100644 --- a/geo/volume/BoundingVolumeAABB2.h +++ b/geo/volume/BoundingVolumeAABB2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BOUNDINGVOLUMEAABB2_H #define BOUNDINGVOLUMEAABB2_H diff --git a/geo/volume/BoundingVolumeAABB3.h b/geo/volume/BoundingVolumeAABB3.h index c5533bc..8199d68 100644 --- a/geo/volume/BoundingVolumeAABB3.h +++ b/geo/volume/BoundingVolumeAABB3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BOUNDINGVOLUMEBOX_H #define BOUNDINGVOLUMEBOX_H diff --git a/geo/volume/BoundingVolumeCircle2.h b/geo/volume/BoundingVolumeCircle2.h index 672398e..083f224 100644 --- a/geo/volume/BoundingVolumeCircle2.h +++ b/geo/volume/BoundingVolumeCircle2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BOUDINGVOLUMECIRCLE2_H #define BOUDINGVOLUMECIRCLE2_H diff --git a/geo/volume/BoundingVolumeSphere3.h b/geo/volume/BoundingVolumeSphere3.h index aac59f3..91f87da 100644 --- a/geo/volume/BoundingVolumeSphere3.h +++ b/geo/volume/BoundingVolumeSphere3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BOUNDINGVOLUMESPHERE_H #define BOUNDINGVOLUMESPHERE_H diff --git a/grid/DefaultGridNode.h b/grid/DefaultGridNode.h index d134a52..8db0ad3 100644 --- a/grid/DefaultGridNode.h +++ b/grid/DefaultGridNode.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DEFAULTGRIDNODE_H #define DEFAULTGRIDNODE_H diff --git a/grid/Grid.h b/grid/Grid.h index 0b11ea8..f0915e7 100755 --- a/grid/Grid.h +++ b/grid/Grid.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRID_H #define GRID_H diff --git a/grid/GridNeighborIterator.h b/grid/GridNeighborIterator.h index 0e7d3f7..5f5131f 100644 --- a/grid/GridNeighborIterator.h +++ b/grid/GridNeighborIterator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDNEIGHBORITERATOR_H #define GRIDNEIGHBORITERATOR_H diff --git a/grid/GridNode.h b/grid/GridNode.h index 8b73500..4dca213 100755 --- a/grid/GridNode.h +++ b/grid/GridNode.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDNODE_H #define GRIDNODE_H diff --git a/grid/GridNodeBBox.h b/grid/GridNodeBBox.h index d28c7de..9b05095 100755 --- a/grid/GridNodeBBox.h +++ b/grid/GridNodeBBox.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDNODEBBOX_H #define GRIDNODEBBOX_H diff --git a/grid/GridPoint.h b/grid/GridPoint.h index 50d8ef6..8726ba4 100755 --- a/grid/GridPoint.h +++ b/grid/GridPoint.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDPOINT_H #define GRIDPOINT_H diff --git a/grid/factory/GridFactory.h b/grid/factory/GridFactory.h index 83b6fdc..2956e41 100755 --- a/grid/factory/GridFactory.h +++ b/grid/factory/GridFactory.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDFACTORY_H #define GRIDFACTORY_H diff --git a/grid/factory/GridImportance.h b/grid/factory/GridImportance.h index 7ceeb90..da6f49b 100644 --- a/grid/factory/GridImportance.h +++ b/grid/factory/GridImportance.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDIMPORTANCE_H #define GRIDIMPORTANCE_H diff --git a/grid/factory/v2/Elevators.h b/grid/factory/v2/Elevators.h index f4b84c4..f979bea 100644 --- a/grid/factory/v2/Elevators.h +++ b/grid/factory/v2/Elevators.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRID_ELEVATORS_H #define GRID_ELEVATORS_H diff --git a/grid/factory/v2/GridFactory.h b/grid/factory/v2/GridFactory.h index ce31adf..8c74f9f 100755 --- a/grid/factory/v2/GridFactory.h +++ b/grid/factory/v2/GridFactory.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDFACTORY_V2_H #define GRIDFACTORY_V2_H diff --git a/grid/factory/v2/GridFactoryListener.h b/grid/factory/v2/GridFactoryListener.h index 0709c0a..623a1cd 100644 --- a/grid/factory/v2/GridFactoryListener.h +++ b/grid/factory/v2/GridFactoryListener.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDFACTORYLISTENER_H #define GRIDFACTORYLISTENER_H diff --git a/grid/factory/v2/GridNodeImportance.h b/grid/factory/v2/GridNodeImportance.h index 44142b9..879bd77 100644 --- a/grid/factory/v2/GridNodeImportance.h +++ b/grid/factory/v2/GridNodeImportance.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDNODEIMPORTANCE_H #define GRIDNODEIMPORTANCE_H diff --git a/grid/factory/v2/Helper.h b/grid/factory/v2/Helper.h index 1d28290..8df5ef1 100644 --- a/grid/factory/v2/Helper.h +++ b/grid/factory/v2/Helper.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRID_FACTORY_HELPER_H #define GRID_FACTORY_HELPER_H diff --git a/grid/factory/v2/Importance.h b/grid/factory/v2/Importance.h index 8afd8c1..68113f4 100644 --- a/grid/factory/v2/Importance.h +++ b/grid/factory/v2/Importance.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef IMPORTANCE_H #define IMPORTANCE_H diff --git a/grid/factory/v2/Stairs.h b/grid/factory/v2/Stairs.h index 882eb16..d6824b0 100644 --- a/grid/factory/v2/Stairs.h +++ b/grid/factory/v2/Stairs.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STAIRS_H #define STAIRS_H diff --git a/grid/factory/v2/Stairs2.h b/grid/factory/v2/Stairs2.h index 4ce9d4b..7dbc0c1 100644 --- a/grid/factory/v2/Stairs2.h +++ b/grid/factory/v2/Stairs2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STAIRS_H #define STAIRS_H diff --git a/grid/factory/v3/GridFactory3.h b/grid/factory/v3/GridFactory3.h index 9914638..3a3f356 100644 --- a/grid/factory/v3/GridFactory3.h +++ b/grid/factory/v3/GridFactory3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDFACTORY3_H #define GRIDFACTORY3_H diff --git a/grid/factory/v3/HelperPoly3.h b/grid/factory/v3/HelperPoly3.h index 652159d..94e34c2 100644 --- a/grid/factory/v3/HelperPoly3.h +++ b/grid/factory/v3/HelperPoly3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef HELPERPOLY3_H #define HELPERPOLY3_H diff --git a/grid/walk/GridWalk.h b/grid/walk/GridWalk.h index cbef10a..4413c8d 100644 --- a/grid/walk/GridWalk.h +++ b/grid/walk/GridWalk.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALK_H #define GRIDWALK_H diff --git a/grid/walk/GridWalkHelper.h b/grid/walk/GridWalkHelper.h index 310d47a..0601f27 100644 --- a/grid/walk/GridWalkHelper.h +++ b/grid/walk/GridWalkHelper.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKHELPER_H #define GRIDWALKHELPER_H diff --git a/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h b/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h index 6920b1c..7459830 100644 --- a/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h +++ b/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKLIGHTATTHEENDOFTHETUNNEL_H #define GRIDWALKLIGHTATTHEENDOFTHETUNNEL_H diff --git a/grid/walk/GridWalkPathControl.h b/grid/walk/GridWalkPathControl.h index 93ce5fc..b0b1bd0 100644 --- a/grid/walk/GridWalkPathControl.h +++ b/grid/walk/GridWalkPathControl.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKPATHCONTROL_H #define GRIDWALKPATHCONTROL_H diff --git a/grid/walk/GridWalkPushForward.h b/grid/walk/GridWalkPushForward.h index 4234d39..0e46922 100644 --- a/grid/walk/GridWalkPushForward.h +++ b/grid/walk/GridWalkPushForward.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKPUSHFORWARD_H #define GRIDWALKPUSHFORWARD_H diff --git a/grid/walk/GridWalkRandomHeadingUpdate.h b/grid/walk/GridWalkRandomHeadingUpdate.h index b8520b9..f072184 100644 --- a/grid/walk/GridWalkRandomHeadingUpdate.h +++ b/grid/walk/GridWalkRandomHeadingUpdate.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKRANDOMHEADINGUPDATE_H #define GRIDWALKRANDOMHEADINGUPDATE_H diff --git a/grid/walk/GridWalkRandomHeadingUpdateAdv.h b/grid/walk/GridWalkRandomHeadingUpdateAdv.h index 2135d2b..e32b80c 100644 --- a/grid/walk/GridWalkRandomHeadingUpdateAdv.h +++ b/grid/walk/GridWalkRandomHeadingUpdateAdv.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKRANDOMHEADINGUPDATEADV_H #define GRIDWALKRANDOMHEADINGUPDATEADV_H diff --git a/grid/walk/GridWalkShortestPathControl.h b/grid/walk/GridWalkShortestPathControl.h index 3e2dbc6..01eda87 100644 --- a/grid/walk/GridWalkShortestPathControl.h +++ b/grid/walk/GridWalkShortestPathControl.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKSHORTESTPATHCONTROL_H #define GRIDWALKSHORTESTPATHCONTROL_H diff --git a/grid/walk/GridWalkSimpleControl.h b/grid/walk/GridWalkSimpleControl.h index e4dcb6c..359d0bb 100644 --- a/grid/walk/GridWalkSimpleControl.h +++ b/grid/walk/GridWalkSimpleControl.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKSIMPLECONTROL_H #define GRIDWALKSIMPLECONTROL_H diff --git a/grid/walk/GridWalkState.h b/grid/walk/GridWalkState.h index a92b02c..3936f3e 100644 --- a/grid/walk/GridWalkState.h +++ b/grid/walk/GridWalkState.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKSTATE_H #define GRIDWALKSTATE_H diff --git a/grid/walk/GridWalkWeighted.h b/grid/walk/GridWalkWeighted.h index 97459ed..8b838e4 100644 --- a/grid/walk/GridWalkWeighted.h +++ b/grid/walk/GridWalkWeighted.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKWEIGHTED_H #define GRIDWALKWEIGHTED_H diff --git a/grid/walk/GridWalkWeighted2.h b/grid/walk/GridWalkWeighted2.h index 4e44043..1e25cce 100644 --- a/grid/walk/GridWalkWeighted2.h +++ b/grid/walk/GridWalkWeighted2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKWEIGHTED2_H #define GRIDWALKWEIGHTED2_H diff --git a/grid/walk/TestWalkWeighted3.h b/grid/walk/TestWalkWeighted3.h index bfdc3fd..4b4f178 100644 --- a/grid/walk/TestWalkWeighted3.h +++ b/grid/walk/TestWalkWeighted3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKWEIGHTED3_H #define GRIDWALKWEIGHTED3_H diff --git a/grid/walk/v2/GridWalker.h b/grid/walk/v2/GridWalker.h index b0154fd..5288b4b 100644 --- a/grid/walk/v2/GridWalker.h +++ b/grid/walk/v2/GridWalker.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKER_H #define GRIDWALKER_H diff --git a/grid/walk/v2/GridWalkerMulti.h b/grid/walk/v2/GridWalkerMulti.h index b3f8bae..cc2eafa 100644 --- a/grid/walk/v2/GridWalkerMulti.h +++ b/grid/walk/v2/GridWalkerMulti.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRIDWALKERMULTI_H #define GRIDWALKERMULTI_H diff --git a/grid/walk/v2/modules/WalkModule.h b/grid/walk/v2/modules/WalkModule.h index 2d82dc9..683d922 100644 --- a/grid/walk/v2/modules/WalkModule.h +++ b/grid/walk/v2/modules/WalkModule.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULE_H #define WALKMODULE_H diff --git a/grid/walk/v2/modules/WalkModuleAbsoluteHeadingControl.h b/grid/walk/v2/modules/WalkModuleAbsoluteHeadingControl.h index 168cc94..37e5f62 100644 --- a/grid/walk/v2/modules/WalkModuleAbsoluteHeadingControl.h +++ b/grid/walk/v2/modules/WalkModuleAbsoluteHeadingControl.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULEABSOLUTEHEADINGCONTROL_H #define WALKMODULEABSOLUTEHEADINGCONTROL_H diff --git a/grid/walk/v2/modules/WalkModuleFavorZ.h b/grid/walk/v2/modules/WalkModuleFavorZ.h index 3893329..b793c78 100644 --- a/grid/walk/v2/modules/WalkModuleFavorZ.h +++ b/grid/walk/v2/modules/WalkModuleFavorZ.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULEFAVORZ_H #define WALKMODULEFAVORZ_H diff --git a/grid/walk/v2/modules/WalkModuleFollowDestination.h b/grid/walk/v2/modules/WalkModuleFollowDestination.h index 9f66641..e12d94b 100644 --- a/grid/walk/v2/modules/WalkModuleFollowDestination.h +++ b/grid/walk/v2/modules/WalkModuleFollowDestination.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULEFOLLOWDESTINATION_H #define WALKMODULEFOLLOWDESTINATION_H diff --git a/grid/walk/v2/modules/WalkModuleHeading.h b/grid/walk/v2/modules/WalkModuleHeading.h index d992499..350faf4 100644 --- a/grid/walk/v2/modules/WalkModuleHeading.h +++ b/grid/walk/v2/modules/WalkModuleHeading.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULEHEADING_H #define WALKMODULEHEADING_H diff --git a/grid/walk/v2/modules/WalkModuleHeadingControl.h b/grid/walk/v2/modules/WalkModuleHeadingControl.h index 0eb0651..dc0ed31 100644 --- a/grid/walk/v2/modules/WalkModuleHeadingControl.h +++ b/grid/walk/v2/modules/WalkModuleHeadingControl.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULEHEADINGCONTROL_H #define WALKMODULEHEADINGCONTROL_H diff --git a/grid/walk/v2/modules/WalkModuleNodeImportance.h b/grid/walk/v2/modules/WalkModuleNodeImportance.h index 7e62632..682ac84 100644 --- a/grid/walk/v2/modules/WalkModuleNodeImportance.h +++ b/grid/walk/v2/modules/WalkModuleNodeImportance.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULENODEIMPORTANCE_H #define WALKMODULENODEIMPORTANCE_H diff --git a/grid/walk/v2/modules/WalkModulePreventVisited.h b/grid/walk/v2/modules/WalkModulePreventVisited.h index 3b3d674..a7c3fd3 100644 --- a/grid/walk/v2/modules/WalkModulePreventVisited.h +++ b/grid/walk/v2/modules/WalkModulePreventVisited.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULEPREVENTVISITED_H #define WALKMODULEPREVENTVISITED_H diff --git a/grid/walk/v2/modules/WalkModuleSpread.h b/grid/walk/v2/modules/WalkModuleSpread.h index b4fd4fc..4ab7e4e 100644 --- a/grid/walk/v2/modules/WalkModuleSpread.h +++ b/grid/walk/v2/modules/WalkModuleSpread.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKMODULESPREAD_H #define WALKMODULESPREAD_H diff --git a/grid/walk/v2/modules/WalkStateHeading.h b/grid/walk/v2/modules/WalkStateHeading.h index 89a0e2d..f10f872 100644 --- a/grid/walk/v2/modules/WalkStateHeading.h +++ b/grid/walk/v2/modules/WalkStateHeading.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WALKSTATEHEADING_H #define WALKSTATEHEADING_H diff --git a/grid/walk/v3/Helper.h b/grid/walk/v3/Helper.h index 57b6c13..11ec817 100644 --- a/grid/walk/v3/Helper.h +++ b/grid/walk/v3/Helper.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_GW3_HELPER_H #define INDOOR_GW3_HELPER_H diff --git a/grid/walk/v3/Reachable.h b/grid/walk/v3/Reachable.h index fdd3c9b..fcced53 100644 --- a/grid/walk/v3/Reachable.h +++ b/grid/walk/v3/Reachable.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_GW3_REACHABLE_H #define INDOOR_GW3_REACHABLE_H diff --git a/grid/walk/v3/ReachableSampler.h b/grid/walk/v3/ReachableSampler.h index 00ed440..b645207 100644 --- a/grid/walk/v3/ReachableSampler.h +++ b/grid/walk/v3/ReachableSampler.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_GW3_REACHABLESAMPLER_H #define INDOOR_GW3_REACHABLESAMPLER_H diff --git a/grid/walk/v3/Structs.h b/grid/walk/v3/Structs.h index 2c92da6..a148810 100644 --- a/grid/walk/v3/Structs.h +++ b/grid/walk/v3/Structs.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_GW3_STRUCTS_H #define INDOOR_GW3_STRUCTS_H diff --git a/grid/walk/v3/WalkEvaluator.h b/grid/walk/v3/WalkEvaluator.h index 843d237..6e5a712 100644 --- a/grid/walk/v3/WalkEvaluator.h +++ b/grid/walk/v3/WalkEvaluator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_GW3_WALKEVALUATOR_H #define INDOOR_GW3_WALKEVALUATOR_H diff --git a/grid/walk/v3/WalkGenerator.h b/grid/walk/v3/WalkGenerator.h index 28f9cc1..e9a52db 100644 --- a/grid/walk/v3/WalkGenerator.h +++ b/grid/walk/v3/WalkGenerator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_GRIDWALKER3GENERATOR_H #define INDOOR_GRIDWALKER3GENERATOR_H diff --git a/grid/walk/v3/Walker.h b/grid/walk/v3/Walker.h index 0f04439..9590629 100644 --- a/grid/walk/v3/Walker.h +++ b/grid/walk/v3/Walker.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_GW3_WALKER_H #define INDOOR_GW3_WALKER_H diff --git a/math/Delay.h b/math/Delay.h index bd90a94..df0c22d 100644 --- a/math/Delay.h +++ b/math/Delay.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DELAY_H #define DELAY_H diff --git a/math/DelayBuffer.h b/math/DelayBuffer.h index dbe44cf..99ba3f9 100644 --- a/math/DelayBuffer.h +++ b/math/DelayBuffer.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DELAYBUFFER_H #define DELAYBUFFER_H diff --git a/math/DrawList.h b/math/DrawList.h index 00d098b..60d848b 100644 --- a/math/DrawList.h +++ b/math/DrawList.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DRAWLIST_H #define DRAWLIST_H diff --git a/math/FixedFrequencyInterpolator.h b/math/FixedFrequencyInterpolator.h index a6d7a13..7293cce 100644 --- a/math/FixedFrequencyInterpolator.h +++ b/math/FixedFrequencyInterpolator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FIXEDFREQUENCYINTERPOLATOR_H #define FIXEDFREQUENCYINTERPOLATOR_H diff --git a/math/Floatingpoint.h b/math/Floatingpoint.h index 4158e94..3cb71f9 100644 --- a/math/Floatingpoint.h +++ b/math/Floatingpoint.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FLOATINGPOINT_H #define FLOATINGPOINT_H diff --git a/math/Interpolator.h b/math/Interpolator.h index b1f0b57..6a84e1d 100644 --- a/math/Interpolator.h +++ b/math/Interpolator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INTERPOLATOR_H #define INTERPOLATOR_H diff --git a/math/KahanSum.h b/math/KahanSum.h index 4ae2587..e2622a0 100644 --- a/math/KahanSum.h +++ b/math/KahanSum.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef KAHANSUM_H #define KAHANSUM_H diff --git a/math/Math.h b/math/Math.h index 33e7cab..7eb2d24 100644 --- a/math/Math.h +++ b/math/Math.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef K_MATH_MATH_H #define K_MATH_MATH_H diff --git a/math/Matrix3.h b/math/Matrix3.h index e43eebc..206649e 100644 --- a/math/Matrix3.h +++ b/math/Matrix3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_MATH_MATRIX3_H #define INDOOR_MATH_MATRIX3_H diff --git a/math/Matrix4.h b/math/Matrix4.h index 07e8001..423d66c 100644 --- a/math/Matrix4.h +++ b/math/Matrix4.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MATRIX4_H #define MATRIX4_H diff --git a/math/MiniMat2.h b/math/MiniMat2.h index 117af9b..188cf46 100644 --- a/math/MiniMat2.h +++ b/math/MiniMat2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MINIMAT2_H #define MINIMAT2_H diff --git a/math/MovingAVG.h b/math/MovingAVG.h index 95d1488..5fe30fb 100644 --- a/math/MovingAVG.h +++ b/math/MovingAVG.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MOVINGAVG_H #define MOVINGAVG_H diff --git a/math/MovingAverageTS.h b/math/MovingAverageTS.h index 20200a4..e8e5ffd 100644 --- a/math/MovingAverageTS.h +++ b/math/MovingAverageTS.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MOVINGAVERAGETS_H #define MOVINGAVERAGETS_H diff --git a/math/MovingMedian.h b/math/MovingMedian.h index 56c8ee5..8e0ea65 100644 --- a/math/MovingMedian.h +++ b/math/MovingMedian.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MOVINGMEDIAN_H #define MOVINGMEDIAN_H diff --git a/math/MovingMedianTS.h b/math/MovingMedianTS.h index a3722ca..572ceea 100644 --- a/math/MovingMedianTS.h +++ b/math/MovingMedianTS.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MOVINGMEDIANTS_H #define MOVINGMEDIANTS_H diff --git a/math/MovingMinMaxTS.h b/math/MovingMinMaxTS.h index a99aa19..02e4dfc 100644 --- a/math/MovingMinMaxTS.h +++ b/math/MovingMinMaxTS.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MOVINGMINMAXTS_H #define MOVINGMINMAXTS_H diff --git a/math/MovingStdDevTS.h b/math/MovingStdDevTS.h index f565611..13001fc 100644 --- a/math/MovingStdDevTS.h +++ b/math/MovingStdDevTS.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MOVINGSTDDEVTS_H #define MOVINGSTDDEVTS_H diff --git a/math/distribution/Bessel.h b/math/distribution/Bessel.h index d3f60b0..f955782 100644 --- a/math/distribution/Bessel.h +++ b/math/distribution/Bessel.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BESSEL_H #define BESSEL_H diff --git a/math/distribution/ChiSquared.h b/math/distribution/ChiSquared.h index 589b0fc..0e22485 100644 --- a/math/distribution/ChiSquared.h +++ b/math/distribution/ChiSquared.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef CHISQUARED_H #define CHISQUARED_H diff --git a/math/distribution/Exponential.h b/math/distribution/Exponential.h index 39a81fc..0b9ebd1 100644 --- a/math/distribution/Exponential.h +++ b/math/distribution/Exponential.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef EXPONENTIAL_H #define EXPONENTIAL_H diff --git a/math/distribution/LUT.h b/math/distribution/LUT.h index a331fac..90d875d 100644 --- a/math/distribution/LUT.h +++ b/math/distribution/LUT.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef LUT_H #define LUT_H diff --git a/math/distribution/Logistic.h b/math/distribution/Logistic.h index 957699b..21a5301 100644 --- a/math/distribution/Logistic.h +++ b/math/distribution/Logistic.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef LOGISTIC_H #define LOGISTIC_H diff --git a/math/distribution/Normal.h b/math/distribution/Normal.h index fa3dee1..2f5b9c5 100644 --- a/math/distribution/Normal.h +++ b/math/distribution/Normal.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NORMAL_H #define NORMAL_H diff --git a/math/distribution/Rectangular.h b/math/distribution/Rectangular.h index 45e0b40..fd453cf 100644 --- a/math/distribution/Rectangular.h +++ b/math/distribution/Rectangular.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef RECTANGULAR_H #define RECTANGULAR_H diff --git a/math/distribution/Region.h b/math/distribution/Region.h index d21c23b..bbd9833 100644 --- a/math/distribution/Region.h +++ b/math/distribution/Region.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DIST_REGION_H #define DIST_REGION_H diff --git a/math/distribution/Triangle.h b/math/distribution/Triangle.h index d385848..130a9ab 100644 --- a/math/distribution/Triangle.h +++ b/math/distribution/Triangle.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef TRIANGLE_H #define TRIANGLE_H diff --git a/math/distribution/Uniform.h b/math/distribution/Uniform.h index 143fffe..eb46c74 100644 --- a/math/distribution/Uniform.h +++ b/math/distribution/Uniform.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef UNIFORM_H #define UNIFORM_H diff --git a/math/distribution/VonMises.h b/math/distribution/VonMises.h index 40b4189..84e2834 100644 --- a/math/distribution/VonMises.h +++ b/math/distribution/VonMises.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef K_MATH_DISTRIBUTION_VONMISES_H #define K_MATH_DISTRIBUTION_VONMISES_H diff --git a/math/dsp/Convolution.h b/math/dsp/Convolution.h index a4d8291..d3b7ac6 100644 --- a/math/dsp/Convolution.h +++ b/math/dsp/Convolution.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef CONVOLUTION_H #define CONVOLUTION_H diff --git a/math/dsp/fir/Complex.h b/math/dsp/fir/Complex.h index a194e13..41f158f 100644 --- a/math/dsp/fir/Complex.h +++ b/math/dsp/fir/Complex.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FIRCOMPLEX_H #define FIRCOMPLEX_H diff --git a/math/dsp/fir/ComplexFactory.h b/math/dsp/fir/ComplexFactory.h index 1532ebd..971b443 100644 --- a/math/dsp/fir/ComplexFactory.h +++ b/math/dsp/fir/ComplexFactory.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FIRFACTORY_H #define FIRFACTORY_H diff --git a/math/dsp/fir/Real.h b/math/dsp/fir/Real.h index c7eec85..d692fcf 100644 --- a/math/dsp/fir/Real.h +++ b/math/dsp/fir/Real.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FIRREAL_H #define FIRREAL_H diff --git a/math/dsp/fir/RealFactory.h b/math/dsp/fir/RealFactory.h index 95d92a8..ab43245 100644 --- a/math/dsp/fir/RealFactory.h +++ b/math/dsp/fir/RealFactory.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FIRREALFACTORY_H #define FIRREALFACTORY_H diff --git a/math/dsp/iir/BiQuad.h b/math/dsp/iir/BiQuad.h index 896edcd..f2b1761 100644 --- a/math/dsp/iir/BiQuad.h +++ b/math/dsp/iir/BiQuad.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef IIR_BIQUAD #define IIR_BIQUAD diff --git a/math/dsp/iir/BiQuadStack.h b/math/dsp/iir/BiQuadStack.h index 6c92203..3f46a96 100644 --- a/math/dsp/iir/BiQuadStack.h +++ b/math/dsp/iir/BiQuadStack.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BIQUADSTACK_H #define BIQUADSTACK_H diff --git a/math/filter/Complementary.h b/math/filter/Complementary.h index 3670c15..81c63c2 100644 --- a/math/filter/Complementary.h +++ b/math/filter/Complementary.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef COMPLEMENTARY_H #define COMPLEMENTARY_H diff --git a/math/random/DrawList.h b/math/random/DrawList.h index 4d252c1..dedf175 100644 --- a/math/random/DrawList.h +++ b/math/random/DrawList.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef K_MATH_RANDOM_DRAWLIST_H #define K_MATH_RANDOM_DRAWLIST_H diff --git a/math/random/DrawWheel.h b/math/random/DrawWheel.h index 6e9bbf5..87b32fe 100644 --- a/math/random/DrawWheel.h +++ b/math/random/DrawWheel.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef K_MATH_RANDOM_DRAWLIST_H #define K_MATH_RANDOM_DRAWLIST_H diff --git a/math/random/RandomGenerator.h b/math/random/RandomGenerator.h index 3aba20a..a5adf05 100644 --- a/math/random/RandomGenerator.h +++ b/math/random/RandomGenerator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef RANDOM_Random_RandomGenerator_H #define RANDOM_Random_RandomGenerator_H diff --git a/math/random/RandomIterator.h b/math/random/RandomIterator.h index b37b3e3..be9929a 100644 --- a/math/random/RandomIterator.h +++ b/math/random/RandomIterator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef RANDOMITERATOR_H #define RANDOMITERATOR_H diff --git a/math/random/Uniform.h b/math/random/Uniform.h index dadfe0e..1dd39e9 100644 --- a/math/random/Uniform.h +++ b/math/random/Uniform.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef K_MATH_RANDOM_UNIFORM_H #define K_MATH_RANDOM_UNIFORM_H diff --git a/math/random/Unique.h b/math/random/Unique.h index f7f829b..581b835 100644 --- a/math/random/Unique.h +++ b/math/random/Unique.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef K_MATH_RND_UNIQUE_H #define K_MATH_RND_UNIQUE_H diff --git a/math/stats/Average.h b/math/stats/Average.h index 62d294a..e3f574d 100644 --- a/math/stats/Average.h +++ b/math/stats/Average.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef AVERAGE_H #define AVERAGE_H diff --git a/math/stats/Histogram.h b/math/stats/Histogram.h index b3dc20c..5c693a9 100644 --- a/math/stats/Histogram.h +++ b/math/stats/Histogram.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STATS_HISTOGRAM_H #define STATS_HISTOGRAM_H diff --git a/math/stats/Histogram2.h b/math/stats/Histogram2.h index 748f57b..f25f768 100644 --- a/math/stats/Histogram2.h +++ b/math/stats/Histogram2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef HISTOGRAM2_H #define HISTOGRAM2_H diff --git a/math/stats/Maximum.h b/math/stats/Maximum.h index 533af3e..8fe4fea 100644 --- a/math/stats/Maximum.h +++ b/math/stats/Maximum.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STATS_MAXIMUM_H #define STATS_MAXIMUM_H diff --git a/math/stats/Median.h b/math/stats/Median.h index a74d57e..b2331b1 100644 --- a/math/stats/Median.h +++ b/math/stats/Median.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STATS_MEDIAN_H #define STATS_MEDIAN_H diff --git a/math/stats/Minimum.h b/math/stats/Minimum.h index b29e426..922806c 100644 --- a/math/stats/Minimum.h +++ b/math/stats/Minimum.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STATS_MINIMUM_H #define STATS_MINIMUM_H diff --git a/math/stats/SampleRateEstimator.h b/math/stats/SampleRateEstimator.h index e5e1164..28342ea 100644 --- a/math/stats/SampleRateEstimator.h +++ b/math/stats/SampleRateEstimator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef SAMPLERATEESTIMATOR_H #define SAMPLERATEESTIMATOR_H diff --git a/math/stats/Statistics.h b/math/stats/Statistics.h index ed4609b..a8bbb2f 100644 --- a/math/stats/Statistics.h +++ b/math/stats/Statistics.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STATISTICS_H #define STATISTICS_H diff --git a/math/stats/Variance.h b/math/stats/Variance.h index 02ec8fe..8241607 100644 --- a/math/stats/Variance.h +++ b/math/stats/Variance.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STATS_VARIANCE_H #define STATS_VARIANCE_H diff --git a/nav/dijkstra/Dijkstra.h b/nav/dijkstra/Dijkstra.h index 12f19d5..e1e20c7 100644 --- a/nav/dijkstra/Dijkstra.h +++ b/nav/dijkstra/Dijkstra.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DIJKSTRA_H #define DIJKSTRA_H diff --git a/nav/dijkstra/DijkstraPath.h b/nav/dijkstra/DijkstraPath.h index 9c0368e..ed1d024 100644 --- a/nav/dijkstra/DijkstraPath.h +++ b/nav/dijkstra/DijkstraPath.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DIJKSTRAPATH_H #define DIJKSTRAPATH_H diff --git a/nav/dijkstra/DijkstraStructs.h b/nav/dijkstra/DijkstraStructs.h index 7f6a9e9..30beb5c 100644 --- a/nav/dijkstra/DijkstraStructs.h +++ b/nav/dijkstra/DijkstraStructs.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DIJKSTRANODE_H #define DIJKSTRANODE_H diff --git a/navMesh/NavMesh.h b/navMesh/NavMesh.h index 10f1c3f..5140962 100644 --- a/navMesh/NavMesh.h +++ b/navMesh/NavMesh.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAV_MESH_H #define NAV_MESH_H diff --git a/navMesh/NavMeshDebug.h b/navMesh/NavMeshDebug.h index e713756..2b68681 100644 --- a/navMesh/NavMeshDebug.h +++ b/navMesh/NavMeshDebug.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHDEBUG_H #define NAVMESHDEBUG_H diff --git a/navMesh/NavMeshFactory.h b/navMesh/NavMeshFactory.h index 8e25a72..f30928f 100644 --- a/navMesh/NavMeshFactory.h +++ b/navMesh/NavMeshFactory.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAV_MESH_FACTORY_H #define NAV_MESH_FACTORY_H diff --git a/navMesh/NavMeshFactoryListener.h b/navMesh/NavMeshFactoryListener.h index 986ea45..605b61d 100644 --- a/navMesh/NavMeshFactoryListener.h +++ b/navMesh/NavMeshFactoryListener.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHFACTORYLISTENER_H #define NAVMESHFACTORYLISTENER_H diff --git a/navMesh/NavMeshLocation.h b/navMesh/NavMeshLocation.h index 1ed7c60..dea65e8 100644 --- a/navMesh/NavMeshLocation.h +++ b/navMesh/NavMeshLocation.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHLOCATION_H #define NAVMESHLOCATION_H diff --git a/navMesh/NavMeshRandom.h b/navMesh/NavMeshRandom.h index 595e65e..b6a8092 100644 --- a/navMesh/NavMeshRandom.h +++ b/navMesh/NavMeshRandom.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHRANDOM_H #define NAVMESHRANDOM_H diff --git a/navMesh/NavMeshSettings.h b/navMesh/NavMeshSettings.h index d93c789..a762276 100644 --- a/navMesh/NavMeshSettings.h +++ b/navMesh/NavMeshSettings.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHSETTINGS_H #define NAVMESHSETTINGS_H diff --git a/navMesh/NavMeshTriangle.h b/navMesh/NavMeshTriangle.h index 7f1d944..6d8802c 100644 --- a/navMesh/NavMeshTriangle.h +++ b/navMesh/NavMeshTriangle.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHTRIANGLE_H #define NAVMESHTRIANGLE_H diff --git a/navMesh/NavMeshType.h b/navMesh/NavMeshType.h index 19f1352..1474dd7 100644 --- a/navMesh/NavMeshType.h +++ b/navMesh/NavMeshType.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHTYPE_H #define NAVMESHTYPE_H diff --git a/navMesh/meta/NavMeshDijkstra.h b/navMesh/meta/NavMeshDijkstra.h index ca5ae24..70dba0a 100644 --- a/navMesh/meta/NavMeshDijkstra.h +++ b/navMesh/meta/NavMeshDijkstra.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHDIJKSTRA_H #define NAVMESHDIJKSTRA_H diff --git a/navMesh/walk/NavMeshSub.h b/navMesh/walk/NavMeshSub.h index 5b084f3..461672b 100644 --- a/navMesh/walk/NavMeshSub.h +++ b/navMesh/walk/NavMeshSub.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHSUB_H #define NAVMESHSUB_H diff --git a/navMesh/walk/NavMeshWalkEval.h b/navMesh/walk/NavMeshWalkEval.h index 5d75082..317a064 100644 --- a/navMesh/walk/NavMeshWalkEval.h +++ b/navMesh/walk/NavMeshWalkEval.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHWALKEVAL_H #define NAVMESHWALKEVAL_H diff --git a/navMesh/walk/NavMeshWalkParams.h b/navMesh/walk/NavMeshWalkParams.h index 6b85190..d2cfd21 100644 --- a/navMesh/walk/NavMeshWalkParams.h +++ b/navMesh/walk/NavMeshWalkParams.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHWALKPARAMS_H #define NAVMESHWALKPARAMS_H diff --git a/navMesh/walk/NavMeshWalkRandom.h b/navMesh/walk/NavMeshWalkRandom.h index 8adff15..a54d3c4 100644 --- a/navMesh/walk/NavMeshWalkRandom.h +++ b/navMesh/walk/NavMeshWalkRandom.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHWALKRANDOM_H #define NAVMESHWALKRANDOM_H diff --git a/navMesh/walk/NavMeshWalkSemiDirected.h b/navMesh/walk/NavMeshWalkSemiDirected.h index e14a8e4..ba3a082 100644 --- a/navMesh/walk/NavMeshWalkSemiDirected.h +++ b/navMesh/walk/NavMeshWalkSemiDirected.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHWALKSEMIDIRECTED_H #define NAVMESHWALKSEMIDIRECTED_H diff --git a/navMesh/walk/NavMeshWalkSemiRandom.h b/navMesh/walk/NavMeshWalkSemiRandom.h index fff38ec..d9a7de0 100644 --- a/navMesh/walk/NavMeshWalkSemiRandom.h +++ b/navMesh/walk/NavMeshWalkSemiRandom.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHWALKSEMIRANDOM_H #define NAVMESHWALKSEMIRANDOM_H diff --git a/navMesh/walk/NavMeshWalkSimple.h b/navMesh/walk/NavMeshWalkSimple.h index c224427..595d679 100644 --- a/navMesh/walk/NavMeshWalkSimple.h +++ b/navMesh/walk/NavMeshWalkSimple.h @@ -1,3 +1,14 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Einige Aenderungen beigetragen von Toni Fetzer + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHWALKSIMPLE_H #define NAVMESHWALKSIMPLE_H diff --git a/navMesh/walk/NavMeshWalkSinkOrSwim.h b/navMesh/walk/NavMeshWalkSinkOrSwim.h index 6860134..53ccbe8 100644 --- a/navMesh/walk/NavMeshWalkSinkOrSwim.h +++ b/navMesh/walk/NavMeshWalkSinkOrSwim.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef NAVMESHWALKSINKORSWIM_H #define NAVMESHWALKSINKORSWIM_H diff --git a/sensors/MACAddress.h b/sensors/MACAddress.h index 35ec1bb..e19e55c 100644 --- a/sensors/MACAddress.h +++ b/sensors/MACAddress.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MACADDRESS_H #define MACADDRESS_H diff --git a/sensors/beacon/Beacon.h b/sensors/beacon/Beacon.h index 1604932..754a70b 100644 --- a/sensors/beacon/Beacon.h +++ b/sensors/beacon/Beacon.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACON_H #define BEACON_H diff --git a/sensors/beacon/BeaconMeasurement.h b/sensors/beacon/BeaconMeasurement.h index 0bc3ea9..bbb0526 100644 --- a/sensors/beacon/BeaconMeasurement.h +++ b/sensors/beacon/BeaconMeasurement.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACONMEASUREMENT_H #define BEACONMEASUREMENT_H diff --git a/sensors/beacon/BeaconMeasurements.h b/sensors/beacon/BeaconMeasurements.h index dbdf489..776df87 100644 --- a/sensors/beacon/BeaconMeasurements.h +++ b/sensors/beacon/BeaconMeasurements.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACONMEASUREMENTS_H #define BEACONMEASUREMENTS_H diff --git a/sensors/beacon/BeaconProbability.h b/sensors/beacon/BeaconProbability.h index 66c0707..94557f5 100644 --- a/sensors/beacon/BeaconProbability.h +++ b/sensors/beacon/BeaconProbability.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACONPROBABILITY_H #define BEACONPROBABILITY_H diff --git a/sensors/beacon/BeaconProbabilityFree.h b/sensors/beacon/BeaconProbabilityFree.h index a82de3e..91f805f 100644 --- a/sensors/beacon/BeaconProbabilityFree.h +++ b/sensors/beacon/BeaconProbabilityFree.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACONPROBABILITYFREE_H #define BEACONPROBABILITYFREE_H diff --git a/sensors/beacon/model/BeaconModel.h b/sensors/beacon/model/BeaconModel.h index c9ba73f..c20c616 100644 --- a/sensors/beacon/model/BeaconModel.h +++ b/sensors/beacon/model/BeaconModel.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACONMODEL_H #define BEACONMODEL_H diff --git a/sensors/beacon/model/BeaconModelLogDist.h b/sensors/beacon/model/BeaconModelLogDist.h index 460cac8..6f09749 100644 --- a/sensors/beacon/model/BeaconModelLogDist.h +++ b/sensors/beacon/model/BeaconModelLogDist.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACONMODELLOGDIST_H #define BEACONMODELLOGDIST_H diff --git a/sensors/beacon/model/BeaconModelLogDistCeiling.h b/sensors/beacon/model/BeaconModelLogDistCeiling.h index 649d19e..f8b9e6e 100644 --- a/sensors/beacon/model/BeaconModelLogDistCeiling.h +++ b/sensors/beacon/model/BeaconModelLogDistCeiling.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BEACONMODELLOGDISTCEILING_H #define BEACONMODELLOGDISTCEILING_H diff --git a/sensors/gps/GPSData.h b/sensors/gps/GPSData.h index c3fa77e..1b1a1f8 100644 --- a/sensors/gps/GPSData.h +++ b/sensors/gps/GPSData.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GPSDATA_H #define GPSDATA_H diff --git a/sensors/gps/GPSProbability.h b/sensors/gps/GPSProbability.h index 194cbd7..e6122df 100644 --- a/sensors/gps/GPSProbability.h +++ b/sensors/gps/GPSProbability.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GPSPROBABILITY_H #define GPSPROBABILITY_H diff --git a/sensors/imu/AccelerometerData.h b/sensors/imu/AccelerometerData.h index b71626d..b666dbe 100644 --- a/sensors/imu/AccelerometerData.h +++ b/sensors/imu/AccelerometerData.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef ACCELEROMETERDATA_H #define ACCELEROMETERDATA_H diff --git a/sensors/imu/CompassData.h b/sensors/imu/CompassData.h index 551f63d..1984eb1 100644 --- a/sensors/imu/CompassData.h +++ b/sensors/imu/CompassData.h @@ -1,7 +1,16 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef COMPASSDATA_H #define COMPASSDATA_H - #include #include #include "../../math/Floatingpoint.h" diff --git a/sensors/imu/CompassDetection.h b/sensors/imu/CompassDetection.h index 2ec5635..a61e7b1 100644 --- a/sensors/imu/CompassDetection.h +++ b/sensors/imu/CompassDetection.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_IMU_COMPASSDETECTION_H #define INDOOR_IMU_COMPASSDETECTION_H diff --git a/sensors/imu/CompassDetectionPlot.h b/sensors/imu/CompassDetectionPlot.h index 5c1cbe1..a1b97c7 100644 --- a/sensors/imu/CompassDetectionPlot.h +++ b/sensors/imu/CompassDetectionPlot.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_IMU_COMPASSDETECTIONPLOT_H #define INDOOR_IMU_COMPASSDETECTIONPLOT_H diff --git a/sensors/imu/GravityData.h b/sensors/imu/GravityData.h index 24fee76..e875a23 100644 --- a/sensors/imu/GravityData.h +++ b/sensors/imu/GravityData.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GRAVITYDATA_H #define GRAVITYDATA_H diff --git a/sensors/imu/GyroscopeData.h b/sensors/imu/GyroscopeData.h index 5205a72..d850b30 100644 --- a/sensors/imu/GyroscopeData.h +++ b/sensors/imu/GyroscopeData.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GYROSCOPEDATA_H #define GYROSCOPEDATA_H diff --git a/sensors/imu/LinearAccelerationData.h b/sensors/imu/LinearAccelerationData.h index df6962e..56e4908 100644 --- a/sensors/imu/LinearAccelerationData.h +++ b/sensors/imu/LinearAccelerationData.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef LINEARACCELERATIONDATA_H #define LINEARACCELERATIONDATA_H diff --git a/sensors/imu/MagnetometerData.h b/sensors/imu/MagnetometerData.h index 613fa37..805e591 100644 --- a/sensors/imu/MagnetometerData.h +++ b/sensors/imu/MagnetometerData.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_IMU_MAGNETOMETERDATA_H #define INDOOR_IMU_MAGNETOMETERDATA_H diff --git a/sensors/imu/MotionDetection.h b/sensors/imu/MotionDetection.h index 76284fe..30e8a61 100644 --- a/sensors/imu/MotionDetection.h +++ b/sensors/imu/MotionDetection.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef MOTIONDETECTION_H #define MOTIONDETECTION_H diff --git a/sensors/imu/PoseDetection.h b/sensors/imu/PoseDetection.h index a990f43..c44466c 100644 --- a/sensors/imu/PoseDetection.h +++ b/sensors/imu/PoseDetection.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_IMU_POSEDETECTION_H #define INDOOR_IMU_POSEDETECTION_H diff --git a/sensors/imu/PoseDetection2.h b/sensors/imu/PoseDetection2.h index e3b6ef3..7ec24ae 100644 --- a/sensors/imu/PoseDetection2.h +++ b/sensors/imu/PoseDetection2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef POSEDETECTION2_H #define POSEDETECTION2_H diff --git a/sensors/imu/PoseDetection3.h b/sensors/imu/PoseDetection3.h index b22d8da..15d7941 100644 --- a/sensors/imu/PoseDetection3.h +++ b/sensors/imu/PoseDetection3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef POSEDETECTION3_H #define POSEDETECTION3_H diff --git a/sensors/imu/PoseDetectionPlot.h b/sensors/imu/PoseDetectionPlot.h index 8d86d71..f40d90d 100644 --- a/sensors/imu/PoseDetectionPlot.h +++ b/sensors/imu/PoseDetectionPlot.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_IMU_POSEDETECTIONPLOT_H #define INDOOR_IMU_POSEDETECTIONPLOT_H diff --git a/sensors/imu/PoseProvider.h b/sensors/imu/PoseProvider.h index 37cc8b5..b997e35 100644 --- a/sensors/imu/PoseProvider.h +++ b/sensors/imu/PoseProvider.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef POSEPROVIDER_H #define POSEPROVIDER_H diff --git a/sensors/imu/StepDetection.h b/sensors/imu/StepDetection.h index 99d067c..029b6cc 100644 --- a/sensors/imu/StepDetection.h +++ b/sensors/imu/StepDetection.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STEPDETECTION_H #define STEPDETECTION_H diff --git a/sensors/imu/StepDetection2.h b/sensors/imu/StepDetection2.h index 9df73df..1caea04 100644 --- a/sensors/imu/StepDetection2.h +++ b/sensors/imu/StepDetection2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STEPDETECTION2_H #define STEPDETECTION2_H diff --git a/sensors/imu/StepDetection3.h b/sensors/imu/StepDetection3.h index f4fffaf..37dfc83 100644 --- a/sensors/imu/StepDetection3.h +++ b/sensors/imu/StepDetection3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STEPDETECTION3_H #define STEPDETECTION3_H diff --git a/sensors/imu/StepDetection4.h b/sensors/imu/StepDetection4.h index 4aa2174..b928bf9 100644 --- a/sensors/imu/StepDetection4.h +++ b/sensors/imu/StepDetection4.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef STEPDETECTION4_H #define STEPDETECTION4_H diff --git a/sensors/imu/TurnDetection.h b/sensors/imu/TurnDetection.h index 794f1f9..db9f808 100644 --- a/sensors/imu/TurnDetection.h +++ b/sensors/imu/TurnDetection.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef TURNDETECTION_H #define TURNDETECTION_H diff --git a/sensors/imu/TurnDetection2.h b/sensors/imu/TurnDetection2.h index e15d451..73f89b1 100644 --- a/sensors/imu/TurnDetection2.h +++ b/sensors/imu/TurnDetection2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef TURNDETECTION2_H #define TURNDETECTION2_H diff --git a/sensors/imu/TurnDetectionPlot.h b/sensors/imu/TurnDetectionPlot.h index 0f78847..1fca485 100644 --- a/sensors/imu/TurnDetectionPlot.h +++ b/sensors/imu/TurnDetectionPlot.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_IMU_TURNDETECTIONPLOT_H #define INDOOR_IMU_TURNDETECTIONPLOT_H diff --git a/sensors/imu/TurnProvider.h b/sensors/imu/TurnProvider.h index 7db1cdc..268e49a 100644 --- a/sensors/imu/TurnProvider.h +++ b/sensors/imu/TurnProvider.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef TURN_PROVIDER_H #define TURN_PROVIDER_H diff --git a/sensors/offline/FilePlayer.h b/sensors/offline/FilePlayer.h index b74ef22..270f134 100644 --- a/sensors/offline/FilePlayer.h +++ b/sensors/offline/FilePlayer.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FILEPLAYER_H #define FILEPLAYER_H diff --git a/sensors/offline/FileReader.h b/sensors/offline/FileReader.h index 569c5e7..947af37 100644 --- a/sensors/offline/FileReader.h +++ b/sensors/offline/FileReader.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FILEREADER_H #define FILEREADER_H diff --git a/sensors/offline/FileWriter.h b/sensors/offline/FileWriter.h index 4e2f97e..a5cab38 100644 --- a/sensors/offline/FileWriter.h +++ b/sensors/offline/FileWriter.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef FILEWRITER_H #define FILEWRITER_H diff --git a/sensors/offline/Listener.h b/sensors/offline/Listener.h index abdb2c8..a196e94 100644 --- a/sensors/offline/Listener.h +++ b/sensors/offline/Listener.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef OFFLINE_LISTENER_H #define OFFLINE_LISTENER_H diff --git a/sensors/offline/OfflineAndroid.h b/sensors/offline/OfflineAndroid.h index 3d32fc0..acfa603 100644 --- a/sensors/offline/OfflineAndroid.h +++ b/sensors/offline/OfflineAndroid.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef OFFLINEANDROID_H #define OFFLINEANDROID_H diff --git a/sensors/offline/Sensors.h b/sensors/offline/Sensors.h index 80971b9..8cc9b5e 100644 --- a/sensors/offline/Sensors.h +++ b/sensors/offline/Sensors.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef OFFLINE_SENSORS_H #define OFFLINE_SENSORS_H diff --git a/sensors/offline/Splitter.h b/sensors/offline/Splitter.h index d78751f..c8db760 100644 --- a/sensors/offline/Splitter.h +++ b/sensors/offline/Splitter.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef DATA_SPLITTER_H #define DATA_SPLITTER_H diff --git a/sensors/radio/AccessPoint.h b/sensors/radio/AccessPoint.h index 7211f6d..52fb9b0 100644 --- a/sensors/radio/AccessPoint.h +++ b/sensors/radio/AccessPoint.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef ACCESSPOINT_H #define ACCESSPOINT_H diff --git a/sensors/radio/VAPGrouper.h b/sensors/radio/VAPGrouper.h index 82e728c..0415f3f 100644 --- a/sensors/radio/VAPGrouper.h +++ b/sensors/radio/VAPGrouper.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef VAPGROUPER_H #define VAPGROUPER_H diff --git a/sensors/radio/WiFiGridEstimator.h b/sensors/radio/WiFiGridEstimator.h index 0bb33a2..2000136 100644 --- a/sensors/radio/WiFiGridEstimator.h +++ b/sensors/radio/WiFiGridEstimator.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIGRIDESTIMATOR_H #define WIFIGRIDESTIMATOR_H diff --git a/sensors/radio/WiFiGridNode.h b/sensors/radio/WiFiGridNode.h index 2797b6f..36c4988 100644 --- a/sensors/radio/WiFiGridNode.h +++ b/sensors/radio/WiFiGridNode.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIGRIDNODE_H #define WIFIGRIDNODE_H diff --git a/sensors/radio/WiFiMeasurement.h b/sensors/radio/WiFiMeasurement.h index a7e39fd..71b7c6d 100644 --- a/sensors/radio/WiFiMeasurement.h +++ b/sensors/radio/WiFiMeasurement.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMEASUREMENT_H #define WIFIMEASUREMENT_H diff --git a/sensors/radio/WiFiMeasurements.h b/sensors/radio/WiFiMeasurements.h index 18ce569..5a97ead 100644 --- a/sensors/radio/WiFiMeasurements.h +++ b/sensors/radio/WiFiMeasurements.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMEASUREMENTS_H #define WIFIMEASUREMENTS_H diff --git a/sensors/radio/WiFiProbability.h b/sensors/radio/WiFiProbability.h index 6bff01d..ffc367b 100644 --- a/sensors/radio/WiFiProbability.h +++ b/sensors/radio/WiFiProbability.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFPROBABILITY_H #define WIFPROBABILITY_H diff --git a/sensors/radio/WiFiProbabilityFree.h b/sensors/radio/WiFiProbabilityFree.h index c7ae6c5..9b33b03 100644 --- a/sensors/radio/WiFiProbabilityFree.h +++ b/sensors/radio/WiFiProbabilityFree.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIPROBABILITYFREE_H #define WIFIPROBABILITYFREE_H diff --git a/sensors/radio/WiFiProbabilityGrid.h b/sensors/radio/WiFiProbabilityGrid.h index d6aff4e..c078244 100644 --- a/sensors/radio/WiFiProbabilityGrid.h +++ b/sensors/radio/WiFiProbabilityGrid.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIPROBABILITYGRID_H #define WIFIPROBABILITYGRID_H diff --git a/sensors/radio/WiFiQualityAnalyzer.h b/sensors/radio/WiFiQualityAnalyzer.h index 8fe4b54..8c72a38 100644 --- a/sensors/radio/WiFiQualityAnalyzer.h +++ b/sensors/radio/WiFiQualityAnalyzer.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIQUALITYANALYZER_H #define WIFIQUALITYANALYZER_H diff --git a/sensors/radio/model/LogDistanceModel.h b/sensors/radio/model/LogDistanceModel.h index 3f7ea4d..16576e2 100644 --- a/sensors/radio/model/LogDistanceModel.h +++ b/sensors/radio/model/LogDistanceModel.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef LOGDISTANCEMODEL_H #define LOGDISTANCEMODEL_H diff --git a/sensors/radio/model/WiFiModel.h b/sensors/radio/model/WiFiModel.h index cb2e975..50a5ea6 100644 --- a/sensors/radio/model/WiFiModel.h +++ b/sensors/radio/model/WiFiModel.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODEL_H #define WIFIMODEL_H diff --git a/sensors/radio/model/WiFiModelFactory.h b/sensors/radio/model/WiFiModelFactory.h index 0027975..e0d98b0 100644 --- a/sensors/radio/model/WiFiModelFactory.h +++ b/sensors/radio/model/WiFiModelFactory.h @@ -1,7 +1,16 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODELFACTORY_H #define WIFIMODELFACTORY_H - #include "WiFiModel.h" #include "../../../floorplan/v2/Floorplan.h" diff --git a/sensors/radio/model/WiFiModelFactoryImpl.h b/sensors/radio/model/WiFiModelFactoryImpl.h index 1c7369b..5317eac 100644 --- a/sensors/radio/model/WiFiModelFactoryImpl.h +++ b/sensors/radio/model/WiFiModelFactoryImpl.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODELFACTORYIMPL_H #define WIFIMODELFACTORYIMPL_H diff --git a/sensors/radio/model/WiFiModelLogDist.h b/sensors/radio/model/WiFiModelLogDist.h index c7d156b..38a8a71 100644 --- a/sensors/radio/model/WiFiModelLogDist.h +++ b/sensors/radio/model/WiFiModelLogDist.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODELLOGDIST_H #define WIFIMODELLOGDIST_H diff --git a/sensors/radio/model/WiFiModelLogDistCeiling.h b/sensors/radio/model/WiFiModelLogDistCeiling.h index 5552ef9..d9b1742 100644 --- a/sensors/radio/model/WiFiModelLogDistCeiling.h +++ b/sensors/radio/model/WiFiModelLogDistCeiling.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODELLOGDISTCEILING_H #define WIFIMODELLOGDISTCEILING_H diff --git a/sensors/radio/model/WiFiModelPerBBox.h b/sensors/radio/model/WiFiModelPerBBox.h index 1ae5ffc..a1c7403 100644 --- a/sensors/radio/model/WiFiModelPerBBox.h +++ b/sensors/radio/model/WiFiModelPerBBox.h @@ -1,7 +1,16 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODELPERBBOX_H #define WIFIMODELPERBBOX_H - #include "../AccessPoint.h" #include "../../../geo/Point3.h" #include "../../../geo/BBoxes3.h" diff --git a/sensors/radio/model/WiFiModelPerFloor.h b/sensors/radio/model/WiFiModelPerFloor.h index 5c9281c..f621837 100644 --- a/sensors/radio/model/WiFiModelPerFloor.h +++ b/sensors/radio/model/WiFiModelPerFloor.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODELPERFLOOR_H #define WIFIMODELPERFLOOR_H diff --git a/sensors/radio/model/WiFiModels.h b/sensors/radio/model/WiFiModels.h index 0955adf..a3cb928 100644 --- a/sensors/radio/model/WiFiModels.h +++ b/sensors/radio/model/WiFiModels.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIMODELS_H #define WIFIMODELS_H diff --git a/sensors/radio/scan/WiFiChannels.h b/sensors/radio/scan/WiFiChannels.h index 6585397..2fea71a 100644 --- a/sensors/radio/scan/WiFiChannels.h +++ b/sensors/radio/scan/WiFiChannels.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_WIFICHANNELS_H #define INDOOR_WIFICHANNELS_H diff --git a/sensors/radio/scan/WiFiRAW.h b/sensors/radio/scan/WiFiRAW.h index fd9313d..acd416d 100644 --- a/sensors/radio/scan/WiFiRAW.h +++ b/sensors/radio/scan/WiFiRAW.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_WIFIRAW_H #define INDOOR_WIFIRAW_H diff --git a/sensors/radio/scan/WiFiScan.h b/sensors/radio/scan/WiFiScan.h index 5f39105..a2051dd 100644 --- a/sensors/radio/scan/WiFiScan.h +++ b/sensors/radio/scan/WiFiScan.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef INDOOR_WIFI_SCAN_H #define INDOOR_WIFI_SCAN_H diff --git a/sensors/radio/setup/WiFiFingerprint.h b/sensors/radio/setup/WiFiFingerprint.h index b380faf..df9daff 100644 --- a/sensors/radio/setup/WiFiFingerprint.h +++ b/sensors/radio/setup/WiFiFingerprint.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIFINGERPRINT_H #define WIFIFINGERPRINT_H diff --git a/sensors/radio/setup/WiFiFingerprints.h b/sensors/radio/setup/WiFiFingerprints.h index 7d27f70..6787908 100644 --- a/sensors/radio/setup/WiFiFingerprints.h +++ b/sensors/radio/setup/WiFiFingerprints.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIFINGERPRINTS_H #define WIFIFINGERPRINTS_H diff --git a/sensors/radio/setup/WiFiOptimizer.h b/sensors/radio/setup/WiFiOptimizer.h index 97ace2f..0ccddc5 100644 --- a/sensors/radio/setup/WiFiOptimizer.h +++ b/sensors/radio/setup/WiFiOptimizer.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIOPTIMIZER_H #define WIFIOPTIMIZER_H diff --git a/sensors/radio/setup/WiFiOptimizerLogDistCeiling.h b/sensors/radio/setup/WiFiOptimizerLogDistCeiling.h index 1f880b1..c4aa812 100644 --- a/sensors/radio/setup/WiFiOptimizerLogDistCeiling.h +++ b/sensors/radio/setup/WiFiOptimizerLogDistCeiling.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFI_OPTIMIZER_LOG_DIST_CEILING_H #define WIFI_OPTIMIZER_LOG_DIST_CEILING_H diff --git a/sensors/radio/setup/WiFiOptimizerPerFloor.h b/sensors/radio/setup/WiFiOptimizerPerFloor.h index c326850..31f7fb1 100644 --- a/sensors/radio/setup/WiFiOptimizerPerFloor.h +++ b/sensors/radio/setup/WiFiOptimizerPerFloor.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIOPTIMIZERPERFLOOR_H #define WIFIOPTIMIZERPERFLOOR_H diff --git a/sensors/radio/setup/WiFiOptimizerStructs.h b/sensors/radio/setup/WiFiOptimizerStructs.h index 63faac3..12700d6 100644 --- a/sensors/radio/setup/WiFiOptimizerStructs.h +++ b/sensors/radio/setup/WiFiOptimizerStructs.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef WIFIOPTIMIZERSTRUCTS_H #define WIFIOPTIMIZERSTRUCTS_H From 63bc8131ac2f8f89bb3f7b6b8e38167deea76186 Mon Sep 17 00:00:00 2001 From: kazu Date: Thu, 25 Oct 2018 11:59:10 +0200 Subject: [PATCH 6/6] changes --- geo/BBoxes3.h | 10 ++++++++++ geo/Circle2.h | 10 ++++++++++ geo/ConvexHull2.h | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/geo/BBoxes3.h b/geo/BBoxes3.h index b870861..f3914b3 100644 --- a/geo/BBoxes3.h +++ b/geo/BBoxes3.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef BBOXES3_H #define BBOXES3_H diff --git a/geo/Circle2.h b/geo/Circle2.h index e335fb8..a05a956 100644 --- a/geo/Circle2.h +++ b/geo/Circle2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef CIRCLE2_H #define CIRCLE2_H diff --git a/geo/ConvexHull2.h b/geo/ConvexHull2.h index 85c584a..1ac251b 100644 --- a/geo/ConvexHull2.h +++ b/geo/ConvexHull2.h @@ -1,3 +1,13 @@ +/* + * © Copyright 2014 – Urheberrechtshinweis + * Alle Rechte vorbehalten / All Rights Reserved + * + * Programmcode ist urheberrechtlich geschuetzt. + * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. + * Keine Verwendung ohne explizite Genehmigung. + * (vgl. § 106 ff UrhG / § 97 UrhG) + */ + #ifndef GEO_CONVEXHULL2_H #define GEO_CONVEXHULL2_H