Merge pull request #76 from xiejiangzhi/xjz

Add Vec3.angle_to
This commit is contained in:
shakesoda 2022-04-21 10:46:01 -07:00 committed by GitHub
commit 9b4b6e7fa7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 0 deletions

View File

@ -318,6 +318,11 @@ function vec3.flip_z(a)
return vec3.new(a.x, a.y, -a.z)
end
function vec3.angle_to(a, b)
local v = a:normalize():dot(b:normalize())
return math.acos(v)
end
--- Return a boolean showing if a table is or is not a vec3.
-- @tparam vec3 a Vector to be tested
-- @treturn boolean is_vec3

View File

@ -224,4 +224,30 @@ describe("vec3:", function()
temp = temp:flip_z()
assert.is.equal(temp, vec3(-1, -2, -3))
end)
it("get two 3-vectors angle", function()
local angle_to = function(a, b)
local deg = math.deg(a:angle_to(b))
return string.format('%.2f', deg)
end
local a = vec3(1,2,3)
assert.is.equal(angle_to(a, vec3(3, 2, 1)), '44.42')
assert.is.equal(angle_to(a, vec3(0, 10, 0)), '57.69')
assert.is.equal(angle_to(a, vec3(0, -12, -10)), '157.51')
a = vec3.unit_z
assert.is.equal(angle_to(a, vec3(0, 10, 0)), '90.00')
assert.is.equal(angle_to(a, vec3(-123, 10, 0)), '90.00')
assert.is.equal(angle_to(a, vec3(-10, 0, 10)), '45.00')
assert.is.equal(angle_to(a, vec3(-10, 0, -10)), '135.00')
assert.is.equal(angle_to(a, vec3(0, -10, -10)), '135.00')
assert.is.equal(angle_to(a, vec3(0, 0, -10)), '180.00')
assert.is.equal(angle_to(a, vec3(0, 0, 100)), '0.00')
a = vec3(100, 100, 0)
assert.is.equal(angle_to(a, vec3(0, 0, 100)), '90.00')
assert.is.equal(angle_to(a, vec3(0, 0, -100)), '90.00')
assert.is.equal(angle_to(a, vec3(-10, -10, 0)), '180.00')
assert.is.equal(angle_to(a, vec3.unit_z), '90.00')
end)
end)