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 属性指定元素的那个盒 ...
随机推荐
- [iOS]数据库第三方框架FMDB详细讲解
[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...
- 如何将EXCEL表导入MYSQL
在平时的工作学习中,难免会遇到需要把EXCEL表中的数据导入到MYSQL中,比如要把EXCEL中的数据进行核对,或者要把测试用例导入到TestLink中.本人搜集相关的资料并加以实践总 ...
- Laravel-高级篇-Artisan
(慕课网_轻松学会Laravel-高级篇_天秤vs永恒老师_http://www.imooc.com/learn/702) 一.概述 Artisan是Laravel中自带的命令行工具的名称 由强大的S ...
- The secret of ROWID
表里每个数据行都有一个行头部,在这里存放了该行数据所包含的列的数量,以及锁定标记等.当某个事务更新某条记录时,会在该数据行的头部记录所用到的ITL槽号以及锁定标记.接下来则是列长度以及列的值.Orac ...
- Eclipse导出jar包Unity打包错误
前几天接SDK使用的是Android Studio昨天打开AndroidStudio后自动更新了gradler然后失败了然后AndroidStudio就挂了.就是用之前的方法Eclipse到处jar包 ...
- openssl 非对称加密算法RSA命令详解
1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很 ...
- 转载: Javah生成JNI头文件出现找不到类的错误
错误: 找不到 'com.chnic.jni.SayHellotoCPP' 的类文件. 上图可以看到错误和解决办法. 不要忘记那个点 javah -classpath . -jni com.chnic ...
- Geodatabase - 删除要素
//删除要素类. //例如:workspacePath=@"G:\doc\gis\1.400\data\pdb.mdb", featureClassPath="res2_ ...
- MySql安装与卸载
win2003下MySql的配置 准备相关组件 1.MySql安装包 mysql-installer-commercial- 5.6.14.0.msi 2.Microsoft .NETFramewor ...
- SQL中将某个表中的多行数据在一个字段显示
项目需求:将某个表中的多行数据在一个字段显示,如下: 比如表A中有字段 ID,NAME, 表B中有字段ID,PID,DES, 表A,表B中的数据分别如下: ID NAME1 张三2 李四 ID PID ...