So I'm making a first person dueling system and for it I want to have 8 possible directions, all 45 degrees differentiated from each other. However to do this I need to find a way to get the direction the cameras panning. I first attempted to find the difference in camera angles using 2 look vectors and comparing the vectors using calculus (code below)

local player = game.Players.LocalPlayer
local mouse = player:GetMouse()

local function getDifference(U, V)
	local dotProduct = (U.X * V.X) + (U.Y * V.Y) + (U.Z * V.Z)
	local angle = math.acos(dotProduct/(U.Magnitude * V.Magnitude))
	return math.deg(angle)
end


local function toDegrees(v)
	local X = math.deg(v.X)
	local Y = math.deg(v.Y)
	local Z = math.deg(v.Z)
	return Vector3.new(X,Y,Z)
end

mouse.Button1Down:Connect(function()
	local U = toDegrees(game.Workspace.CurrentCamera.CFrame.LookVector)
	wait(3)
	local V = toDegrees(game.Workspace.CurrentCamera.CFrame.LookVector)
	print(getDifference(U, V))
end)

The issue is that it only measures the difference between the two points, meaning you can move on different axes, and get the same result.

I later tried the same code altering it slightly to Vector2 instead of Vector3 with the same outcome.

If anyone has any ideas for a way to find the camera panning or has already solved this problem and can offer a soloution it would much appreciated.