View difference between Paste ID: BJ2NY9Pc and CH9tbHAs
SHOW: | | - or go back to the newest paste.
1-
function tocell(vec)
1+
local center = cellsize / 2
2-
	return Vector3.new(math.ciel(vec.x/cellsize),math.ciel(vec.y/cellsize),math.ciel(vec.z/cellsize))
2+
3
function align(x)
4
	return math.floor(x + 0.5) + center
5-
function toworld(vec)
5+
6-
	return (vec-Vector3.new(.5,.5,.5))*cellsize
6+
7
function getCellsWithinRadius(Point, Radius)
8
	local Point = Point * cellsize
9-
function cellsinrange(pos,radius)
9+
	local HalfRadius = (Radius * cellsize) / 2
10-
	local diameter=math.ciel((radius*2)/cellsize)
10+
	local near = {}
11-
	local hdiameter=diameter*.5
11+
12-
	local cells={}
12+
	for x = Point.X - HalfRadius, Point.X + HalfRadius do
13-
	for xcell=1,diameter do
13+
		local fx = align(x)
14-
		for ycell=1,diameter do
14+
		for y = Point.Y - HalfRadius, Point.Y + HalfRadius do
15-
			for zcell=1,diameter do
15+
			local fy = align(y)
16-
				local cellpos=tocell(pos+toworld(Vector3.new(xcell-diameter,ycell-diameter,zcell-diameter)))
16+
			for z = Point.Z - HalfRadius, Point.Z + HalfRadius do
17-
				if (toworld(cellpos)-pos).magnitude<=radius then
17+
18-
					table.insert(cells,Vector3.new(cellpos.x,cellpos.y,cellpos.z))
18+
				local v3p = Vector3.new(fx, fy, align(z))
19
				if ((Point - v3p).magnitude < Radius) then
20
					table.insert(near, v3p)
21
				end
22
			end
23-
	return cells
23+
24
	end
25
26
	return near
27
end