C语言学习笔记---三角函数
在C语言标准库里面提供了常用的三角函数,在头文件math.h
里面可以看到函数的相关定义。
double __cdecl sin(double _X);double __cdecl cos(double _X);double __cdecl tan(double _X);double __cdecl asin(double _X);double __cdecl acos(double _X);double __cdecl atan(double _X);double __cdecl atan2(double _Y,double _X);
其中sin
、cos
、tan
函数的参数是一个用弧度表示的角度,分别返回这个角度的正弦、余弦、正切值。
度和弧度都是衡量角的大小的单位。度用 °
来表示,弧度用rad
表示。
弧度的定义
在一个圆中,弧长等于半径的弧,其所对的圆心角就是 1rad。也就是说,两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧的长度正好等于圆的半径时,两条射线的夹角的弧度为 1。
度的定义
两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆周长的360分之一时,两条射线的夹角的大小为1度。
由此可知:
1度=π/180 弧度 ( ≈0.017453弧度 )
因此,得到 把度化成弧度的公式:
弧度=度×π/180
例如:
- 30°=30×π/180 =π/6 弧度
- 45°=45×π/180 =π/4 弧度
- 60°=60×π/180 =π/3 弧度
- 90°=90×π/180 =π/2 弧度
- 120°=120×π/180 =2π/3 弧度
- 180°=180×π/180 =π 弧度
反过来,弧度化成度怎么算?
因为 π弧度=180°
所以 1弧度=180°/π (≈57.3°)
因此,可得到 把弧度化成度的公式:
度=弧度×180°/π
例如:
- π/2 弧度=π/2 ×180°/π =90°
- 4π/3 弧度=4π/3 ×180°/π =240°
sin
、cos
、tan
函数定义如下:
在直角三角形 ABC 中(其中角 C 为 90°),角 A 的正弦就是它的对边长度和三角形斜边长度的比值,
sinA = a / c
。在直角三角形 ABC 中(其中角 C 为 90°),角 A 的余弦就是它的临边长度和三角形斜边长度的比值,
cosA = b / c
。在直角三角形 ABC 中(其中角 C 为 90°),角 A 的正切就是它的对边长度和临边长度的比值,
tanA = a / b
。
下面就通过一段简单的代码来演示一下这几个三角函数的用法。
#include <stdio.h>
#include <math.h>#define PI 3.14159265int main ()
{double x, ret, val;x = 30.0;val = PI / 180;ret = sin(x*val);printf("%lf 的正弦是 %lf 度\n", x, ret);ret = cos(x*val);printf("%lf 的余弦是 %lf 度\n", x, ret); ret = tan(x*val);printf("%lf 的正切是 %lf 度\n", x, ret);return(0);
}
输出结果如下:
asin()
、acos
、atan
函数分别返回它们的参数的反正弦、反余弦、反正切值。功能刚好和
sin
、cos
、tan
函数相反。
sin()
是已知一个角的弧度值 x
,求该角的正弦值 y
;而 asin()
是已知一个角的正弦值 y
,求该角的弧度值 x
。x
的取值必须位于区间 [-1, 1]
中,如果 x
的值超出此区间,将会产生错误。
测试代码如下:
#include <stdio.h>
#include <math.h>#define PI 3.14159265int main ()
{double x, ret, val;x = 1.0;val = 180.0 / PI;ret = asin(x) * val;printf("%lf 的反正弦是 %lf 度\n", x, ret);ret =acos(x) * val;printf("%lf 的反余弦是 %lf 度\n", x, ret); ret = atan(x) * val;printf("%lf 的反正切是 %lf 度\n", x, ret);return(0);
}
输出结果为:
最后还有一个反正切函数atan2。atan2() 是 atan() 的增强版,能够确定角度所在的象限。它返回以弧度表示的 y/x
的反正切。y
和 x
的值的符号决定了正确的象限。
它的两个参数:
- x – 代表 x 轴坐标的浮点值。
- y – 代表 y 轴坐标的浮点值。
弧度区间为 [-π,+π]
。
当 (x, y) 在象限中时:
- 当 (x, y) 在第一象限,0 < θ < π/2
- 当 (x, y) 在第二象限,π/2 < θ ≤ π
- 当 (x, y) 在第三象限,-π < θ < -π/2
- 当 (x, y) 在第四象限,-π/2 < θ < 0
当 (x, y) 在象限的边界(也就是坐标轴)上时:
- 当 y 是 0,且 x 为非负值,θ = 0
- 当 y 是 0,且 x 是负值,θ = π
- 当 y 是正值,且 x 是 0,θ = π/2
- 当 y 是负值,且 x 是 0,θ = -π/2
测试代码如下:
#include <stdio.h>
#include <math.h>#define PI 3.14159265int main ()
{double x, y, ret, val;val = 180.0 / PI;x = 1.0;y = 1.0;ret = atan2 (y,x) * val;printf("x = %lf, y = %lf 的反正切", x, y);printf("是 %lf 度\n", ret);x = 1.0;y = -1.0;ret = atan2 (y,x) * val;printf("x = %lf, y = %lf 的反正切", x, y);printf("是 %lf 度\n", ret);x = -1.0;y = 1.0;ret = atan2 (y,x) * val;printf("x = %lf, y = %lf 的反正切", x, y);printf("是 %lf 度\n", ret);x = -1.0;y = -1.0;ret = atan2 (y,x) * val;printf("x = %lf, y = %lf 的反正切", x, y);printf("是 %lf 度\n", ret);return(0);
}
输出结果如下:
C语言学习笔记---三角函数相关推荐
- 梓益C语言学习笔记之链表&动态内存&文件
梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...
- 6.方法(go语言学习笔记)
6.方法(go语言学习笔记) 目录 定义 匿名字段 方法集 表达式 1. 定义 方法是与对象实例绑定的特殊函数. 方法是面向对象编程的基本概念,用于维护和展示对象的自身状态.对象是内敛的,每个实例对象 ...
- 梓益C语言学习笔记之指针
梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...
- c语言中void arrout,c语言学习笔记(数组、函数
<c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...
- c语言float二进制输出代码_C语言学习笔记——学前知识概述
将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...
- c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...
C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...
- C语言学习笔记---001C语言的介绍,编译过程原理,工具等
C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...
- go get 拉取指定版本_go语言学习笔记-基础知识-3
相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...
- 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置
相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...
最新文章
- 密码学信息理论基础2
- 基于visual c++之windows核心编程代码分析(42)windows下进程的身份切换
- 五大要点分析手游美术设计:如何在前5分钟抓住玩家眼球
- 为什么任何对象都可以实现锁
- 《Cocos2D权威指南》——3.9 本章小结
- 关于webservice(CXF)的一些理解
- python数据预测_使用Python预测缺失值
- 成年人的世界,嘴上喊的都是主义,心里装的都是生意
- LeetCode(59):螺旋矩阵 II
- 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中
- java学习视频 java常用23种设计模式
- python数据分析师网易云课堂_网易云课堂 数据分析(一)
- ogg转mp3格式转换器哪个好用
- 风险资产的最优组合公式证明
- ORA-00937:不是单组分组函数
- 铁道部网站扩容投诉与建议
- 实现button按钮的内容为图片
- 小米电脑如何把计算机放桌面上,小米电脑怎么把此电脑放到桌面上
- 路由器总是有信号无网络连接到服务器,路由器经常连不上网信号很差怎么回事...
- 21(6). 赋值兼容规则与抽象类
热门文章
- python用的什么编码_python,编码_这是什么编码,如何解码,python,编码 - phpStudy
- Pytorch中标量对向量求导和向量对向量求导的详解
- win7本地连接状态未知,依赖服务或组无法启动的六种解决方法
- SQLite损坏修复
- perl linux卸载,CentOS下使用perl批量卸载软件
- 宇宙是一个无始无终的循环?道翰天琼认知智能机器人平台API接口大脑为您揭秘。
- 【NVIDIA Xavier NX入坑记录3】NVIDIA Xavier NX刷机后的基建记录
- 金融IT公司与银行之比较
- node+multiparty接受formdata上传文件保存在硬盘
- k8s集群下的健康检查