C语言中的三角函数都是弧度制
三角函数是以角求值,反三角函数是以值求角
余弦函数cos(π) = -1,对应的反余弦函数arccos(-1) = π
因为C语言中没有定义π,所以本文使用反余弦函数arccos(-1)来准确表示π,arccos(-1)在C语言中写为acos(-1)
为了方便使用,可以在前面定义宏#define pi acos(-1)
,后续使用pi来代替
因为日常使用最多的是角度,所以需要把角度转换为弧度,绕圆一周是360°,对应2π弧度
将2π弧度分为360份,每一份代表1°对应的弧度(角度转弧度)
2 π 360 = π 180 {\color{Black} \frac{2π}{360}=\frac{π}{180}} 3602π=180π
30°对应的弧度如下所示,将π替换为arccos(-1)
30 ° = 30 ∗ π 180 = 30 ∗ a r c c o s ( − 1 ) 180 = π 6 {\color{Black} 30°=30*\frac{π}{180} =30*\frac{arccos(-1)}{180}= \frac{π}{6}} 30°=30∗180π=30∗180arccos(−1)=6π
角度转弧度表示为 角度*acos(-1)/180
,即30*acos(-1)/180
反过来 弧度转角度,取倒数即可
360 2 π = 180 π {\color{Black} \frac{360}{2π}=\frac{180}{π}} 2π360=π180
π/6 对应的角度如下所示
π 6 = π 6 ∗ 180 π ° = a r c c o s ( − 1 ) 6 ∗ 180 a r c c o s ( − 1 ) ° = 30 ° {\color{Black} \frac{π}{6}=\frac{π}{6}*\frac{180}{π}°=\frac{arccos(-1)}{6}*\frac{180}{arccos(-1)}°=30°} 6π=6π∗π180°=6arccos(−1)∗arccos(−1)180°=30°
弧度转角度表示为弧度*180/acos(-1)
,即acos(-1)/6*180/acos(-1)
1、正弦函数 sin(x)
头文件 #include<math.h>
函数原型 double __cdecl sin(double _X);
函数定义域 (-∞,+∞)
函数值域 [-1,1]
sin 0 ∘ = 0 sin 3 0 ∘ = 1 2 sin 6 0 ∘ = 3 2 sin 9 0 ∘ = 1 sin 12 0 ∘ = 3 2 sin 15 0 ∘ = 1 2 sin 18 0 ∘ = 0 sin 21 0 ∘ = − 1 2 sin 24 0 ∘ = − 3 2 sin 27 0 ∘ = − 1 sin 30 0 ∘ = − 3 2 sin 33 0 ∘ = − 1 2 sin 36 0 ∘ = 0 1 2 {\color{Black} \begin{align*} \sin 0^{\circ} & = 0 & \sin 30^{\circ} & = \frac{1}{2} & \sin 60^{\circ} & = \frac{\sqrt{3} }{2} & \sin 90^{\circ} & = 1 & \sin 120^{\circ} & = \frac{\sqrt{3} }{2} & \sin 150^{\circ} & = \frac{1}{2} \\[2ex] \sin 180^{\circ} & = 0 & \sin 210^{\circ} & = -\frac{1}{2} & \sin 240^{\circ} & = - \frac{\sqrt{3} }{2} & \sin 270^{\circ} & = - 1 & \sin 300^{\circ} & = -\frac{\sqrt{3} }{2} & \sin 330^{\circ} & = -\frac{1}{2} \\[2ex] \sin 360^{\circ} & = 0 & {\color{Transparent} \frac{1}{2} } \end{align*} } sin0∘sin180∘sin360∘=0=0=0sin30∘sin210∘21=21=−21sin60∘sin240∘=23=−23sin90∘sin270∘=1=−1sin120∘sin300∘=23=−23sin150∘sin330∘=21=−21
示例程序
#include<stdio.h>
#include<math.h>
#define pi acos(-1)
int main()
{
//参数中的角度转弧度【 角度*π/180 ,即 角度*pi/180 】
printf("%f\n", sin(0*pi/180) ); //0° ~ 0
printf("%f\n", sin(30*pi/180) ); //30° ~ 1/2
printf("%f\n", sin(60*pi/180) ); //60° ~ (√3)/2
printf("%f\n", sin(90*pi/180) ); //90° ~ 1
printf("%f\n", sin(120*pi/180) ); //120° ~ (√3)/2
printf("%f\n", sin(150*pi/180) ); //150° ~ 1/2
printf("%f\n", sin(180*pi/180) ); //180° ~ 0
printf("%f\n", sin(210*pi/180) ); //210° ~ -(1/2)
printf("%f\n", sin(240*pi/180) ); //240° ~ -((√3)/2)
printf("%f\n", sin(270*pi/180) ); //270° ~ -1
printf("%f\n", sin(300*pi/180) ); //300° ~ -((√3)/2)
printf("%f\n", sin(330*pi/180) ); //330° ~ -(1/2)
printf("%f\n", sin(360*pi/180) ); //360° ~ 0
return 0;
}
运行截图
2、反正弦函数 asin(x)
[数学表示为arcsin(x)]
头文件 #include<math.h>
函数原型 double __cdecl asin(double _X);
函数定义域 [-1,1]
函数值域 [ − π 2 -\frac{\pi}{2} −2π, π 2 \frac{\pi}{2} 2π]
arcsin ( − 1 ) = − π 2 = − 9 0 ∘ arcsin ( − 3 2 ) = − π 3 = − 6 0 ∘ arcsin ( − 1 2 ) = − π 6 = − 3 0 ∘ arcsin ( 0 ) = 0 = 0 ∘ arcsin ( 1 ) = π 2 = 9 0 ∘ arcsin ( 3 2 ) = π 3 = 6 0 ∘ arcsin ( 1 2 ) = π 6 = 3 0 ∘ {\color{Black} \begin{align*} \arcsin(-1) & = -\frac{\pi}{2}=-90^{\circ} & \arcsin(- \frac{\sqrt{3} }{2}) & = -\frac{\pi}{3}= -60^{\circ} & \arcsin(- \frac{1 }{2}) & = -\frac{\pi}{6}= -30^{\circ} & \arcsin(0) & =0= 0^{\circ} \\[2ex] \arcsin(1) & = \frac{\pi}{2}= 90^{\circ} & \arcsin(\frac{\sqrt{3} }{2}) & = \frac{\pi}{3}= 60^{\circ} & \arcsin(\frac{1 }{2}) & = \frac{\pi}{6}= 30^{\circ} \end{align*} } arcsin(−1)arcsin(1)=−2π=−90∘=2π=90∘arcsin(−23)arcsin(23)=−3π=−60∘=3π=60∘arcsin(−21)arcsin(21)=−6π=−30∘=6π=30∘arcsin(0)=0=0∘
示例程序
#include<stdio.h>
#include<math.h>
#define pi acos(-1)
int main()
{
//asin()返回值得到的弧度转角度【 弧度*180/π ,即 弧度*180/pi 】
printf("%f\n", asin(-1)*180/pi ); // -1 ~ -90°
printf("%f\n", asin(-sqrt(3)/2)*180/pi ); // -((√3)/2) ~ -60°
printf("%f\n", asin(-1.0/2)*180/pi ); // -(1/2) ~ -30°
printf("%f\n", asin(0)*180/pi ); // 0 ~ 0°
printf("%f\n", asin(1.0/2)*180/pi ); // (1/2) ~ 30°
printf("%f\n", asin(sqrt(3)/2)*180/pi ); // (√3)/2 ~ 60°
printf("%f\n", asin(1)*180/pi ); // 1 ~ 90°
return 0;
}
运行截图
3、双曲正弦函数 sinh(x)
头文件 #include<math.h>
函数原型 double __cdecl sinh(double _X);
函数表达式:(其中e是自然对数的底)
s i n h ( x ) = e x − e − x 2 {\color{Black} sinh(x)=\frac{e^x-e^{-x}}{2}} sinh(x)=2ex−e−x
函数定义域 (-∞,+∞)
函数值域 (-∞,+∞)
sinh ( − 30 ) = e ( − 30 ) − e 30 2 sinh ( − 10 ) = e ( − 10 ) − e 10 2 sinh ( − 1 ) = e ( − 1 ) − e 1 2 sinh ( 0 ) = e 0 − e 0 2 sinh ( 30 ) = e 30 − e ( − 30 ) 2 sinh ( 10 ) = e 10 − e ( − 10 ) 2 sinh ( 1 ) = e 1 − e ( − 1 ) 2 {\color{Black} \begin{align*} \sinh (-30) & = \frac{e^{(-30)}-e^{30}}{2} & \sinh (-10) & = \frac{e^{(-10)}-e^{10}}{2} & \sinh (-1) & = \frac{e^{(-1)}-e^{1}}{2} & \sinh (0) & = \frac{e^{0}-e^{0}}{2} \\[3ex] \sinh (30) & = \frac{e^{30}-e^{(-30)}}{2} & \sinh (10) & = \frac{e^{10}-e^{(-10)}}{2} & \sinh (1) & = \frac{e^{1}-e^{(-1)}}{2} \end{align*} } sinh(−30)sinh(30)=2e(−30)−e30=2e30−e(−30)sinh(−10)sinh(10)=2e(−10)−e10=2e10−e(−10)sinh(−1)sinh(1)=2e(−1)−e1=2e1−e(−1)sinh(0)=2e0−e0
示例程序
#include<stdio.h>
#include<math.h>
int main()
{
printf("%f\n", sinh(-30) );
printf("%f\n", sinh(-10) );
printf("%f\n", sinh(-1) );
printf("%f\n", sinh(0) );
printf("%f\n", sinh(1) );
printf("%f\n", sinh(10) );
printf("%f\n", sinh(30) );
return 0;
}