typedef struct
{
int16_t X;
int16_t Y;
}Point, * pPoint;
Точка:
Point RotatePoint(Point Coord, Point Coord0, float32_t angle){ //angle max is 2pi rad
static float32_t cosV;
static float32_t sinV;
static float32_t Xo;
static float32_t Yo;
static float32_t X;
static float32_t Y;
// angle*= 0.017453292f;
cosV = arm_cos_f32(angle);
sinV = arm_sin_f32(angle);
X = (float32_t)Coord.X;
Y = (float32_t)Coord.Y;
Xo = (float32_t)Coord0.X;
Yo = (float32_t)Coord0.Y;
Coord.X = (uint16_t)(Xo + (((X - Xo)*cosV)) + (((Yo - Y)*sinV))+0.5);
Coord.Y = (uint16_t)(Yo + (((X - Xo)*sinV)) + (((Y - Yo)*cosV))+0.5);
return Coord;
}
Полигон поворот положительные градусы = по часовой стрелке (координата Y - сверху вниз, X - слева направо) в (0.001 * angle_deg) градусах:
void RotatePoly(Point* pToPoints, uint8_t NumbOfPoints, const pPoint Origin, int32_t angle_deg){
int i;
float32_t angle = 1.7453292e-5 * (float32_t)angle_deg;
for(i = 0; i < NumbOfPoints; i++){
pToPoints[i] = RotatePoint(pToPoints[i], *Origin, angle);
}
}
