GY-63_MS5611/libraries/DistanceTable/readme.md
2021-10-26 12:22:01 +02:00

2.9 KiB

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.

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.