纯数学问题,今天正好有人询问到,搜索复习几何知识,留此记录。

平面给定三点,计算夹角有三种方法:

1 使用向量计算

关于向量a和b,向量夹角余弦公式 a*b = |a||b|cosTheta 所以 夹角 = acos(a*b) / (|a|*|b|)

两向量的数量积 = a.x*b.x + a.y*b.y

向量的模 = sqrt(x*x+y*y)

在二维下,计算量是最小的一种方法了(节约了sqrt计算),只需要一次acos

例,三个点A(1,1), B(2,1), C(2,2)

AB=(B.x-A.x, B.y-A.y)=(1,0)

AC=(C.x-A.x, C.y-A.y)=(1,1)

cosA = (AB*AC)/(|AB|*|AC|)=1/√2=√2/2, 则夹角BAC=45度

2 余弦定理

cosA = (AB*AB + AC*AC - BC*BC ) / 2*AB*AC

例,三个点A(1,1), B(2,1), C(2,2)

cosA = (1+2-1)/2*1*√2=1/√2=√2/2, 则夹角A=45度

3 单独计算AB和AC的角度

分别求出直线AB, AC的斜率,得到对应的角度,两线角度之差即为夹角,考虑到夹角的方向,顺时钟夹角定为正

AB的角度:atan2(AB.y, AB.x)

AC的角度:atan2(AC.y, AC.x)

计算AB和AC的差

在JavaScript中使用第二种方法实现:

var lengthAB = Math.sqrt( Math.pow(pointA.X - pointB.X, 2) +

Math.pow(pointA.Y - pointB.Y, 2)),

lengthAC = Math.sqrt( Math.pow(pointA.X - pointC.X, 2) +

Math.pow(pointA.Y - pointC.Y, 2)),

lengthBC = Math.sqrt( Math.pow(pointB.X - pointC.X, 2) +

Math.pow(pointB.Y - pointC.Y, 2));

var cosA = (Math.pow(lengthAB, 2) + Math.pow(lengthAC, 2) - Math.pow(lengthBC, 2)) /

(2 * lengthAB * lengthAC);

var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI );

Math反三角函数返回值是弧度,若需要的是角度时还应将弧度转换,如最末行所示。

lisp 计算三点的夹角_平面三点计算夹角相关推荐

  1. python输入三个整数x、y、z、请把这三个数由小到大输出_输入三个整数x、y、z,请把这三个数由小到大输出...

    题目:输入三个整数x,y,z,请把这三个数由小到大输出. 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> ...

  2. 计算正方形面积和周长_小学三年级数学下册长方形和正方形面积计算练习题(无答案)...

    长方形和正方形面积计算练习题 1.一个长方形长是5厘米,宽是3厘米,面积是(    ),周长是(    ). 2.正方形的边长是(    )分米,面积是4平方分米,周长是(     )分米. 3.一个 ...

  3. 7的整除特征 三位一截_小学生三位数加法的策略与表现

    题目:小学生三位数加法的策略与表现 来源:Educ Stud Math (2016) 91:123–139 DOI 10.1007/s10649-015-9658-3 目的:探讨学生在解决三位数心算问 ...

  4. python计算相关性显著性p值_基于python实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  5. python赵璐第三章课后答案_第三章 课后习题及参考答案

    第三章 课后习题及参考答案 一.选择题 1. 计算机的软件系统一般分为 ( ) 两大部分. A .系统软件和应用软件 B .操作系统和计算机语言 C .程序和数据 D . DOS 和 Windows ...

  6. python上计算2的100次方_用VBS精确计算2的100次方的代码

    既然Python可以计算2的100次方,那么我就要用VBS实现.不过这个效率嘛,计算2的10000次方Python用了0.009013秒,VBS用了120.9805秒,不是一个等级的,我就不多说什么了 ...

  7. 谷歌大数据三篇论文标题_谷歌三篇重要论文读后感

    作为一个非计算机专业的学生,读完谷歌三篇重要论文之后,因为专业知识的限制实在是没有办法完全理解.(我太难了555) 尽管不能完全理解,但通篇阅读后,还是有所体会,三篇论文在我的脑海里留下了一些关键字, ...

  8. 三年级计算机画图,三年级面积作图题_小学三年级要求画图

    小学三年级要求画图 3 怎样教小学三年级的学生画图 是美术的画图还是数学的画图?如果是美术的,三年级的学生适合简笔画,容易画也容易看.等掌握画画的基础线条之后,就教上色,一步一步来,从物品到人物,从静 ...

  9. Java数三退一问题代码_数三退一问题算法(Java)

    数三退一问题是,有一圈孩子,手拉手围成一个圈,从第一个孩子开始数1,第二个孩子数2,第三个孩子数3,这时候数3的孩子退出,从下一个孩子开始数1,一直循环,直到最后剩下一个孩子,问这个孩子的位置? 两种 ...

  10. python计算每月工资多少钱_[Python]CCF——工资计算(201612-2)

    工资计算 一.问题描述 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假设他一个月的税前工资(扣除五险一金后.未扣税前的工资)为S元,则他应交的个人所得税按如下公 ...

最新文章

  1. android studio类重复,Android Studio 解决重复依赖
  2. linux下svn重新定位的方法
  3. 动态数组的定义和声明(c++)
  4. 移除apt源_apt提示处理归档 (--unpack)时出错的解决办法
  5. php怎样使用pdo,PHP中使用PDO_PHP教程
  6. u-boot之添加一块新板子的支持
  7. java4选择结构 二
  8. 越狱与不越狱的区别 越狱有什么好处 越狱的优点
  9. 根据原厂uboot进行移植
  10. EXCEL中定义名称
  11. 《JavaScript DOM编程艺术》笔记1
  12. 章节专题2021-整合管理
  13. 11、git查看往日提交以及删除分支ID命令
  14. tf35:tf.estimator
  15. MCMC_calibration
  16. VLFeat、pydot配置
  17. halcon光学字符识别(训练后识别),验证码识别
  18. 性能测试知识问题整理(三)
  19. 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等
  20. redis 五种数据类型查询命令

热门文章

  1. Ruby On Rails简介
  2. 【AI志愿超强攻略】中国高校人工智能专业最全院校排名课程对比
  3. 搭建Nexus3(maven私服搭建)
  4. java实现简单QQ登录界面
  5. BeanUtils与PropertyUtils区别
  6. matlab中fittype函数,fittype拟合函数
  7. 手机驱动工程师门,准备转行了吗
  8. sketchup 2018下载与安装教程
  9. java计算机毕业设计宠物店管理系统源码+数据库+系统+lw文档+部署
  10. 创建计算机桌面快捷方式图标异常,桌面快捷方式图标显示异常,win7无法正常显示桌面图标怎么办?...