Lua实现angle角

function i3k_vec3(x, y, z)
	return { x = x, y = y, z = z };
end
function i3k_vec3_normalize1(v)
	return i3k_vec3_normalize2(v.x, v.y, v.z);
end

function i3k_vec3_normalize2(x, y, z)
	local _x = x;
	local _y = y;
	local _z = z;

	local d = math.sqrt(_x * _x + _y * _y + _z * _z);
	if d ~= 0 then
		_x = _x / d;
		_y = _y / d;
		_z = _z / d;
	end

	return i3k_vec3(_x, _y, _z);
end
-- only x, z
function i3k_vec3_angle1(p1, p2, p3)
	return i3k_vec3_angle2(i3k_vec3(p1.x - p2.x, 0, p1.z - p2.z), p3);
end

function i3k_vec3_angle2(p1, p2)
	local _v1 = i3k_vec3_normalize1(p1);
	local _v2 = i3k_vec3_normalize1(p2);

	local epsilon = 0.000001;

	local dot = _v1.x * _v2.x + _v1.z * _v2.z;

	local angle = 0;

	if math.abs(dot - 1) <= epsilon then
		angle = 0;
	elseif math.abs(dot + 1) <= epsilon then
		angle = math.pi;
	else
		angle = math.acos(dot);

		local cross = _v1.x * _v2.z - _v2.x * _v1.z;
		if cross < 0 then
			angle = 2 * math.pi - angle;
		end
	end

	return angle;
end
时间: 2024-08-26 23:28:42

Lua实现angle角的相关文章

Lua自己实现angle角

function i3k_vec3_angle1(p1, p2, p3) return i3k_vec3_angle2(i3k_vec3(p1.x - p2.x, 0, p1.z - p2.z), p3); end function i3k_vec3_angle2(p1, p2) local _v1 = i3k_vec3_normalize1(p1); local _v2 = i3k_vec3_normalize1(p2); local epsilon = 0.000001; local dot

【转】LaTeX 符号命令大全

函数.符号及特殊字符 声调 语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha} \tilde{\iota} 函数 语法 效果 语法 效果 语法 效果 \sin\theta \cos\theta \tan\theta \arcsin\frac{L}{r} \arccos\frac{T}{r} \arctan\frac{L}{T} \sin

latex:备忘代码

1.脚注代码: \footnote{欧几里德,约公元前330--340年.} 结果为: 2.改变某个字的字体形状,表示强调 \emph{勾股定理} 结果为(勾股数这三个字与其他字不一样): 3.正文中引用坏境,将环境中的内容单独分行,增加缩进和上下间距排印,以突出引用的部分,不过,只使用quote环境不能达到预想的效果: 环境并不改变引用内容的字体.因此还需要在使用改变字体的命令 \begin{quote} \zihao{-5}\kaishu 引用内容 \end{quote} 例如:代码如下 我

托福分类词汇

托福分类词汇表(共17类863个常用单词) 一.   psychology 心理 1.       mental 心理的 2.       physical 身体的,物质的,物理的 3.       spiritual 心灵的 4.       conformity 从众 5.       majority 多数人 6.       minority 少数人 7.       threshold judgment (心理学)初始性判断 8.       subject 受实验对象 9.     

[转] 标点符号的英语

[From] https://www.zybang.com/question/444f3bf3e09d89075e0868bd03922c4d.html #, 找个公用电话机,随便拨个接入码,比如:201,然后就听到普通话按1,英语按2,这时候按2,然后它就会说:请输入卡号,按井号结束.and end with the hash key.这时候就能听到井号的英语是个啥:),就是这个hash key .井号的其他说法还有:In North America,"pound key" In s

摄像机视口屏幕投射

众所周知,当摄像机投影时,采用的是视觉圆锥进行的投射,类似手电筒向外照射光的时候. 在视觉圆锥内的就能被摄像机观察到. 但我们计算机屏幕是方形的,所以所显示的内容,只能是视觉圆锥的一部分,还有一部分被舍去了. 有两个关键点,一个是摄像机点,一个是观察点.观察点作为中心点,始终是显示的计算机屏幕中心的,我们可以把这个点作为基准点. 我们可以设定摄像机点与观察点始终是垂直于显示面的,也既计算机屏幕. 我们把视觉圆锥内所有的物体,由远及近向显示面(屏幕)进行投影,就形成了屏幕上显示的内容. 了解了视口

英文标点

根据网上的资料,标点符号的英语名称. . period or full stop 句号 , comma 逗号 : colon 冒号 : semicolon 分号 ! exclamation mark 惊叹号 ? question mark 问号 - hyphen 连字符 * asterisk 星号 ' apostrophe 所有格符号,单词内部的省略 — dash 破折号 _ underscore ‘ ’ single quotation marks 单引号 “ ” double quotati

MATLAB命令大全

一.常用对象操作:除了一般windows窗口的常用功能键外.1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看.2.who 可以查看当前工作空间变量名, whos 可以查看变量名细节.3.功能键:功能键 快捷键 说明方向上键 Ctrl+P 返回前一行输入方向下键 Ctrl+N 返回下一行输入方向左键 Ctrl+B 光标向后移一个字符方向右键 Ctrl+F 光标向前移一个字符Ctrl+方向右键 Ctrl+R 光标向右移一个字符Ctrl+方向左键 Ctrl+L 光标向左移

(标点/数学/...)符号的 英语/英文 表达

Edit 符号的英文表达 + plus 加:正 - minus 减:负 ± plus-minus 正负 * is multiplied by / multipication sign 乘 ÷ is divided by / division sign 除 = is equal to 等于 ≠ is not equal to 不等于 ≡ or === is equivalent to 全等于/恒等于 ? is approximately equal to or equal to / almost