// This file is part of FexTracker and (C) 2006 by Hajo Krabbenhöft (tentacle) // All rights reserved but the aegisub project is allowed to use it. // FexTrackerMovement.cpp // #include "StdAfx.h" #include "stdio.h" void FexTracker::InfluenceFeatures( int Frame, float x, float y, float off ) { for( int i=0;i1 ) lFeatures[i].Influence = 1; } } #define VEC2LEN(a) sqrtf( (a).x*(a).x+(a).y*(a).y ) FexMovement* FexTracker::GetMovement() { FILE *log = fopen( "movementlog.txt", "wt" ); int i; for( i=0;i0.01 ) fprintf( log, "Feature(%.2f): %d - %d\n", lFeatures[i].Influence, lFeatures[i].StartTime, lFeatures[i].StartTime+lFeatures[i].Pos.size() ); } FexMovement *m = new FexMovement(); FexMovementFrame f; float FirstInfluenceSum = 0; vec2 FirstPos; FirstPos.x = FirstPos.y = 0; for( i=0;i MidOffLen /= FirstLen; MidOffset[i].x /= FirstLen; MidOffset[i].y /= FirstLen; MidOffsetLen[i] = VEC2LEN( MidOffset[i] ); } } //accumulate position float NextLen = 0; float NextInfluenceSum = 0; vec2 NextPos; NextPos.x = NextPos.y = 0; for( i=0;i 0.01 ) { NextPos.x /= NextInfluenceSum; NextPos.y /= NextInfluenceSum; } else NextPos = FirstPos; //take over last one for( i=0;i 0.01 ) { NextLen /= NextInfluenceSum; } else NextLen = FirstLen; //take over last one f.Pos = NextPos; f.Rot.x = 0; f.Rot.y = 0; f.Rot.z = 0; f.Scale.x = NextLen; f.Scale.y = NextLen; m->Frames.Add( f ); FirstPos = NextPos; FirstLen = NextLen; } delete []MidOffset; delete []MidOffsetLen; fclose( log ); return m; }