fortran fortran中文资料网
手气不错
Article

050.trigBasic_三角函数

2026年7月18日基础级

sincostan是fortran标准定义的泛型、元素内在函数,分别计算正弦、余弦和正切。它们的实数参数表示弧度而不是角度,返回结果的kind与参数相同。这组函数常用于周期运动、波动和几何计算,适合在速度或力的方向已知时与乘法结合分解分量,并可用tan表示直线或轨迹的斜率。

语法结构

sineValue = sin(angleRadians)
cosineValue = cos(angleRadians)
tangentValue = tan(angleRadians)
  • 参数可以是实数或复数;本文只讨论最常见的实数角度。三个函数的结果与参数具有相同类型和种类。
  • 程序不会识别数值采用角度制还是弧度制。角度值必须先按θrad=θdegπ180\theta_{rad}=\theta_{deg}\pi/180转换。
  • 实数sincos的结果位于-1到1之间。tan没有有限范围,在cos(angle)接近零时会得到绝对值很大的结果并放大舍入误差。
  • 本文按Fortran 2018编译,因此手动完成角度转换,不依赖Fortran 2023新增的角度制三角函数。

应用模型

物体以速度v、仰角θ发射时,水平初速度为vx=vcosθv_x=v\cos\theta,竖直初速度为vy=vsinθv_y=v\sin\theta。忽略空气阻力时,初始轨迹斜率满足tanθ=vyvx\tan\theta=v_y/v_x

本文代码

! 用SIN和COS分解初速度,并用TAN计算轨迹初始斜率。
program trigBasicDemo
  use iso_fortran_env, only: real64
  implicit none

  real(real64), parameter :: pi = acos(-1.0_real64)
  real(real64) :: launchAngleDegrees, launchAngleRadians
  real(real64) :: initialSpeed, horizontalSpeed, verticalSpeed
  real(real64) :: trajectorySlope, componentRatio

  launchAngleDegrees = 35.0_real64
  initialSpeed = 20.0_real64
  launchAngleRadians = launchAngleDegrees * pi / 180.0_real64

  horizontalSpeed = initialSpeed * cos(launchAngleRadians)
  verticalSpeed = initialSpeed * sin(launchAngleRadians)
  trajectorySlope = tan(launchAngleRadians)
  componentRatio = verticalSpeed / horizontalSpeed

  print "(A,F9.6,1X,A)", "发射角:", launchAngleRadians, "rad"
  print "(A,F8.4,1X,A)", "水平初速度:", horizontalSpeed, "m/s"
  print "(A,F8.4,1X,A)", "竖直初速度:", verticalSpeed, "m/s"
  print "(A,F9.6)", "TAN计算的斜率:", trajectorySlope
  print "(A,F9.6)", "速度分量之比:", componentRatio
end program trigBasicDemo

编译运行

(base) hong@hongdeMacBook-Pro 050.trigBasic % gfortran -Wall -Wextra -std=f2018 exampleTrigBasic.f90
(base) hong@hongdeMacBook-Pro 050.trigBasic % ./a.out
发射角: 0.610865 rad
水平初速度: 16.3830 m/s
竖直初速度: 11.4715 m/s
TAN计算的斜率: 0.700208
速度分量之比: 0.700208

现象分析

程序先用acos(-1.0_real64)得到双精度π,再计算35×π/180,得到约0.610865238弧度。若直接把35.0传给三角函数,Fortran会把它理解为35弧度,而不是35度,结果将不符合本例的物理角度。

cos(0.610865238)约为0.819152,乘以初速度20得到水平分量16.3830 m/s;sin(0.610865238)约为0.573576,乘以20得到竖直分量11.4715 m/s。两个无量纲三角函数值分别表示速度在两个坐标方向上的比例。

tan(0.610865238)得到0.700208。另一方面,11.4715/16.3830也约为0.700208,因为公共因子v在v sin(θ)/(v cos(θ))中约去。两种计算结果一致,验证了轨迹斜率与速度分量之比的关系。

核心知识点

  • Fortran 2018中的sincostan按弧度解释实数角度,角度值必须先乘π/180。
  • sincos适合计算向量分量,tan可表示分量之比或斜率。
  • 三个函数都是元素内在函数,返回结果的类型和kind跟随参数。
  • 使用tan前应注意cos(angle)是否接近零,避免奇点附近的不稳定结果。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注