You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript三角函数计算结果与预期不符,求排查解决

问题排查与解决

你的问题核心在于:JavaScript的Math.sin()和Math.cos()函数接受的参数是弧度(radians),而非角度(degrees),但你的angle()函数返回的是十进制角度值,直接传入三角函数会导致计算结果完全偏离预期。

错误原因分析

你传入的角度是89°45′0″,通过angle()函数计算后得到的是89.75(十进制角度),但Math.sin(89.75)实际是在计算89.75弧度对应的正弦值,这和你想要的89.75角度的正弦值完全不是一回事。

修正方案

需要把十进制角度转换为弧度,转换公式是:弧度 = 角度 × π / 180。你可以通过两种方式实现:

方法1:修改angle()函数直接返回弧度

function angle(deg, min, sec) {
  const decimalDeg = deg + (min / 60) + (sec / 3600);
  return decimalDeg * Math.PI / 180; // 转换为弧度
}

let deg2 = 89, min2 = 45, sec2 = 0, dist2 = 11.27;
let lat2 = Math.sin(angle(deg2, min2, sec2)) * dist2;
let long2 = Math.cos(angle(deg2, min2, sec2)) * dist2;
console.log("lat2 , long2 : " + lat2 + "  ,  " + long2);

方法2:在调用三角函数时单独转换

function angle(deg, min, sec) {
  return deg + (min / 60) + (sec / 3600);
}

let deg2 = 89, min2 = 45, sec2 = 0, dist2 = 11.27;
const rad = angle(deg2, min2, sec2) * Math.PI / 180; // 转换为弧度
let lat2 = Math.sin(rad) * dist2;
let long2 = Math.cos(rad) * dist2;
console.log("lat2 , long2 : " + lat2 + "  ,  " + long2);

验证结果

运行修正后的代码,会得到你预期的输出:

lat2 , long2 : 11.269892717722677  ,  0.04917449563909303

补充说明

你之前尝试交换sin与cos、替换成tan都无法解决问题,是因为这些操作没有触及核心问题——角度与弧度的转换错误。只要完成角度到弧度的转换,使用正确的三角函数就能得到预期结果。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:05:24