在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);

  其中sincostan 函数的参数是一个用弧度表示的角度,分别返回这个角度的正弦、余弦、正切值。

  度和弧度都是衡量角的大小的单位。度用 ° 来表示,弧度用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°

sincostan 函数定义如下:

  • 在直角三角形 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()acosatan 函数分别返回它们的参数的反正弦、反余弦、反正切值。功能刚好和
sincostan 函数相反。

   sin() 是已知一个角的弧度值 x,求该角的正弦值 y;而 asin() 是已知一个角的正弦值 y,求该角的弧度值 xx 的取值必须位于区间 [-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);
}

  输出结果为:

  最后还有一个反正切函数atan2atan2()atan() 的增强版,能够确定角度所在的象限。它返回以弧度表示的 y/x 的反正切。yx 的值的符号决定了正确的象限。

它的两个参数:

  • 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语言学习笔记---三角函数相关推荐

  1. 梓益C语言学习笔记之链表&动态内存&文件

    梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...

  2. 6.方法(go语言学习笔记)

    6.方法(go语言学习笔记) 目录 定义 匿名字段 方法集 表达式 1. 定义 方法是与对象实例绑定的特殊函数. 方法是面向对象编程的基本概念,用于维护和展示对象的自身状态.对象是内敛的,每个实例对象 ...

  3. 梓益C语言学习笔记之指针

    梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...

  4. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  5. c语言float二进制输出代码_C语言学习笔记——学前知识概述

    将我大一学习C语言时做的笔记拿来与大家分享,内容比较浅显,比较适合初学者,如有错误还请见谅,提出改正,谢谢! 前言:此C语言笔记是本人在自学时记录的一些重点或初学者常犯的错误,希望我的这本笔记能够对大 ...

  6. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  7. C语言学习笔记---001C语言的介绍,编译过程原理,工具等

    C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...

  8. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  9. 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置

    相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...

最新文章

  1. 密码学信息理论基础2
  2. 基于visual c++之windows核心编程代码分析(42)windows下进程的身份切换
  3. 五大要点分析手游美术设计:如何在前5分钟抓住玩家眼球
  4. 为什么任何对象都可以实现锁
  5. 《Cocos2D权威指南》——3.9 本章小结
  6. 关于webservice(CXF)的一些理解
  7. python数据预测_使用Python预测缺失值
  8. 成年人的世界,嘴上喊的都是主义,心里装的都是生意
  9. LeetCode(59):螺旋矩阵 II
  10. 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中
  11. java学习视频 java常用23种设计模式
  12. python数据分析师网易云课堂_网易云课堂 数据分析(一)
  13. ogg转mp3格式转换器哪个好用
  14. 风险资产的最优组合公式证明
  15. ORA-00937:不是单组分组函数
  16. 铁道部网站扩容投诉与建议
  17. 实现button按钮的内容为图片
  18. 小米电脑如何把计算机放桌面上,小米电脑怎么把此电脑放到桌面上
  19. 路由器总是有信号无网络连接到服务器,路由器经常连不上网信号很差怎么回事...
  20. 21(6). 赋值兼容规则与抽象类

热门文章

  1. python用的什么编码_python,编码_这是什么编码,如何解码,python,编码 - phpStudy
  2. Pytorch中标量对向量求导和向量对向量求导的详解
  3. win7本地连接状态未知,依赖服务或组无法启动的六种解决方法
  4. SQLite损坏修复
  5. perl linux卸载,CentOS下使用perl批量卸载软件
  6. 宇宙是一个无始无终的循环?道翰天琼认知智能机器人平台API接口大脑为您揭秘。
  7. 【NVIDIA Xavier NX入坑记录3】NVIDIA Xavier NX刷机后的基建记录
  8. 金融IT公司与银行之比较
  9. node+multiparty接受formdata上传文件保存在硬盘
  10. k8s集群下的健康检查