GY-63_MS5611/libraries/DistanceTable
2021-12-17 10:50:55 +01:00
..
.github/workflows 0.2.1 DistanceTable 2021-10-26 12:22:01 +02:00
documents 2021-01-29 2021-01-29 12:31:58 +01:00
examples/distanceTable 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
test 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
.arduino-ci.yml 0.2.1 DistanceTable 2021-10-26 12:22:01 +02:00
DistanceTable.cpp 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
DistanceTable.h 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
keywords.txt 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
library.json 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
library.properties 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
LICENSE 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00
readme.md 0.2.2 DistanceTable 2021-12-17 10:50:55 +01:00

Arduino CI Arduino-lint JSON check License: MIT GitHub release

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.

Operational

See examples.

Future

  • improve documentation
  • clear() could set all to NAN? is that better as it indicates unknown?
    • setAll() let the user decide.
  • would DT(x,y) == -DT(y,x) a special case? (for all xy pairs) interesting!!
    • e.g. difference in height?
    • game with transactions between players?
    • it would become a magnitude symmetrical distance table
  • countAbove(float value) no epsilon needed
  • add examples
    • Note: table can be used for other symmetrical 2D tables.
    • And therefore include negative values.
  • derived or related classes
    • int64_t int32_t int16_t int8_t + unsigned variants. (8 variations?)
    • Template class?
  • sum of all distances?
  • Hamilton paths?
  • idea for very sparse matrix? array of struct (x,y,value);