GY-63_MS5611/libraries/ellipse/README.md
2022-11-02 20:25:44 +01:00

73 lines
2.4 KiB
Markdown

[![Arduino CI](https://github.com/RobTillaart/ellipse/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
[![Arduino-lint](https://github.com/RobTillaart/ellipse/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/ellipse/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/ellipse/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/ellipse/actions/workflows/jsoncheck.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/ellipse/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/ellipse.svg?maxAge=3600)](https://github.com/RobTillaart/ellipse/releases)
# ellipse
Arduino library with ellipse math
## Description
This experimental library provides basic ellipse math.
It was written to test different perimeter algorithms.
Trigger was a video of Dr. Matt Parker.
https://www.youtube.com/watch?v=5nW3nJhBHL0
## Interface
- **ellipse(float a, float b)** constructor, a >= b
- **float area()** returns the area of the ellipse.
- **float circumference()** good algorithm (= Ramanujan 1).
- **float eccentricity()** return the eccentricity e.
This is an indication of flatness of the ellipse. 0 is a circle 1 is flat line.
- **void setA(float a)** change the long radius.
- **void setB(float b)** change the short radius.
- **float getA()** return long radius of the ellipse.
- **float getB()** return short radius of the ellipse.
- **float getC()** distance to focus point form centre along the longer axis.
#### Perimeter algorithms
- **float perimeter_ref()** slower but best known algorithm (Ramanujan 2)
- **float perimeter_Keppler()** good and fast algorithm for eccentricity between 1 and 2.
- **float perimeter_Ramanujan1()** good algorithm.
- **float perimeter_Ramanujan2()** slow but best known algorithm.
See performance example for differences in timing.
#### Misc
- **bool isCircle(float epsilon = 0.0)** | a - b | < eps.
- **bool isFlat()** true if a > 4b, where a = longest radius.
#### Experimental
- **float angle()** returns the angle if the ellipse was the
shadow of a circle, Returns 0..90°, 0° == circle, 90° == line.
## Operation
See examples.
## Future
- make constructor symmetric (a < b or a > b ==> all possible.
- make other code symmetric.
- additional functions
- Bresenham to draw ellipse?
- documentation
- refer Wikipedia.