向量运算(lua,三维) 点乘、叉乘、模、夹角
向量运算在游戏制作中经常用到,稍微总结一下。
一、点乘

如图,假设

向量a与b的点乘表示a在b上的投影与b的模的乘积
公式:


代码:
function MathHelper.GetVector3Dot(v1, v2)
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
end
二、叉乘
向量的叉乘,即求同时垂直两个向量的向量
公式:

代码:
-- 向量叉乘
function MathHelper.GetVector3Cross(v1, v2)
local v3 ={x = v1.y*v2.z - v2.y*v1.z , y = v2.x*v1.z-v1.x*v2.z , z = v1.x*v2.y-v2.x*v1.y}
return v3
end
三、模
向量的长度
公式:

代码:
-- 向量的模
function MathHelper.GetVector3Module(v)
return math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z)
end
四、夹角
公式:

代码:
-- 求两向量间夹角
function MathHelper.GetVector3Angle(v1, v2)
local cos = MathHelper.GetVector3Dot(v1, v2)/ (MathHelper.GetVector3Module(v1)*MathHelper.GetVector3Module(v2))
return math.acos(cos) * / math.pi
end
完整代码:
MathHelper = {}
-- 向量点乘
function MathHelper.GetVector3Dot(v1, v2)
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
end
-- 向量叉乘
function MathHelper.GetVector3Cross(v1, v2)
local v3 ={x = v1.y*v2.z - v2.y*v1.z , y = v2.x*v1.z-v1.x*v2.z , z = v1.x*v2.y-v2.x*v1.y}
return v3
end
-- 向量的模
function MathHelper.GetVector3Module(v)
return math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z)
end
-- 求两向量间夹角
function MathHelper.GetVector3Angle(v1, v2)
local cos = MathHelper.GetVector3Dot(v1, v2)/ (MathHelper.GetVector3Module(v1)*MathHelper.GetVector3Module(v2))
return math.acos(cos) * / math.pi
end
向量运算(lua,三维) 点乘、叉乘、模、夹角的更多相关文章
- Unity 三角函数 向量 运算
其实三维的和二维的基本差不多,一样的运算方式,unity已经把所有的方法都封装起来,主要是理解,能理解了就直接调用了 三角函数 知识点:三角函数基础正玄余玄.三角函数曲线.弧度制和角度制.弧度制和角度 ...
- 3D数学读书笔记——向量运算及在c++上的实现
本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 ...
- UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)
Problem ATriangle Fun Input: Standard Input Output: Standard Output In the picture below you can see ...
- 向量运算 与 JavaScript
二维向量都包含两个值:方向(direction)及大小(magnitude) 这两个值可以表达出各种各样的物理特性来,比如力和运动.如两个物体间的碰撞检测. 向量的大小 虽说二维向量是对大 ...
- Eigen中的矩阵及向量运算
Eigen中的矩阵及向量运算 ,[+,+=,-,-=] ,[\*,\*=] ,[.transpose()] ,[.dot(),.cross(),.adjoint()] ,针对矩阵元素进行的操作[.su ...
- 快速电路仿真器(FastSPICE)中的高性能矩阵向量运算实现
今年10-11月份参加了EDA2020(第二届)集成电路EDA设计精英挑战赛,通过了初赛,并参加了总决赛,最后拿了一个三等奖,虽然成绩不是很好,但是想把自己做的分享一下,我所做的题目是概伦电子出的F题 ...
- python3 定义向量运算
from math import hypot #定义向量的构造方法 class Vector: def __init__(self,x=0,y=0): self.x=x; self.y=y; ''' ...
- 基础向量运算-2D镜面反射
如图M为镜面,A为入射光,B为反射光,已知A与M的向量坐标,求B的向量表示. 我们添加辅助向量C. 有以下性质. B = 2 * C - A. [1] |C| = |A| * cos(alpah).A ...
- 来一波全套向量运算(C++)
//头文件要求 #include <cmath> struct P{long long x, y;}p[N]; //加法 P operator +(P x, P y){return (P) ...
随机推荐
- Spring+shiro session与线程池的坑
在java web编程中,经常使用shiro来管理session,也确实好用 shiro来获取session的方式 SecurityUtils.getSubject().getSession() 其中 ...
- quartz中的corn表达式
一个Quartz的CronTrigger表达式分为七项子表达式,其中每一项以空格隔开,从左到右分别是:秒,分,时,月的某天,月,星期的某天,年:其中年不是必须的,也就是说任何一个表达式最少需要六项! ...
- DIV盒子模型介绍 div用法
- TCP拥塞控制算法
转自浅谈TCP拥塞控制算法 本篇文章介绍了几种经典的TCP拥塞控制算法,包括算法原理及各自适用场景. 回顾上篇文章:浅谈 redis 延迟 前言 TCP 通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的 ...
- 【转载】Python tips: 什么是*args和**kwargs?
转自Python tips: 什么是*args和**kwargs? 先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwa ...
- Python 文件writelines() 方法和处理双层列表
概述 writelines() 方法用于向文件中写入一序列的字符串. 这一序列字符串可以是由迭代对象产生的,如一个字符串列表. 换行需要制定换行符 \n. 语法 writelines() 方法语法如下 ...
- Error, DNGuard Runtime library not loaded!
// Token: 0x06008CE9 RID: 36073 RVA: 0x0059629A File Offset: 0x00591E9A [MethodImpl(MethodImp ...
- 手把手教你用蒲公英获取udid
如果需要获取udid,但是拥有手机的测试用户身边没有mac电脑和xcode环境, 今天就分享一个快捷的在线获得udid的方法 利用蒲公英网站的获取udid功能 手机浏览器访问 http://www.p ...
- 使用Pull解析器生成XML文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- 机器学习之保存与加载.pickle模型文件
import pickle from sklearn.externals import joblib from sklearn.svm import SVC from sklearn import d ...