2个2D向量计算交点的夹角和补角
2维向量如何计算与某一个交点之间的夹角,假设A,B是向量,C是他们共同连接的一个点计算出A-C-B形成的角度

我们先了解几个简单的计算:
| 2D向量的乘积计算 | (A.x * B.x + A.y * B.y) | |
| 2D向量的取摸 | 开平方(A.x * A.x + A.y * A.y) | |
| 弧度转换角度 | 弧度 除以 圆周率 再乘以180 | |
| 角度转换弧度 | 角度 乘以 圆周率 后再除以180 | |
| 补角 | 计算方式1: 补角 = 180 - 正角. 计算方式1: 两个向量方向一正一反就可以计算出补角 |
如果你理解了以上公式,那么来看看如何计算夹角的公式,两向量夹角余弦等于向量数量积除以两向量模的乘积
公式1: cos角度=(ac+bd)/( 根号(a*a+b*b) ) * ( 根号(c*c+d*d))
推导1: 弧度= 反cos((ac+bd)/(根号a*a+b*b) * (根号(c*c+d*d)))
推导2: 角度= 反cos((ac+bd)/(根号a*a+b*b) * (根号(c*c+d*d))) / 圆周率 * 180;
公式代码实现:
public void JiSun()
{
hudu = Math.Acos(
(ac.x * cb.x
+ ac.y * cb.y)
/ (Mathf.Sqrt(ac.x * ac.x + ac.y * ac.y)
* Mathf.Sqrt(cb.x * cb.x + cb.y * cb.y))); //弧度转换角度
jiajiao = hudu / Math.PI * 180;
补角.text = jiajiao + "度";
}
项目源码:http://yunpan.cn/cdrmEcDjfSDMD 访问密码 d262
效果图:


工程代码:
using UnityEngine;
using System.Collections;
using UnityEditor;
using System; public class Test : MonoBehaviour { public Transform a;
public Transform b;
public Transform c;
public TextMesh 正角;
public TextMesh 补角; // Update is called once per frame
void Update () { Vector3 ac = a.position - c.position;
Vector3 bc = b.position - c.position;
Vector3 cb = c.position - b.position; /*
* cos<A,B>=(ac+bd)/(根号a*a+b*b)(根号c*c+d*d)
* 两向量夹角余弦等于向量数量积除以两向量模的乘积
*/
double hudu = Math.Acos(
(ac.x * bc.x
+ ac.y * bc.y)
/ (Mathf.Sqrt(ac.x * ac.x + ac.y * ac.y)
* Mathf.Sqrt(bc.x * bc.x + bc.y * bc.y)));
//弧度转换角度
double jiajiao = hudu / Math.PI * 180; 正角.text = jiajiao + "度";
//补角.text = (180 - jiajiao) + "度"; hudu = Math.Acos(
(ac.x * cb.x
+ ac.y * cb.y)
/ (Mathf.Sqrt(ac.x * ac.x + ac.y * ac.y)
* Mathf.Sqrt(cb.x * cb.x + cb.y * cb.y))); //弧度转换角度
jiajiao = hudu / Math.PI * 180;
补角.text = jiajiao + "度"; } //绘制线段
public void OnDrawGizmos()
{
Gizmos.DrawLine(a.position, b.position);
Gizmos.DrawLine(a.position, c.position);
Gizmos.DrawLine(b.position, c.position);
} //以原点计算两个坐标的夹角
public void OriginAngle()
{
double hudu = Math.Acos(
(a.position.x * b.position.x
+ a.position.y * b.position.y)
/ (Mathf.Sqrt(a.position.x * a.position.x + a.position.y * a.position.y)
* Mathf.Sqrt(b.position.x * b.position.x + b.position.y * b.position.y))); double jiajiao = hudu / Math.PI * 180;
正角.text = jiajiao + "度";
} }
2个2D向量计算交点的夹角和补角的更多相关文章
- Everything Has Changed(HDU6354+圆交+求周长)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6354 题目: 题意:用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长( ...
- hdu6354 Everything Has Changed (圆的相交弧长)
题目传送门 题意: 用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长(图中的红线部分). 思路: 首先判定圆与圆A的关系,这题我们只需要与A内切.相交的圆. 然后就是求 ...
- 2D空间中求线段与圆的交点
出处: https://answers.unity.com/questions/366802/get-intersection-of-a-line-and-a-circle.html 测试脚本(返回值 ...
- 2D空间中求两圆的交点
出处:https://stackoverflow.com/questions/19916880/sphere-sphere-intersection-c-3d-coordinates-of-colli ...
- Morley's Theorem (计算几何基础+向量点积、叉积、旋转、夹角等+两直线的交点)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- 【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 2d 点云匹配算法
#include "dbtype.h" #include "dbkdtree.h" #include <pcl/point_cloud.h> #in ...
- UVA-12304 2D Geometry 110 in 1! (有关圆的基本操作)
UVA-12304 2D Geometry 110 in 1! 该问题包含以下几个子问题 CircumscribedCircle x1 y1 x2 y2 x3 y3 : 三角形外接圆 Inscribe ...
- CSS 3学习——transform 2D转换
首先声明一点,transform属性不为none的元素是它的定位子元素(绝对定位和固定定位)的包含块,而且对内创建一个新的层叠上下文. 注意:可以通过 transform-box 属性指定元素的那个盒 ...
随机推荐
- WPF与输入法冲突研究之一:百度输入法会导致WPF程序的崩溃!
在学习和使用了WPF一段时间之后,有点感觉WPF是个不太成熟的框架,不知道是我学的太肤浅,还是WPF得BUG太多! >>>>>>>模拟场景<<&l ...
- js iframe 跳转
iframe 页面内操作: //iframe指向指定页面 parent.document.getElementById("hot").src = $("#hidPageU ...
- MyBatis 通过包含的jdbcType类型和java中对应的数据类型
MyBatis 通过包含的jdbcType类型 BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED ...
- 优化移动体验的HTML5技巧
简介 连轴转的刷新,不断变向的页面转换,以及tap事件的周期性的延迟仅仅是现在移动web环境令人头疼事情的一小部分.开发者正试图尽可能的靠近原生应用,但却经常被各种兼容问题,系统复位,和僵化的框架打乱 ...
- dom4j解析接口使用SOAP传递的xml
xml 文件的格式类型: <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope ...
- Redis安全
安全 执行在可信环境 Redis的安全设计是在"Redis执行在可信环境"这个前提下做出的.在生产环境执行时不能同意外界直接连接到Redisserver上.而应该通过应用程序进行中 ...
- std::remove_if
原型: #include <algorithm>forward_iterator remove_if( forward_iterator start, forward_iterator e ...
- Javascript基础Function
函数声明与表达式 function someFunc(){ alert("这是一个函数"); } var func=function(){ alert("函数表达式&qu ...
- ASP.NET中在线用户统计
统计在线用户的作用不言而喻,就是为了网站管理者可以知道当前用户的多少,然后根据用户数量来观察服务器或者程序的性能,从而可以直观的了解到网站的吸引力或者网站程序的效率.现在,我们就介绍一个简单明了的方法 ...
- 一个Banner广告收缩效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...