project for a (works on my devices) demo

This commit is contained in:
beno
2026-03-13 16:48:03 +01:00
parent 0c0b42fbd0
commit 7ca7ec5d61
38 changed files with 4797 additions and 62 deletions

View File

@@ -0,0 +1,81 @@
#include "../../../headers/input/touch/touch_controller_L2.h"
#include <stdlib.h>
#include <math.h>
/* ...but the compiler throws an error, so math.h does not really define it */
/* aarch64-linux-gnu/include/math.h already defines it */
#ifndef M_PI
#define M_PI 3.14159265358979323846264338327950288
#endif
touch_coordinates* TC_L2_getAABB( touch_event **events, uint8_t count){
touch_coordinates* AABB = malloc( 2 * sizeof(touch_coordinates));
uint8_t minX = UINT8_MAX;
uint8_t maxX = 0;
uint8_t minY = UINT8_MAX;
uint8_t maxY = 0;
touch_event *current;
for( uint8_t i = 0; i < count; i++){
current = events[i];
if( minX > current->position.x)
minX = current->position.x;
if( maxX < current->position.x)
maxX = current->position.x;
if( minY > current->position.y)
minY = current->position.y;
if( maxY < current->position.y)
maxY = current->position.y;
}
AABB[0].x = minX;
AABB[0].y = minY;
AABB[1].x = maxX;
AABB[1].y = maxY;
return AABB;
}
float TC_L2_get_width( touch_event **events, uint8_t count){
touch_coordinates* AABB = TC_L2_getAABB( events, count);
uint16_t dx = AABB[0].x - AABB[1].x;
uint16_t dy = AABB[0].y - AABB[1].y;
float width = sqrtf( powf( dx, 2) + powf( dy, 2));
free( AABB);
return width;
}
float TC_L2_get_angle( touch_event **events, uint8_t count){
touch_coordinates* AABB = TC_L2_getAABB( events, count);
uint16_t dx = AABB[0].x - AABB[1].x;
uint16_t dy = AABB[0].y - AABB[1].y;
free( AABB);
return atan2f(dx, dy) * 180 / M_PI;
}
touch_coordinates* TC_L2_get_midpoint( touch_event **events, uint8_t count){
uint32_t sum_x;
uint32_t sum_y;
if( !count){
return NULL;
}
for( uint8_t i = 0; i < count; i++){
sum_x += events[i]->position.x;
sum_y += events[i]->position.y;
}
touch_coordinates *mid = malloc( sizeof( touch_coordinates));
mid->x = sum_x / count;
mid->y = sum_y / count;
return mid;
}