mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
2.9 KiB
2.9 KiB
Distancetable
Arduino library to store a symmetrical distance table in less memory.
Description
The DistanceTable library is a class that stores a symmetrical distance table which is typically N x N entries in less memory space. It uses (N x (N-1))/2 ("in a triangle") as an euclidean distance table is symmetrical around its main diagonal. Furthermore as the main diagonal are all zero it does not need to be stored either.
An ATMEL328 (Arduino) can store a 30 x 30 matrix = 900 floats in 1740 bytes, where it typically would take 900 x 4 = 3600 bytes.
Within the 2K RAM of an Arduino one could store normally a 21 x 21 matrix (1764 bytes).
Interface
- DistanceTable(uint8_t size, float value = 0.0) Constructor, allocates memory and sets initial value to all elements.
- ~DistanceTable(); Destructor, frees memory
- void clear() sets all entries to 0.0.
- void setAll(float value) sets all entries to value;
- void set(uint8_t x, uint8_t y, float value ) sets a value for (x,y) and automatically for (y, x)
- float get(uint8_t x, uint8_t y) gets a value from (x,y). If x == y it will return 0.
- float minimum(uint8_t &x, uint8_t &y) Returns minimum and first occurrence in x and y. It does skip x == y pairs as these are 0.
- float maximum(uint8_t &x, uint8_t &y) Returns maximum and first occurrence in x and y. It does skip x == y pairs as these are 0.
- uint16_t count(value, epsilon) counts the number of occurrences of value. As we are comparing floats the epsilon can set a margin for 'almost equal'.
Debug
- void dump(Print * stream = &Serial) dumps distance table , default to serial.
- uint8_t dimension() dimension of the table == parameter in constructor.
- uint16_t elements() amount of elements allocated.
- uint16_t memoryUsed() amount of memory used.
Future
- clear() could set all to NAN? is that better as it indicates unknown?
setAll() let the user decide.
Note: table can be used for other symmetrical 2D tables. And therefore include negative values.
Operational
See examples.