You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

计算器cos()仅支持角度?Arduino代码因未转弧度调用cos()失效求助

关于cos函数弧度/角度的疑问及Arduino代码修复

一、为什么cos()函数默认用弧度,而计算器支持角度?

其实核心原因是数学定义和使用场景的差异

  • 从数学本质来说,弧度是「自然的角度度量单位」——它把角度和圆的弧长直接挂钩(1弧度对应弧长等于半径的圆心角),微积分里的三角函数公式(比如泰勒展开式)、导数公式都是基于弧度推导的,编程语言里的数学库(包括Arduino用的)都是遵循这个数学标准,所以默认用弧度。
  • 而计算器是面向普通用户设计的,大家日常接触的角度都是0-360度的直观概念,所以默认提供角度输入,降低使用门槛。

二、你的Arduino代码修复方案

原代码有几个关键问题导致无法运行,我帮你逐一修正:

  1. 变量类型错误:用int会丢失浮点运算的精度,比如cos的结果是小数,用int直接存储会被截断成0或1,完全错误;
  2. 未将角度转换为弧度:Arduino的cos()只接受弧度参数,必须先用radians()函数把0-180的角度转成弧度;
  3. 语法错误:好几行末尾缺少分号,这会直接导致编译失败;
  4. 运算逻辑的精度问题:所有参与浮点运算的变量都要改成float类型。

修复后的代码如下:

const float b = 200.0; // 改用float保留精度
const int Pin = A0;    // 电位器引脚
float c = 0.0;         // 存储角度值(浮点型)
float d = 0.0;         // 中间计算值
float e = 0.0;         // 最终边长

void setup() {
  Serial.begin(9600);
}

void loop() {
  // 读取电位器值并映射为0-180度的角度
  c = analogRead(Pin);
  c = map(c, 0, 1023, 0, 180);
  
  // 将角度转换为弧度后计算余弦值
  c = cos(radians(c));
  
  // 计算中间值d:200*(1 - cosθ)
  d = b - (b * c);
  
  // 计算平方根得到最终结果
  e = sqrt(d);
  
  // 打印结果,保留两位小数更直观
  Serial.print("最终边长e:");
  Serial.println(e, 2);
  
  delay(100); // 加个小延迟避免串口输出太频繁
}

代码说明:

  • 把所有参与浮点运算的变量都改成float,确保计算过程中不会丢失精度;
  • radians(c)把0-180的角度值转换成cos()需要的弧度值;
  • 补全了所有缺失的分号,修正语法错误;
  • 增加了Serial.println(e, 2)来保留两位小数,输出更清晰;
  • 加了delay(100)避免串口刷屏。

测试一下的话,当角度是50度时(cos(50°)≈0.6428),d=200*(1-0.6428)=71.44,e=√71.44≈8.45,和你给出的例子逻辑一致。

内容的提问来源于stack exchange,提问作者Kavista_

火山引擎 最新活动