正弦余弦定理,求圆弧度或度数

由于最近玩机器人,所以总涉及到一些导航地图数据的处理,需要发任务,添加导航点,发送自由导航信息,少不了与canvas打交道了。

首先我们好弄清楚是什么正弦余弦定理,什么是勾股定理,角度和弧度的换算,其实我也差不多忘光光了~~

忘掉不丢人,百度走起~~,哈哈哈。。。。

下图就是点击拖动出来的东西,圆表示机器人,线表示机器的方向,目前我们已知的就是两个点的坐标,一个是圆心的坐标和鼠标移动过程的坐标,通过这连个左边我们要计算出圆的半径(这里的圆半径不是指机器人那个圆的半径,是鼠标时和拖动后产生的圆的半径)

我们先看第一个公式,求圆上任意一点的点坐标

{x_{1}}= {x_{0}} + r * cos(\frac{\alpha *\pi }{180})

{y_{1}} = {y_{0}} + r * sin(\frac{\alpha *\pi }{180})

计算两点间的距离我们就的用勾股定理了,这个距离也就是我们的圆的半径

c^{2}=a^{2} + b^{2}  (a,b 为直角边,c为斜边)

好了,根据上面两条公式可以实现我们想需要的了

我们来就求个弧度,这里会用到反余弦函数哦~~

const countRadius(start:any, end: any) => {
  const [sx, sy, ex, ey] = [
    start.offsetX ? start.offsetX : start.x,
    start.offsetY ? start.offsetY : start.y,
    end.offsetX ? end.offsetX : end.x,
    end.offsetY ? end.offsetY : end.y,
  ];
  return Math.sqrt(Math.pow(ex - sx, 2) + Math.pow(ey - sy, 2));
}

const radius = countRadius(startPoint, lastPoint);

let radian = Math.acos((lastPoint.offsetX - startPoint.offsetX) / radius);

发现感觉挺完美的,我们逆时针绕一圈,弧度数出来了,但是发现上半圆和下半圆的结果好像是对称的关系,上半圆是0~π,下半圆是从π-0,我们判断下如果是下半圆我就用2π-radian就好了。

if (lastPoint.offsetY - startPoint.offsetY > 0) radian = 2*Math.PI - radian;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值