From 35ec5d3614fc67cb13acb1bf1b1d9556cf8c32ab Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Sun, 22 Dec 2019 14:16:10 +0100 Subject: [PATCH] Fix sin and cos handling for negative degrees --- fractional/src/trigonometry.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fractional/src/trigonometry.rs b/fractional/src/trigonometry.rs index 580bcfd..f43ed38 100644 --- a/fractional/src/trigonometry.rs +++ b/fractional/src/trigonometry.rs @@ -45,7 +45,9 @@ pub trait Trig { 91 ..=180 => Self::sintab()[180 - d as usize], 181..=270 => -Self::sintab()[d as usize - 180], 271..=359 => -Self::sintab()[360 - d as usize], - _ => Self::sin(d % 360), + _ => { + Self::sin(if d < 0 { d % 360 + 360 } else { d % 360 }) + }, } } @@ -56,7 +58,9 @@ pub trait Trig { 91 ..=180 => -Self::sintab()[90 - (180 - d as usize)], 181..=270 => -Self::sintab()[90 - (d as usize - 180)], 271..=359 => Self::sintab()[90 - (360 - d as usize)], - _ => Self::cos(d % 360), + _ => { + Self::cos(if d < 0 { d % 360 + 360 } else { d % 360 }) + }, } } @@ -64,7 +68,9 @@ pub trait Trig { match d { 0 ..=179 => Self::tantab()[d as usize], 180..=359 => Self::tantab()[d as usize - 180], - _ => Self::tan(d % 360), + _ => { + Self::tan(if d < 0 { d % 360 + 360 } else { d % 360 }) + }, } } }