我有兩個函數用於包含(-180,180]和(-π,π]之間的角度,目的是給定從-inf到+ inf的任何角度,它將保留。指定的時間間隔相等的角度。例如1550°的角度是110°Math.Round()的不一致性()
public double WrapBetween180(double angle)
{
return angle - 360d * Math.Round(angle/360d, MidpointRounding.AwayFromZero);
}
public double WrapBetweenPI(double angle)
{
const double twopi = 2d * Math.PI;
return angle - twopi * Math.Round(angle/twopi, MidpointRounding.AwayFromZero);
}
這將產生以下結果
WrapBetween180(-180) = -180
WrapBetween180(180) = 180
WrapBetweenPI(-Math.PI) = Math.PI
WrapBetweenPI(Math.PI) = -Math.PI
其中沒有一個是我要的是什麼,我想是:
WrapBetween180(-180) = 180
WrapBetween180(180) = 180
WrapBetweenPI(-Math.PI) = Math.PI
WrapBetweenPI(Math.PI) = Math.PI
我嘗試了四捨五入的方法,但仍然無法獲得理想的效果。問題是顯而易見的,因爲有時候我處理的角度只能近似於-π或π,而我的結果會導致不連續性。
關於如何最佳地實現角度環繞功能以及非包含下限和包含上限的任何建議?
每雙應該是π是「只有大約接近π」 :-) –
這些是什麼方法,怎麼辦呢?我看不到它的目的... –
你是說你真的想要Math.Abs(value1)的回報; 其中value1是您當前功能的結果? –