加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 是否有一个函数可以将圆的度数移过0?

发布时间:2020-12-15 09:49:59 所属栏目:大数据 来源:网络整理
导读:我正在寻找Delphi XE2中某个类似于Inc()的函数,它允许我从当前的度数加上/减去多个度数并产生新的度数.例如,如果我的圆周围有一个点为5度,我想减去10,我不应该得到-5度,而是355(360 – 5).与添加过去360相同 – 它应该在达到360时返回到0. 在Delphi中是否有
我正在寻找Delphi XE2中某个类似于Inc()的函数,它允许我从当前的度数加上/减去多个度数并产生新的度数.例如,如果我的圆周围有一个点为5度,我想减去10,我不应该得到-5度,而是355(360 – 5).与添加过去360相同 – 它应该在达到360时返回到0.

在Delphi中是否有这样的东西,所以我不必重写它?也许在数学单元?

解决方法

uses
  System.SysUtils,Math;

Function WrapAngle( angle : Double) : Double;
Const
  modAngle : Double = 360.0;
begin
  Result := angle - modAngle*Floor(angle/modAngle);
end;

begin
  WriteLn(FloatToStr(WrapAngle(-5)));
  WriteLn(FloatToStr(WrapAngle(5-720)));
  WriteLn(FloatToStr(WrapAngle(360)));
  ReadLn;    
end.

产生结果:

355
5 
0

更新:

正如@Giel发现的那样,在XE3中有一个新功能DegNormalize()可以完成这项工作.甚至快25%左右.诀窍是用Int()替换Floor()调用,如果结果为负,则将modAngle添加到结果中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读