lisp 计算三点的夹角_平面三点计算夹角
纯数学问题,今天正好有人询问到,搜索复习几何知识,留此记录。
平面给定三点,计算夹角有三种方法:
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 计算三点的夹角_平面三点计算夹角相关推荐
- python输入三个整数x、y、z、请把这三个数由小到大输出_输入三个整数x、y、z,请把这三个数由小到大输出...
题目:输入三个整数x,y,z,请把这三个数由小到大输出. 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> ...
- 计算正方形面积和周长_小学三年级数学下册长方形和正方形面积计算练习题(无答案)...
长方形和正方形面积计算练习题 1.一个长方形长是5厘米,宽是3厘米,面积是( ),周长是( ). 2.正方形的边长是( )分米,面积是4平方分米,周长是( )分米. 3.一个 ...
- 7的整除特征 三位一截_小学生三位数加法的策略与表现
题目:小学生三位数加法的策略与表现 来源:Educ Stud Math (2016) 91:123–139 DOI 10.1007/s10649-015-9658-3 目的:探讨学生在解决三位数心算问 ...
- python计算相关性显著性p值_基于python实现计算两组数据P值
我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...
- python赵璐第三章课后答案_第三章 课后习题及参考答案
第三章 课后习题及参考答案 一.选择题 1. 计算机的软件系统一般分为 ( ) 两大部分. A .系统软件和应用软件 B .操作系统和计算机语言 C .程序和数据 D . DOS 和 Windows ...
- python上计算2的100次方_用VBS精确计算2的100次方的代码
既然Python可以计算2的100次方,那么我就要用VBS实现.不过这个效率嘛,计算2的10000次方Python用了0.009013秒,VBS用了120.9805秒,不是一个等级的,我就不多说什么了 ...
- 谷歌大数据三篇论文标题_谷歌三篇重要论文读后感
作为一个非计算机专业的学生,读完谷歌三篇重要论文之后,因为专业知识的限制实在是没有办法完全理解.(我太难了555) 尽管不能完全理解,但通篇阅读后,还是有所体会,三篇论文在我的脑海里留下了一些关键字, ...
- 三年级计算机画图,三年级面积作图题_小学三年级要求画图
小学三年级要求画图 3 怎样教小学三年级的学生画图 是美术的画图还是数学的画图?如果是美术的,三年级的学生适合简笔画,容易画也容易看.等掌握画画的基础线条之后,就教上色,一步一步来,从物品到人物,从静 ...
- Java数三退一问题代码_数三退一问题算法(Java)
数三退一问题是,有一圈孩子,手拉手围成一个圈,从第一个孩子开始数1,第二个孩子数2,第三个孩子数3,这时候数3的孩子退出,从下一个孩子开始数1,一直循环,直到最后剩下一个孩子,问这个孩子的位置? 两种 ...
- python计算每月工资多少钱_[Python]CCF——工资计算(201612-2)
工资计算 一.问题描述 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假设他一个月的税前工资(扣除五险一金后.未扣税前的工资)为S元,则他应交的个人所得税按如下公 ...
最新文章
- android studio类重复,Android Studio 解决重复依赖
- linux下svn重新定位的方法
- 动态数组的定义和声明(c++)
- 移除apt源_apt提示处理归档 (--unpack)时出错的解决办法
- php怎样使用pdo,PHP中使用PDO_PHP教程
- u-boot之添加一块新板子的支持
- java4选择结构 二
- 越狱与不越狱的区别 越狱有什么好处 越狱的优点
- 根据原厂uboot进行移植
- EXCEL中定义名称
- 《JavaScript DOM编程艺术》笔记1
- 章节专题2021-整合管理
- 11、git查看往日提交以及删除分支ID命令
- tf35:tf.estimator
- MCMC_calibration
- VLFeat、pydot配置
- halcon光学字符识别(训练后识别),验证码识别
- 性能测试知识问题整理(三)
- 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等
- redis 五种数据类型查询命令
热门文章
- Ruby On Rails简介
- 【AI志愿超强攻略】中国高校人工智能专业最全院校排名课程对比
- 搭建Nexus3(maven私服搭建)
- java实现简单QQ登录界面
- BeanUtils与PropertyUtils区别
- matlab中fittype函数,fittype拟合函数
- 手机驱动工程师门,准备转行了吗
- sketchup 2018下载与安装教程
- java计算机毕业设计宠物店管理系统源码+数据库+系统+lw文档+部署
- 创建计算机桌面快捷方式图标异常,桌面快捷方式图标显示异常,win7无法正常显示桌面图标怎么办?...