0.2.1 AngleConvertor

This commit is contained in:
Rob Tillaart 2024-01-25 15:11:14 +01:00
parent 427b1efbbe
commit 7225a83850
8 changed files with 119 additions and 31 deletions

View File

@ -2,7 +2,7 @@
//
// FILE: AngleConvertor.h
// AUTHOR: Rob Tillaart
// VERSION: 0.2.0
// VERSION: 0.2.1
// DATE: 2022-12-01
// PURPOSE: Angle conversion class
// URL: https://github.com/RobTillaart/AngleConvertor
@ -11,7 +11,7 @@
#include "Arduino.h"
#define ANGLECONVERTOR_LIB_VERSION (F("0.2.0"))
#define ANGLECONVERTOR_LIB_VERSION (F("0.2.1"))
/////////////////////////////////////////////////////////////
@ -33,11 +33,13 @@ public:
void setDiameterPart(double value = 0) { _v = value * (180.0 / 60.0); };
void setHexacontade(double value = 0) { _v = value * (180.0 / 30.0); };
void setHourAngle(double value = 0) { _v = value * (180.0 / 12.0); };
void setMilliRadians(double value = 0) { _v = value * (180.0 / (M_PI * 1000.0)); };
void setMilliTurn(double value = 0) { _v = value * (180.0 / 500.0); };
void setMinuteTime(double value = 0) { _v = value * (180.0 / 720.0); };
void setOctant(double value = 0) { _v = value * (180.0 / 4.0); };
void setPechus(double value = 0) { _v = value * (180.0 / 90.0); }; // assumes 2°
void setPercent(double value = 0) { _v = value * (180.0 / 50.0); }; // equals centiTurn..
void setPoints(double value = 0) { _v = value * (180.0 / 16.0); };
void setQuadrant(double value = 0) { _v = value * (180.0 / 2.0); };
void setQuarterPoint(double value = 0) { _v = value * (180.0 / 64.0); };
@ -57,11 +59,13 @@ public:
double getDiameterPart() { return _v * (60.0 / 180.0); };
double getHexacontade() { return _v * (30.0 / 180.0); };
double getHourAngle() { return _v * (12.0 / 180.0); };
double getMilliRadians() { return _v * (M_PI * 1000.0 / 180.0); };
double getMilliTurn() { return _v * (500.0 / 180.0); };
double getMinuteTime() { return _v * (720.0 / 180.0); };
double getOctant() { return _v * (4.0 / 180.0); };
double getPechus() { return _v * (90.0 / 180.0); }; // assumes 2°
double getPercent() { return _v * (50.0 / 180.0); }
double getPoints() { return _v * (16.0 / 180.0); };
double getQuadrant() { return _v * (2.0 / 180.0); };
double getQuarterPoint() { return _v * (64.0 / 180.0); };

View File

@ -1,4 +1,4 @@
# Change Log Angle
# Change Log AngleConvertor
All notable changes to this project will be documented in this file.
@ -6,6 +6,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.2.1] - 2024-01-24
- add percent as unit
- add milliRadians as unit
- add unit tests for windrose()
## [0.2.0] - 2024-01-15
- Fix #4, use **degrees** as internal format to improve precision (a bit)

View File

@ -27,10 +27,10 @@ can gain extra precision.
#### Formats
| name | full circle |
|:----------------|--------------:|
| name | full circle | notes |
|:----------------|--------------:|:--------|
| Degrees | 360 |
| Radians | 2 PI |
| Radians | 2 PI | 2PI is aka MU
| Gradians | 400 |
| AngularMil | 6400 |
| BinaryRadians | 256 |
@ -38,10 +38,12 @@ can gain extra precision.
| DiameterPart | 120 |
| Hexacontade | 60 |
| HourAngle | 24 |
| MilliRadians | 2000 PI |
| MilliTurn | 1000 |
| MinuteTime | 1440 |
| Octant | 8 |
| Pechus | 180 |
| Percent | 100 | equals CentiTurn.
| Points | 32 |
| Quadrant | 4 |
| QuarterPoint | 128 |
@ -82,10 +84,12 @@ can gain extra precision.
- **void setDiameterPart(double value = 0)**
- **void setHexacontade(double value = 0)**
- **void setHourAngle(double value = 0)**
- **void setMilliRadians(double value = 0)**
- **void setMilliTurn(double value = 0)**
- **void setMinuteTime(double value = 0)**
- **void setOctant(double value = 0)**
- **void setPechus(double value = 0)**
- **void setPercent(double value = 0)**
- **void setPoints(double value = 0)**
- **void setQuadrant(double value = 0)**
- **void setQuarterPoint(double value = 0)**
@ -106,10 +110,12 @@ can gain extra precision.
- **double getDiameterPart()**
- **double getHexacontade()**
- **double getHourAngle()**
- **double getMilliRadians()**
- **double getMilliTurn()**
- **double getMinuteTime()**
- **double getOctant()**
- **double getPechus()**
- **double getPercent()**
- **double getPoints()**
- **double getQuadrant()**
- **double getQuarterPoint()**

View File

@ -16,16 +16,20 @@ AngleConvertor conv;
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println(__FILE__);
Serial.print("lib version: ");
Serial.print("ANGLECONVERTOR_LIB_VERSION: ");
Serial.println(ANGLECONVERTOR_LIB_VERSION);
Serial.println();
// if double = 8 bytes adjust #decimals
uint8_t decimals = 7;
if (sizeof(double) == 8) decimals = 15;
uint8_t decimals = 6;
if (sizeof(double) == 8) decimals = 12;
// Serial.println("UNIT \tDEGREES \tRADIANS \tUNIT");
conv.setDegrees(1.0);
Serial.print("Degrees \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -33,6 +37,7 @@ void setup()
Serial.println(conv.getDegrees(), decimals);
conv.setRadians(1.0);
Serial.print("Radians \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -40,6 +45,7 @@ void setup()
Serial.println(conv.getRadians(), decimals);
conv.setGradians(1.0);
Serial.print("Gradians\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -47,6 +53,7 @@ void setup()
Serial.println(conv.getGradians(), decimals);
conv.setAngularMil(1.0);
Serial.print("AngularMil\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -54,6 +61,7 @@ void setup()
Serial.println(conv.getAngularMil(), decimals);
conv.setBinaryRadians(1.0);
Serial.print("BinaryRadians\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -61,6 +69,7 @@ void setup()
Serial.println(conv.getBinaryRadians(), decimals);
conv.setCentiTurn(1.0);
Serial.print("CentiTurn\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -68,6 +77,7 @@ void setup()
Serial.println(conv.getCentiTurn(), decimals);
conv.setDiameterPart(1.0);
Serial.print("DiameterPart\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -75,6 +85,7 @@ void setup()
Serial.println(conv.getDiameterPart(), decimals);
conv.setHexacontade(1.0);
Serial.print("Hexacontade\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -82,13 +93,23 @@ void setup()
Serial.println(conv.getHexacontade(), decimals);
conv.setHourAngle(1.0);
Serial.print("HourAngle\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
Serial.print("\t");
Serial.println(conv.getHourAngle(), decimals);
conv.setMilliRadians(1.0);
Serial.print("MilliRadians\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
Serial.print("\t");
Serial.println(conv.getMilliRadians(), decimals);
conv.setMilliTurn(1.0);
Serial.print("MilliTurn\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -96,6 +117,7 @@ void setup()
Serial.println(conv.getMilliTurn(), decimals);
conv.setMinuteTime(1.0);
Serial.print("MinuteTime\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -103,6 +125,7 @@ void setup()
Serial.println(conv.getMinuteTime(), decimals);
conv.setOctant(1.0);
Serial.print("Octant \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -110,13 +133,23 @@ void setup()
Serial.println(conv.getOctant(), decimals);
conv.setPechus(1.0);
Serial.print("Pechus \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
Serial.print("\t");
Serial.println(conv.getPechus(), decimals);
conv.setPercent(1.0);
Serial.print("Percent \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
Serial.print("\t");
Serial.println(conv.getPercent(), decimals);
conv.setPoints(1.0);
Serial.print("Points \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -124,6 +157,7 @@ void setup()
Serial.println(conv.getPoints(), decimals);
conv.setQuadrant(1.0);
Serial.print("Quadrant\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -131,6 +165,7 @@ void setup()
Serial.println(conv.getQuadrant(), decimals);
conv.setQuarterPoint(1.0);
Serial.print("QuarterPoint\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -138,6 +173,7 @@ void setup()
Serial.println(conv.getQuarterPoint(), decimals);
conv.setSecondsTime(1.0);
Serial.print("SecondsTime\t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -145,6 +181,7 @@ void setup()
Serial.println(conv.getSecondsTime(), decimals);
conv.setSextant(1.0);
Serial.print("Sextant \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -152,6 +189,7 @@ void setup()
Serial.println(conv.getSextant(), decimals);
conv.setSign(1.0);
Serial.print("Sign \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);
@ -159,6 +197,7 @@ void setup()
Serial.println(conv.getSign(), decimals);
conv.setTurn(1.0);
Serial.print("Turn \t");
Serial.print(conv.getDegrees(), decimals);
Serial.print("\t");
Serial.print(conv.getRadians(), decimals);

View File

@ -17,10 +17,12 @@ setCentiTurn KEYWORD2
setDiameterPart KEYWORD2
setHexacontade KEYWORD2
setHourAngle KEYWORD2
setMilliRadians KEYWORD2
setMilliTurn KEYWORD2
setMinuteTime KEYWORD2
setOctant KEYWORD2
setPechus KEYWORD2
setPercent KEYWORD2
setPoints KEYWORD2
setQuadrant KEYWORD2
setQuarterPoint KEYWORD2
@ -41,10 +43,12 @@ getCentiTurn KEYWORD2
getDiameterPart KEYWORD2
getHexacontade KEYWORD2
getHourAngle KEYWORD2
getMilliRadians KEYWORD2
getMilliTurn KEYWORD2
getMinuteTime KEYWORD2
getOctant KEYWORD2
getPechus KEYWORD2
getPercent KEYWORD2
getPoints KEYWORD2
getQuadrant KEYWORD2
getQuarterPoint KEYWORD2

View File

@ -15,7 +15,7 @@
"type": "git",
"url": "https://github.com/RobTillaart/AngleConvertor.git"
},
"version": "0.2.0",
"version": "0.2.1",
"license": "MIT",
"frameworks": "*",
"platforms": "*",

View File

@ -1,5 +1,5 @@
name=AngleConvertor
version=0.2.0
version=0.2.1
author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Library to convert between different less known angle formats.

View File

@ -79,6 +79,9 @@ unittest(test_conversions)
conv.setHourAngle(1.0);
assertEqualFloat(1.0, conv.getHourAngle(), 0.00001);
conv.setMilliRadians(1.0);
assertEqualFloat(1.0, conv.getMilliRadians(), 0.00001);
conv.setMilliTurn(1.0);
assertEqualFloat(1.0, conv.getMilliTurn(), 0.00001);
@ -91,6 +94,9 @@ unittest(test_conversions)
conv.setPechus(1.0);
assertEqualFloat(1.0, conv.getPechus(), 0.00001);
conv.setPercent(1.0);
assertEqualFloat(1.0, conv.getPercent(), 0.00001);
conv.setPoints(1.0);
assertEqualFloat(1.0, conv.getPoints(), 0.00001);
@ -114,6 +120,30 @@ unittest(test_conversions)
}
unittest(test_wind_rose)
{
AngleConvertor conv;
assertEqual(conv.windrose( 00.0), "N");
assertEqual(conv.windrose( 22.5), "NNE");
assertEqual(conv.windrose( 45.0), "NE");
assertEqual(conv.windrose( 67.5), "ENE");
assertEqual(conv.windrose( 90.0), "E");
assertEqual(conv.windrose(112.5), "ESE");
assertEqual(conv.windrose(135.0), "SE");
assertEqual(conv.windrose(157.5), "SSE");
assertEqual(conv.windrose(180.0), "S");
assertEqual(conv.windrose(202.5), "SSW");
assertEqual(conv.windrose(225.0), "SW");
assertEqual(conv.windrose(247.5), "WSW");
assertEqual(conv.windrose(270.0), "W");
assertEqual(conv.windrose(292.5), "WNW");
assertEqual(conv.windrose(315.0), "NW");
assertEqual(conv.windrose(337.5), "NNW");
assertEqual(conv.windrose(360.0), "N");
}
unittest_main()