-
正弦余弦定理,求圆弧度或度数
2020-12-13 09:55:54由于最近玩机器人,所以总涉及到一些导航地图数据的处理,少不了...首先我们好弄清楚是什么正弦余弦定理,什么是勾股定理,角度和弧度的换算,其实我也差不多忘光光了~~ 忘掉不丢人,百度走起~~,哈哈哈。。。。 ...由于最近玩机器人,所以总涉及到一些导航地图数据的处理,需要发任务,添加导航点,发送自由导航信息,少不了与canvas打交道了。
首先我们好弄清楚是什么正弦余弦定理,什么是勾股定理,角度和弧度的换算,其实我也差不多忘光光了~~
忘掉不丢人,百度走起~~,哈哈哈。。。。
下图就是点击拖动出来的东西,圆表示机器人,线表示机器的方向,目前我们已知的就是两个点的坐标,一个是圆心的坐标和鼠标移动过程的坐标,通过这连个左边我们要计算出圆的半径(这里的圆半径不是指机器人那个圆的半径,是鼠标时和拖动后产生的圆的半径)
我们先看第一个公式,求圆上任意一点的点坐标
计算两点间的距离我们就的用勾股定理了,这个距离也就是我们的圆的半径
(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;
-
三角函数:正弦余弦定理及应用
2018-02-28 15:55:131.余弦定理公式余弦定义主要作用是依靠已知三角形的两条边及其夹角,求第三边的情况,如下图:这里我们不处理向量(矢量)运算,单纯的从标量数值长度的推算入手,建立垂线后,得到的直角三角形ADC,可以通过勾股...紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79384273
这一篇我们来推导一些常用的三角函数公式,主要方便以后图形程序中的计算。
1.余弦定理公式
余弦定义主要作用是依靠已知三角形的两条边及其夹角,求第三边的情况,如下图:
这里我们不处理向量(矢量)运算,单纯的从标量数值长度的推算入手,建立垂线后,得到的直角三角形ADC,可以通过勾股定理(前面推过)和sin²α+cos²α=1得到上面两个公式,后面的公式对我们求角度有很大帮助,而且这两个公式对后面图形方面计算会起到很大的帮助。
1.正弦定理的推导,前面有余弦定理,那么肯定就有一个对应的正弦定理了。
ps:这里要了解一个外接圆的概念,就是三角形△ABC的三个顶点都在一个圆上,那么这个圆就是△ABC的外接圆,其实这个也好反向理解,比如我们先画一个圆,然后任意在圆上取三点,连接三点就是一个三角形,但是假如我们不知道三角形的外接圆,要怎么去绘画和证明呢,如下图:
上面我们通过两条垂直平分线,就能得到△AOB和△BOC,且两三角形为等腰三角形(这个很好看出来,△AOB被平分成共边的两个一样的直角三角形),那么OA = OB = OC,所以O为圆心做半径OA的圆就是外接圆了。
接下来继续推导正弦公式,如下图:
上面我们推导了外接圆,那么接下来我们只需要建立等腰三角形△AoB △AoC △ BoC,将∠A转化成∠θ,就能得到上面的正弦定理了。
接下来到实际程序应用环节了,其实在实际项目开发中,余弦定理我用的还是挺多的,比如:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AngleFunc : MonoBehaviour { public GameObject PointA; public GameObject PointB; public GameObject PointC; void Start() { { //构建一个三角形 GameObject[] gos = new GameObject[3]; gos[0] = PointA; gos[1] = PointB; gos[2] = PointC; for (int i = 0; i < gos.Length; i++) { LineRenderer line = gos[i].AddComponent<LineRenderer>(); line.positionCount = 2; line.startWidth = 0.1f; line.endWidth = 0.1f; int index = i + 1; if (index >= gos.Length) index = 0; line.SetPosition(0, gos[i].transform.position); line.SetPosition(1, gos[index].transform.position); } } //用余弦定理计算角度 Vector3 AB = PointB.transform.position - PointA.transform.position; Vector3 BC = PointC.transform.position - PointB.transform.position; Vector3 AC = PointC.transform.position - PointA.transform.position; //计算∠A的夹角 float angle1 = Mathf.Acos((getVectorLengthPow2(AB) + getVectorLengthPow2(AC) - getVectorLengthPow2(BC)) / (2 * Mathf.Sqrt(getVectorLengthPow2(AB) * getVectorLengthPow2(AC)))) * Mathf.Rad2Deg; //用自带的api计算角度 float angle2 = Vector3.Angle(AB, AC); #if UNITY_EDITOR Debug.LogFormat("angle1 = {0} angle2 = {1}", angle1, angle2); #endif } private float getVectorLengthPow2(Vector3 vec) { return Mathf.Pow(vec.x, 2) + Mathf.Pow(vec.y, 2) + Mathf.Pow(vec.z, 2); } }
代码比较少,直接贴上来了,主要就是用三角函数计算夹角值,其实unity中有自带的api,但是我们要知道公式的推导来源
-
笔记:勾股定理,三角函数
2019-10-25 09:54:56勾股定理:c²=a²+b²锐角:大于0而小于90的角正弦:在直角三角形中,任意一锐角∠A的对边(a)与斜边(c)的比叫做∠A的正弦,记作sinA,如上图,即sinA=a/c余弦:∠A的余弦是它的邻边(b)比三角形的斜边(c),即cosA=b/... -
这几天做的 水题总结
2018-02-28 14:58:52思路:先计算折线的总长度,然后算出一半的长度,然后后面对每段折线进行求和,只要和值小于一半就继续求和,知道大于等于如果大于则通过多出来的部分,然后根据勾股定理(余弦定理,正弦定理)算出中点的x值,y值。[HihoCoder-1696]
计算折线的中点。(题号hihocoder)
思路:先计算折线的总长度,然后算出一半的长度,然后后面对每段折线进行求和,只要和值小于一半就继续求和,知道大于等于如果大于则通过多出来的部分,然后根据勾股定理(余弦定理,正弦定理)算出中点的x值,y值。
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int maxn=1e6+50; int n; double seg[maxn],length,mid,ans_x,ans_y,Sin[maxn],Cos[maxn]; struct Node{ int x,y; }node[maxn]; int main(){ while(scanf("%d",&n)!=EOF){ memset(node,0,sizeof(node)); memset(seg,0,sizeof(seg)); memset(Cos,0,sizeof(Cos)); memset(Sin,0,sizeof(Sin)); length=0; for(int i=0;i<n;i++){ scanf("%d%d",&node[i].x,&node[i].y); if(i>0){ int dx=node[i].x-node[i-1].x; int dy=node[i].y-node[i-1].y; seg[i]=sqrt(dx*dx+dy*dy); length+=seg[i];///seg 从1开始 Sin[i]=dy/seg[i],Cos[i]=dx/seg[i]; } } mid=length/2; length=0; for(int i=1;i<n;i++){ if(length+seg[i]>=mid){ if(length+seg[i]==mid){ ans_x=node[i].x,ans_y=node[i].y; break; } double temp=length+seg[i]-mid; double yy=temp*Sin[i]; double xx=temp*Cos[i]; ans_x=node[i].x*1.0-xx,ans_y=node[i].y*1.0-yy; break; } length+=seg[i]; } printf("%.1f %.1f\n",ans_x,ans_y); } return 0; }
[HihoCoder-1697]
思路:直接递归构造。因为先序遍历是 根节点-左子树-右子树,每次找最小的数作为当前子树的根节点,然后根据中序遍历左子树在左边,右子树在右边,先递归遍历左边,再递归遍历右子树。
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define inf 0x3f3f3f3f using namespace std; const int maxn=1e6+50; int node[maxn],n; void dfs(int l,int r){ if(l==r) return; int t=l; for(int i=l;i<r;i++) if(node[i]<node[t]) t=i; printf("%d\n",node[t]); dfs(l,t); dfs(t+1,r); } int main(){ while(scanf("%d",&n)!=EOF){ memset(node,0,sizeof(node)); for(int i=0;i<n;i++) scanf("%d",&node[i]); dfs(0,n); } return 0; }
[CodeChef-C3PBR3]
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int maxn=1e4+50;; long long c[maxn][maxn],ans; int temp[maxn],n; void comb(int nn){ for(int i=0;i<=nn;i++){ c[i][0]=1; for(int j=1;j<=nn;j++){ c[i][j]=c[i][j-1]*(i-j+1)/j; } } } int main(){ while(scanf("%d",&n)!=EOF){ comb(n); memset(temp,0,sizeof(temp)); ans=0; for(int i=0;i<n;i++){ scanf("%d",&temp[i]); } sort(temp,temp+n); for(int i=0;i<n;i++){ for(int j=0;j<=min(i,n-i-1);j++){ ans+=c[i][j]*temp[i]*c[n-i-1][j]; } } printf("%d\n",ans); } return 0; }
-
密码相似度评估(用到余弦相识度的数学算法知识)
2020-04-02 09:39:40首先是对余弦相识度的数学算法知识的回忆 首先我们从余弦函数说起 30度45度60度90度的余弦、正切、正弦、余切所对应的值如...根据勾股定理 OA²= X11² + X12² OB²=X21² + X22² AB²=(X12-X22)² + (X21-X11... -
平面三角形与三角函数(3):三角函数的有限和公式、斜三角形基本定理、公式和解法
2016-03-04 12:52:37§7 三角函数的有限和公式 *三角函数的有限和公式 ...*正弦定理 ...*余弦定理 ...注:在直角三角形ABC(C为直角中),从余弦定理可得到勾股定理: *正切定理 *半角定理 其中 为三 -
已知三角形三点坐标求角度_三角形中的等式关系专题
2020-12-04 04:47:15本文总结了三角形中常用的公式,主要通过三角形的三个内角、三条边长、以及三个顶点坐标,结合...边角关系正弦定理: 余弦定理:第一种形式: 第二种形式: 第三种形式(角元形式): 特殊情况:勾股定理正切定理: ... -
数学准备
2017-12-07 11:10:09勾股定理的证明 正弦值(sin)是在直角三角形中,对边的长比上斜边的长的值。 任意锐角的正弦值等于它的余角的余弦值,任意锐角的余弦值等于它的余角的正弦值。 -
我写的一个模拟管道算法
2017-06-19 15:15:22利用部分直角三角形的特点,如勾股定理,正弦,余弦函数。其它人估计看不懂。 自己留个记念。借用Flex 中的线段工具 起点端点移动,产生类似管道流动的效果。加油,努力 。奋斗 。 ///初始化 if (Fle -
js数学公式-曲线运动
2019-11-15 16:40:00---勾股定理 a*a + b*b =c*c ---三角函数 正弦 : sin 余弦 : cos 正切 : tan 余切 : cot 正弦定理 a/sinA = b/sinB =c/sinC = 2r(r为外接圆半径) 余弦定理 cosA = b*b + c*c - a*a / 2bc cosB = c*c +... -
数学和物理太难?这些动图让你秒懂抽象概念
2020-04-10 21:58:00数学动图△ 从椭圆的一个焦点射出的光线总会通过另一个焦点。△ 真人版。△ 一图看懂正弦、余弦和正切什么意思。△ 圆的面积。△ 如何理解圆的面积和派的关系。△ 勾股定理演示。直角三角形的... -
java求sin函数咋写_知识梳理 | 锐角三角函数
2020-12-03 09:23:19勾股定理还是相似三角形定理?其实,三角形作为最稳定的图形,它的边角关系也是有趣得很呢~今天包sir就带大家认识认识锐角三角函数---sin、cos、tan他们三兄弟可是出了名的关系好呦!具体有什么关系呢,下文揭晓~~... -
数学和物理太难?这些 GIF 让你秒懂抽象概念
2018-12-06 11:13:00把科学带回家,给孩子最好的科学教育 觉得数学和物理很抽象很难懂吗?今天我们来分享一组数学和物理相关的动图,让你秒懂抽象概念。...△ 勾股定理演示。直角三角形的两条直角边的平方和(两个小正方形的面积... -
2018icpc EC-final F gym102056
2020-11-25 02:15:544.常规相交:分别求出S、T与球相切这段的距离(勾股定理)、求出绕球(圆切面)的弧线距离L =πR 这里求弧度需要用到余弦定理求H:正弦定理面积=H*L 上代码 #include<cstdio> #include<iostr... -
简单了解数学类
2012-11-08 23:28:00数学类: 包: 顶级 类: public final class Math 继承: Math—>...勾股定理: c*c = a*a+b*b; 正弦函数: sin@ = a/c; @*Math.PI = 弧度*180; 余弦函数: cos@ = b/c; 平方根: c = Math.s... -
开发一个表示坐标点的类Point,该类对外提供以下公有实例方法:
2019-08-12 21:33:43//开发一个表示坐标点的类Point,该类对外提供以下公有...//勾股定理 //f)求本点到另外一个点与x轴夹角的余弦值 //g)求本点到另外一个点与x轴夹角的正弦值 public class Point { int xPosition; int yPosition; ... -
第五十三篇 三角函数公式大全
2019-08-22 22:08:201. 单位圆 根据单位圆推出6个基本公式:(r=1) sinθ=y;(正弦函数)cosθ=x;(余弦函数)tanθ=y/x;(正切函数)cotθ=x/y;(余切函数)secθ=1/x;...根据勾股定理 sin^2θ+cos^2θ=... -
Flash/Flex学习笔记(48):反向运动学(下)
2010-05-06 13:34:00先要复习一下三角函数与余弦定理: 对于直角三角形,三边长a,b,c与三个角A,B,C的关系如下: 正弦函数: 余弦函数: 正切函数: 反正切函数:(好象现在的教科书里改叫“余切”函数) 或 勾股定律: ... -
Flash/Flex学习笔记(42):反向运动学(下)
2011-04-24 13:30:08先要复习一下三角函数与余弦定理: 对于直角三角形,三边长a,b,c与三个角A,B,C的关系如下: 正弦函数: 余弦函数: 正切函数: 反正切函数:(好象现在的教科书里改叫“余切”函数) 或 勾股定律: ... -
排序的练习题
2019-03-01 20:31:00今天LITTLESUN终于可以闯排序的关了! 先是刷了一道水题试炼一下STL的快...这道题如果注意到题目中的条件是勾股数很快就可以A掉,但如果惯性思维的用余弦定理来转换为正弦定理。在计算过程中会有部分测试点的数据范... -
Flash.ActionScript.3.0动画教程.pdf
2010-06-09 16:47:433.7 勾股定理 3.8 两点间距离 3.9 本章重要公式 3.10 小结 第4章 渲染技术 4.1 Flash中的颜色 4.1.1 使用十六进制表示颜色值 4.1.2 透明度和32位色 4.1.3 新的数值类型:int和uint 4.1.4 色彩合成 4.1.5 获取颜色值 ... -
[Flash.ActionScript.3.0动画教程
2014-09-15 09:26:253.7 勾股定理 3.8 两点间距离 3.9 本章重要公式 3.10 小结 第4章 渲染技术 4.1 Flash中的颜色 4.1.1 使用十六进制表示颜色值 4.1.2 透明度和32位色 4.1.3 新的数值类型:int和uint 4.1.4 色彩合成 4.1.5 获取颜色值 ... -
C程序范例宝典(基础代码详解)
2013-05-17 00:15:35实例162 正弦、余弦、正切值 236 实例163 自然对数的底e的计算 237 实例164 最大公约及最小公倍数 238 实例165 求解二元一次不定方程 239 实例166 二分法求解方程 241 实例167 牛顿迭代法解方程的根 242...
-
已知二叉树的前、中排序求后序
-
simplified1927298252005.zip
-
云计算时代:当大数据遇到敏捷
-
PostgreSQL IN vs EXISTS vs ANYALL vs JOIN性能分析
-
vue3从0到1-超详细
-
一天学完MySQL数据库
-
Day03 Java的一些基础
-
华为1+X——网络系统建设与运维(高级)
-
js base64加密java解密
-
云开发后台+微信扫码点餐小程序+cms网页管理后台 含后厨端和用户端
-
交互设计那些事儿(二)
-
闪电战-源码
-
很棒的android-person:很棒的android person-源码
-
飞秒激光湿法刻蚀和微固态技术在石英玻璃中制造3D螺线管微线圈
-
MySQL 四类管理日志(详解及高阶配置)
-
【爱码农】C#制作MDI文本编辑器
-
Android安装,求助大佬
-
没有英语基础,如何更好地学习Java编程
-
核心嵌入式异质纳米蝶形天线中的局部表面等离子体共振
-
双相调节和超宽带可调谐微机电系统谐振器的分析