计算两向量的旋转角(转)
/* author : Navy@hust
* file : angle.c
* date : 5/12/2007
* desc : vector rotate angle calculation
/************************************************************************/
{
double x1, x2, y1, y2;
double dist, dot, degree, angle;
freopen("angle.in", "r", stdin);
while(scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2) == 4) {
printf("the rotate angle from p1 to p2 is %.3lf\n",
getRotateAngle(x1, y1, x2, y2));
}
}
/*
* 两个向量之间的旋转角
* 首先明确几个数学概念:
* 1. 极轴沿逆时针转动的方向是正方向
* 2. 两个向量之间的夹角theta, 是指(A^B)/(|A|*|B|) = cos(theta),0<=theta<=180 度, 而且没有方向之分
* 3. 两个向量的旋转角,是指从向量p1开始,逆时针旋转,转到向量p2时,所转过的角度, 范围是 0 ~ 360度
* 计算向量p1到p2的旋转角,算法如下:
* 首先通过点乘和arccosine的得到两个向量之间的夹角
* 然后判断通过差乘来判断两个向量之间的位置关系
* 如果p2在p1的顺时针方向, 返回arccose的角度值, 范围0 ~ 180.0(根据右手定理,可以构成正的面积)
* 否则返回 360.0 - arecose的值, 返回180到360(根据右手定理,面积为负)
*/
double getRotateAngle(double x1, double y1, double x2, double y2)
{
const double epsilon = 1.0e-6;
const double nyPI = acos(-1.0);
double dist, dot, degree, angle;
// normalize
dist = sqrt( x1 * x1 + y1 * y1 );
x1 /= dist;
y1 /= dist;
dist = sqrt( x2 * x2 + y2 * y2 );
x2 /= dist;
y2 /= dist;
dot = x1 * x2 + y1 * y2;
angle = 0.0;
else if ( fabs(dot+1.0) <= epsilon )
angle = nyPI;
else {
double cross;
angle = acos(dot);
//cross product
cross = x1 * y2 - x2 * y1;
// vector p2 is clockwise from vector p1
// with respect to the origin (0.0)
if (cross < 0 ) {
angle = 2 * nyPI - angle;
}
}
degree = angle * 180.0 / nyPI;
return degree;
}
计算两向量的旋转角(转)相关推荐
- matlab计算两向量的乘积,matlab中两个函数相乘
变量名最多不超过63个字符; ? 变量名区分大小写; ? Matlab提供的标准函数名以及命令名必须用小写字母; ? 变量名中不能包含空格.标点.运算符. 1.变量及其...... 中的元素; (2) ...
- c++做一个计算两向量夹角的程序
请测试,结果正好是90度#include<iostream> #include<cmath> using namespace std; #define PI 3.1415926 ...
- R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离、dist函数计算矩阵中两两元素的曼哈顿距离
R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离.dist函数计算矩阵中两两元素的曼哈顿距离 目录 R语言计算曼哈顿距离(Manhattan Distance ...
- R语言union函数计算数据对象(vector、list、dataframe)的并集:union函数计算两个vector向量、dataframe、列表list的并集
R语言union函数计算数据对象(vector.list.dataframe)的并集:union函数计算两个vector向量.dataframe.列表list的并集 目录
- python计算两个向量之间的欧氏距离
python计算两个向量之间的欧氏距离 代码: import numpy as np # 向量的值 feature_1 = np.array([1,2,3]) feature_2 = np.array ...
- sklearn计算两个向量之间的距离
from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import euc ...
- 计算两个向量的逆时针夹角
大多数的时候,计算两个向量或者直线的夹角就可以,通常在0~180°.然而,有的时候,需要知道向量到另一个向量按某一种旋转的角度,即0-360°,比如polygon的计算. MATLAB Code 计算 ...
- 两个向量之间的夹角公式_Python 计算任意两向量之间的夹角方法
如图所示,我们要计算任意两个向量之间的夹角. (图中的坐标数字是估计值,随手给定) python代码如下 import math AB = [1,-3,5,-1] CD = [4,1,4.5,4.5] ...
- Unity中如何判断两个向量的旋转角?
本文为转载自用 在游戏中经常用到的,已知两向量A, B ,求出A->B的旋转角.但U3D给出的Vector3.Angle()方法只能返回0到180度的向量夹角.如果想得到0到360度的旋转角,需 ...
- c++ 用 eigen与opencv计算两个向量的夹角,两个向量之间的夹角,向量的朝向
计算两个向量的夹角,两个向量之间的夹角 eigen: #include "Eigen/Dense" #include "Eigen/Geometry" usin ...
最新文章
- 成为顶尖算法专家需要知道哪些算法?
- python基础——logging、OS、sys、random、string模块(0424)
- 《作业控制系列》-“linux命令五分钟系列”之十
- vs2005常用调试快捷键 (转载)
- 知识库的构建 6-1 语义网 Semantic Web
- Python操作文件文档
- 使用JavaScript弹出Confirm对话框
- Opencv使用cv::matchTemplate进行模板匹配
- bootstrap-内联文本元素-斜体
- MODSCAN32的应用
- pe卸载win10更新补丁_Win10怎么卸载有问题更新补丁|Win10卸载更新补丁
- linux更改网卡缓存,Linux 网卡驱动学习(四)(缓存描述符 Buffer Description)
- 物联网实训Day 06
- sketchup边线设置_草图大师SketchUp改变模型边线颜色的方法
- 从JDBC规范谈桥接模式
- Windows系统自带工具介绍
- 【第47题】超级楼梯加强版 | 泰波那契数列
- git pack文件过大
- 安卓编译Release版本
- RK3399驱动开发 | 03 - WK2124串口芯片驱动调试
热门文章
- 选择华为帐号作为第三方登录的三个理由!
- 【Git】675- 让你的 commit 更有价值
- 程序员表白代码php,火热的程序员表白方式,调皮弹窗表白代码,赶紧拿去试试吧...
- Unity中通过ButtonClicked更换GameOgject纹理图片
- 股票中的情侣——配对交易(附:源码)
- 华为2019.8.22笔试题
- 脚本重启电信天翼网关
- 编译安装wpa_supplicant
- 用计算机画对称图形,CAD画对称图形快捷键
- beetl html模板,Beetl模板引擎之自定义html标签