Files
Colibri/utils/move.cpp
Dana Markova 748830dfb7 add firmware
2025-07-28 12:43:33 +03:00

103 lines
1.9 KiB
C++

#include "move.h"
#include <math.h>
#include "quat.h"
static const float PI = 3.14159265359f;
static const float TO_DEG = 180.0f/PI;
static const float TO_RAD = PI/180.0f;
Vec3 Motion(Vec3 vec, bool move, float dx, float dy, float range, unsigned long time)
{
//static float move_x=0, move_y=0;
//static float move_tof_x=0, move_tof_y=0;
//static float move_flo_x=0, move_flo_y=0;
/*static long timer=0;
timer++;
if(timer>1000)
{
move_flo_x=move_flo_y=move_tof_x=move_tof_y=0;
move_x=0; move_y=0;
timer=0;
}*/
//if(!move) return {0,0,0};
static float len, high;
high = range * vec.z; // cos(Z)
len = range * sqrtf(1-vec.z*vec.z); // sin(Z)
static float a_x=0, a_y=0;
a_x=0, a_y=0;
static float v_x, v_y;
static float angle_shift=600;
if(move)
{
a_x = (v_x-vec.x)*angle_shift;
a_y = (v_y-vec.y)*angle_shift;
}
v_x=vec.x;
v_y=vec.y;
static Vec3 v;
float x=(dx+a_x), y=(dy-a_y);
static float fx=0, fy=0;
//fx=(fx*3+x)/4;
//fy=(fy*3+y)/4;
return {x, y, high};
//v = RotateToZ({dx-a_x, dy-a_y, 0});
//v = RotateToZ({(dx+a_x)*(range/1000.0f), (dy-a_y)*(range/1000.0f), 0}, true);
//v = RotateToZ({1000, 0, 0}, true);
//v = RotateToZ({(dx+a_x)*(range/1000.0f), 0, 0}, true);
//v={dx+a_x, dy-a_y, 0};
//move_x-=v.x;
//move_y-=v.y;
//move_flo_x+=dx;
//move_flo_y+=dy;
//move_tof_x+=(float)a_x;
//move_tof_y+=(float)a_y;
return v;
}
/*void Motion(Vec3 vec, short dx, short dy, float range, unsigned long time)
{
static long move_x=0, move_y=0;
move_x+=dx;
move_y+=dy;
static float len, high;
high = range * vec.z; // cos(Z)
len = range * sqrtf(1-vec.z*vec.z); // sin(Z)
static float a_x, a_y;
a_x = range * vec.x;
a_y = -range * vec.y;
static float m_x, m_y;
m_x=move_x+a_x;
m_y=move_y+a_y;
}*/