三角函数的局限和改进思路
创始人
2025-05-31 06:36:16
0

1. 三角函数的局限

1.1 三角函数概算
三角函数(trigonometric function)是从直角三角形发展起来的一种角度和边的对应关系。常见的三角函数有sin、cos、tan三个函数,反三角函数有arcsin、arccos、arctan三个反三角函数(反三角函数也有写为sin-1、cos-1、tan-1方式,表示相反的计算,可以通过三角函数值反算出对应的角度)。
三角形的任意一个角度的范围是(0°,180°),可以完美的解决三角形的角度和边的计算关系。
1.2 三角函数的局限
其局限性在于,我们在2D应用中,经常会在[0°,360°)的范围内需要使用三角函数,而此时会出现两个角度的三角函数是一样的,对应的一个超过180的角度在计算反三角函数时也无法达到我们的预期。
正弦函数及反正弦函数
1.3 局限性分析
三角函数的局限就在于它的角度范围在计算超过180°时出现的不能一一对应的关系,我们经常需要进行其他判断后才能准确知道在2D环境下其对应的真实角度。
如:
cos(60°)=0.5,arccos(0.5)=60°
cos(300°)=0.5, arcsin(0.5)=60°
但是我们在程序中经常需要使用整个圆角角度,为减少复杂性,建议将【三角函数】升级为【圆角函数】

2. 圆角函数的设计思路

2.1 在2D空间中,三角函数值隐藏了x y的部分正负属性。造成这种根本原因是我们已经习惯认为“负负得正”。
其实,(-3)×(-3) =?= 3 × 3 是一个不太严谨的说法。
要保留x y的方向,最简单的办法就是圆角函数不要采用x和y之间的计算值,而是直接采用x和y。
在许多新的语言中,都有(x,y)元数据格式,但是在传统计算机语言中,并没有这种格式。
为此,本例程采用QT中的QPoint来作为三角函数的输入值。建立QPoint和角度之间的关系。
2.2 圆心角的单位
角度(Agree)有两种表示方式Degrees和Radians,考虑到我们在程序中0°、90°、180°、270°,分别对应前后左右,会经常用到。而这四个方向的角度用弧度表示并不是很方便,所以我们建立的圆角函数直接使用度数。
2.3 本例程直接利用qt中作为依托,x,y类型为qreal缺省等同于double,角度采用double。

3. 函数设计

3.1 函数名设置
新词汇:圆角函数 Circlemetric Functions
函数名:DegreesToPoint、PointToDegrees两个函数名。
返回的点坐标均位于半径为“1”的圆上。
返回角度范围为[0, 360°)
3.2 函数体

/***
使用到的qt中的三角函数
qreal	qSin(qreal v)
qreal	qCos(qreal v)
qreal	qTan(qreal v)
qreal	qASin(qreal v)
qreal	qACos(qreal v)
qreal	qATan(qreal v)
***/#include 
QPointF	DegreesToPoint(double degrees);
double	PointToDegrees(QPointF pos);QPointF	DegreesToPoint(double degrees)
{while (degrees < 0.0) degrees += 360.0;while (degrees > 360.0) degrees -= 360.0;if (degrees == 0.0){return QPointF(1.0, 0.0);}if (degrees == 90.0){return QPointF(0.0, 1.0);}if (degrees == 180.0){return QPointF(-1.0, 0.0);}if (degrees == 270.0){return QPointF(0.0, -1.0);}double r = qDegreesToRadians(degrees);return QPointF(qCos(r), qSin(r));
}
double PointToDegrees(QPointF pos)
{if (pos == QPointF(0.0, 0.0)) return 0;if (pos.x() == 0.0){if (pos.y() > 0) return 90.0;else return 270.0;}else if (pos.y() == 0.0){if (pos.x() > 0) return 0.0;else return 180.0;}double r = qAtan(pos.y / pos.x);if (pos.x() > 0.0){//M_PI_4    Quarter M_PI, π / 4if (pos.y() < 0.0) r += M_PI * 2;}else{ //pos.x() < 0.0r += M_PI;}return qRadiansToDegrees(r);
}

4 测试

4.1 测试结果

DegreesToPoint(0): QPointF(1,0)
DegreesToPoint(30): QPointF(0.866025,0.5)
DegreesToPoint(135): QPointF(-0.707107,0.707107)
DegreesToPoint(180): QPointF(-1,0)
DegreesToPoint(225): QPointF(-0.707107,-0.707107)
DegreesToPoint(330): QPointF(0.866025,-0.5)
PointToDegress(QPointF(0,0)): 0
PointToDegress(QPointF(4,5)): 51.3402
PointToDegress(QPointF(20,0)): 0
PointToDegress(QPointF(-5,-2)): 201.801
PointToDegress(QPointF(-5,2)): 158.199
PointToDegress(QPointF(0,-12)): 270
PointToDegress(QPointF(15,-5)): 341.565
PointToDegress(QPointF(1000,-0.1)): 359.994
qAtan2(-0.1,1000):  -0.0001

可以看出,计算无误,基本可以解决。
4.2 其他
因为QT本身有函数
qreal qAtan2(qreal y, qreal x)
Returns the arctangent of a point specified by the coordinates y and x. This function will return the angle (argument) of that point.
返回由坐标y和x指定的点的arctan值。此函数将返回该点的角度(参数)。

测试该函数如下:

qRadiansToRadians(qAtan2(1,1)):  45	I象限
qRadiansToRadians(qAtan2(-1,1)):  -45	IV象限
qRadiansToRadians(qAtan2(-1,-1)):  -135	III象限
qRadiansToRadians(qAtan2(1,-1)):  135	II象限

可以看出,该函数返回的角度是-180°到180°。同时该函数的参数是y在先,x在后。
如果要使用qAtan2这个函数,需要对角度的换算进行重新修订,这里不再赘述。

相关内容

热门资讯

投资者提问:你好董秘,近期中国... 投资者提问:你好董秘,近期中国武器在印巴冲突中表现出色,其中咱们出口巴方的红旗防空系统立下大功,公司...
建筑材料、火力发电、物流行业能... 转自:市场监管总局网站自6月起,建筑材料、火力发电和物流等三个行业能源计量器具配备和管理要求国家标准...
长光华芯今日大宗交易折价成交2... 6月16日,长光华芯大宗交易成交20万股,成交额1052.4万元,占当日总成交额的5.59%,成交价...
浅析农村自建房的地震风险   Hehson财经ESG评级中心提供包括资讯、报告、培训、咨询等在内的14项ESG服务,助力上市公...
富力地产:李海伦、吴又华获委任... 观点网讯:6月16日,广州富力地产股份有限公司宣布提名委员会组成变动,新增李海伦女士(非执行董事)和...
长青股份:烯草酮未生产,氯虫苯... 投资者提问:请问公司烯草酮原药和氯虫苯甲酰胺原药产能有多少?谢谢董秘回答(长青股份SZ002391)...
中天科技今日大宗交易平价成交2... 6月16日,中天科技大宗交易成交27.26万股,成交额375.37万元,占当日总成交额的0.57%,...
2014年小本创业项目精选 2... 2014年小本创业项目精选小本创业是目前比较受欢迎的创业方式,它的投资门槛低,吸引了不少普通大众的投...
提案摘编·工交邮电事业高质量发... 转自:人民政协报九三学社中央:构建动力储能电池回收利用绿色产业链案由:构建动力储能电池回收利用绿色产...
大连市启动2025年度首批光伏... 转自:中国电力新闻网  中国能源新闻网讯(记者 邱燕超)6月11日,大连市发展和改革委员会发布关于公...
中信建投:发行不超过60亿元科... 中信建投2024年营业收入合计为人民币211.29亿元,同比下降9.10%。 ...
爱科赛博6月16日现1笔大宗交...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   6月16日,爱科...
温州市市场监管局发布盲盒产品消... 中国消费者报杭州讯(记者施本允)为进一步规范盲盒产品市场秩序、引导消费者理性消费,浙江省温州市市场监...
大族激光控股股东解押并质押50... 6月16日,大族激光(002008)发布公告,控股股东大族控股集团有限公司将其持有的504万股解除质...
XD万丰股6月16日现1笔大宗...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   6月16日,XD...
华纬科技:公司产线按订单情况有... 每经AI快讯,有投资者在投资者互动平台提问:请问目前工厂开工率满负荷吗?今年新增产能有哪些?华纬科技...
广州型材成交低迷延续??期货飘... 广州型材成交低迷延续??期货飘红难振雨季信心   今日广...
新奥股份(600803.SH)... 新奥股份(600803.SH)发布公告,公司拟通过全资子公司私有化新奥能源控股有限公司(股票代码:0...
大黑河畔花开正浓 转自:草原云竞相绽放。6月15日,呼和浩特市大黑河郊野公园内五彩缤纷、芬芳四溢,亚麻花、薰衣草、波斯...
市场监管总局:从未委托任何机构... 近期,有违法分子擅自冒用“国家市场监督管理总局”名义,伪造市场监管总局印章,制作虚假文件,谎称在市场...