Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Cinder.h"
00026 #include "cinder/app/Event.h"
00027 #include "cinder/Vector.h"
00028 #include "cinder/Quaternion.h"
00029
00030 namespace cinder { namespace app {
00031
00033 class AccelEvent : public Event {
00034 public:
00035 AccelEvent( const Vec3f &data, const Vec3f &rawData, const Vec3f &prevData, const Vec3f &prevRawData )
00036 : Event(), mData( data ), mRawData( rawData ), mPrevData( prevData ), mPrevRawData( prevRawData )
00037 {
00038 }
00039
00041 Vec3f getData() const { return mData; }
00043 Vec3f getRawData() const { return mRawData; }
00045 Vec3f getPrevData() const { return mPrevData; }
00047 Vec3f getPrevRawData() const { return mPrevRawData; }
00048
00050 bool isShake( float shakeDelta = 2.2f ) const
00051 { return (mRawData - mPrevRawData).lengthSquared() > shakeDelta * shakeDelta; }
00052
00053 Vec2f getPolarPlaneVector() const
00054 {
00055 float r = math<float>::sin( M_PI*(mData.z+1) / 2 );
00056 float theta = toDegrees( math<float>::asin( mData.y / math<float>::sqrt( mData.x*mData.x + mData.y*mData.y )) );
00057
00058 if( mData.x < 0 ) {
00059 theta = -theta + 180.0f;
00060 }
00061 else {
00062 if( mData.y < 0 ) {
00063 theta = theta + 360.0f;
00064 }
00065 }
00066
00067 return Vec2f( r, theta );
00068 }
00069
00070 Vec2f getPlaneVector() const
00071 {
00072 Vec2f v = getPolarPlaneVector();
00073 return Vec2f( -v.x * math<float>::cos( toRadians( v.y ) ), v.x * math<float>::sin( toRadians( v.y ) ) );
00074 }
00075
00077 Matrix44f getMatrix() const
00078 {
00079 return Quatf( Vec3f( 0, -1, 0 ), mData.normalized() ).toMatrix44();
00080 }
00081
00082 private:
00083 Vec3f mData, mPrevData;
00084 Vec3f mRawData, mPrevRawData;
00085 };
00086
00087
00088 inline std::ostream& operator<<( std::ostream &out, const AccelEvent &event )
00089 {
00090 out << event.getData() << " raw: " << event.getRawData();
00091 return out;
00092 }
00093
00094
00095 } }