mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
73 lines
2.4 KiB
Markdown
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.
|
|
|