mirror of
				https://github.com/sbrl/Minetest-WorldEditAdditions
				synced 2025-11-04 05:53:07 +01:00 
			
		
		
		
	Vector3: add unit / normalise
This commit is contained in:
		
							parent
							
								
									c76a049286
								
							
						
					
					
						commit
						0a3680aa7d
					
				
							
								
								
									
										37
									
								
								.tests/Vector3/unit.test.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								.tests/Vector3/unit.test.lua
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
local Vector3 = require("worldeditadditions.utils.vector3")
 | 
			
		||||
 | 
			
		||||
-- To find these numbers, in Javascript:
 | 
			
		||||
-- function t(x) { return Math.sqrt((x*x)*3); }
 | 
			
		||||
-- for(let i = 0; i < 1000000000; i++) { let r = t(i); if(Math.floor(r) === r) console.log(`i ${i}, r ${r}`); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
describe("Vector3.unit", function()
 | 
			
		||||
	it("should work with a positive vector", function()
 | 
			
		||||
		local a = Vector3.new(10, 10, 10)
 | 
			
		||||
		assert.are.same(
 | 
			
		||||
			Vector3.new(57735, 57735, 57735),
 | 
			
		||||
			a:unit():multiply(100000):floor()
 | 
			
		||||
		)
 | 
			
		||||
	end)
 | 
			
		||||
	it("should work with a the normalise alias", function()
 | 
			
		||||
		local a = Vector3.new(10, 10, 10)
 | 
			
		||||
		assert.are.same(
 | 
			
		||||
			Vector3.new(57735, 57735, 57735),
 | 
			
		||||
			a:normalise():multiply(100000):floor()
 | 
			
		||||
		)
 | 
			
		||||
	end)
 | 
			
		||||
	it("should work with a negative vector", function()
 | 
			
		||||
		local a = Vector3.new(10, 10, 10)
 | 
			
		||||
		assert.are.same(
 | 
			
		||||
			Vector3.new(57735, 57735, 57735),
 | 
			
		||||
			a:unit():multiply(100000):floor()
 | 
			
		||||
		)
 | 
			
		||||
	end)
 | 
			
		||||
	it("should work with a mixed vector", function()
 | 
			
		||||
		local a = Vector3.new(-371635731, 371635731, -371635731)
 | 
			
		||||
		assert.are.same(
 | 
			
		||||
			Vector3.new(-57736, 57735, -57736),
 | 
			
		||||
			a:unit():multiply(100000):floor()
 | 
			
		||||
		)
 | 
			
		||||
	end)
 | 
			
		||||
end)
 | 
			
		||||
@ -208,6 +208,18 @@ function Vector3.set_to(a, length)
 | 
			
		||||
	return (a / a:length()) * length
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--- Returns the unit vector of this vector.
 | 
			
		||||
-- The unit vector is a vector with a length of 1.
 | 
			
		||||
-- Returns a new vector.
 | 
			
		||||
-- Does not change the direction of the vector.
 | 
			
		||||
-- @param	a		Vector3		The vector to operate on.
 | 
			
		||||
-- @returns	Vector3	The unit vector of this vector.
 | 
			
		||||
function Vector3.unit(a)
 | 
			
		||||
	return a / a:length()
 | 
			
		||||
end
 | 
			
		||||
--- Alias of Vector3.unit.
 | 
			
		||||
function Vector3.normalise(a) return a:unit() end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--- Return a vector that is amount distance towards b from a.
 | 
			
		||||
-- @param	a		Vector3		The vector to move from.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user