00001
00021
00022
00023
00024
00025 #ifndef __SYNFIG_STUDIO_DUCK_TRANSFORM_ROTATE_H
00026 #define __SYNFIG_STUDIO_DUCK_TRANSFORM_ROTATE_H
00027
00028
00029
00030 #include "duckmatic.h"
00031 #include <synfig/angle.h>
00032
00033
00034
00035
00036
00037
00038
00039 namespace studio {
00040
00041 class Transform_Rotate : public synfig::Transform
00042 {
00043 private:
00044 synfig::Angle angle;
00045 synfig::Vector origin;
00046 synfig::Real sin_val;
00047 synfig::Real cos_val;
00048
00049 public:
00050 Transform_Rotate(const synfig::GUID& guid, const synfig::Angle& angle,const synfig::Vector& origin=synfig::Vector(0,0)):
00051 Transform(guid),
00052 angle(angle),
00053 origin(origin),
00054 sin_val(synfig::Angle::sin(angle).get()),
00055 cos_val(synfig::Angle::cos(angle).get())
00056 {
00057 }
00058
00059 synfig::Vector perform(const synfig::Vector& x)const
00060 {
00061 synfig::Point pos(x-origin);
00062 return synfig::Point(cos_val*pos[0]-sin_val*pos[1],sin_val*pos[0]+cos_val*pos[1])+origin;
00063 }
00064 synfig::Vector unperform(const synfig::Vector& x)const
00065 {
00066 synfig::Point pos(x-origin);
00067 return synfig::Point(cos_val*pos[0]+sin_val*pos[1],-sin_val*pos[0]+cos_val*pos[1])+origin;
00068 }
00069 };
00070
00071 };
00072
00073
00074
00075 #endif