How I Can Pet Movement Inverse Circle Position

My Full Code

local PetsFolder = Instance.new("Folder",workspace)
PetsFolder.Name = "Pets"


local RunService = game:GetService("RunService")

local fullCircle = 2 * math.pi
local radius = 10

local function getXAndZPositions(angle)
	local x = math.cos(angle) * radius
	local z = math.sin(angle) * radius
	return x, z
end

local radius = 10

local MainLERP = 0.01;

local LerpMultipier = 1

local function getCirclePoint(ItemNumber,TotalNumber)
	
	if TotalNumber <= 2 then
		return (ItemNumber * math.pi)
	elseif TotalNumber == 3 then
		return (ItemNumber * (math.pi*1.5) / 3)
	else 
		return (ItemNumber * ((2 * math.pi) / TotalNumber))
	end
	
	--return (ItemNumber * math.pi) --(ItemNumber * ((2 * math.pi) / TotalNumber))
	
end


game.ReplicatedStorage.PetActionEvent.OnServerEvent:Connect(function(plr,stat,char,petfolder)
	if stat == "Move" then
		
		
		
		
		
		if PetsFolder:FindFirstChild(plr.Name) and plr.Character then
			
			local hmndrootpart = plr.Character.PrimaryPart
			
			local petsTable = {}
			
			
			for i,v in pairs(PetsFolder[plr.Name]:GetChildren()) do
				if v:IsA("Model") then
					table.insert(petsTable,v)
				end

			end
			
			
			
			for i,v in pairs(petsTable) do
				
				if v.ClassName and v:IsA("Model") and v.PrimaryPart and v.PrimaryPart:IsA("BasePart") then
					
					
					
					
					
					
					if v:FindFirstChild("PetID") then
						
						
						
						local LERP_ALPHA = MainLERP * (char.Humanoid.WalkSpeed / LerpMultipier);
						
						
						
						local list = {}

						for _, v in pairs(game:GetService("Players"):GetPlayers()) do
							for _, q in pairs(v.Character:GetDescendants()) do
								if q:IsA("BasePart") then
									table.insert(list, q)
								end
							end
						end

						for i,v in pairs(PetsFolder:GetDescendants()) do
							if v:IsA("BasePart") then
								table.insert(list,v)
							end
						end

						local rayParam = RaycastParams.new()
						rayParam.FilterType = Enum.RaycastFilterType.Blacklist

						rayParam.FilterDescendantsInstances =  list

						local raycastResult = workspace:Raycast(v.PrimaryPart.Position, v.PrimaryPart.Position - Vector3.new(0, 100, 0), rayParam)


						if raycastResult then
							local Object = raycastResult.Instance

							if Object then
								local petCframe = v.PrimaryPart.CFrame
								local characterCframe = hmndrootpart.CFrame
								
								local angle = getCirclePoint(i,#petsTable)

								local position = (CFrame.new(hmndrootpart.CFrame * Vector3.new(math.cos(angle) * 5, 0, math.sin(angle) * 5))) --  hmndrootpart.CFrame * CFrame.new(math.sin(angle) * radius, 0 , math.cos(angle) * radius))

								local newCframe = petCframe:Lerp(position, LERP_ALPHA)
								v.PrimaryPart.CFrame = newCframe
								v.PrimaryPart.CFrame = CFrame.new(v.PrimaryPart.CFrame.X, (Object.Position.Y + (Object.Size.Y /2)) + (v.PrimaryPart.Size.Y/2) ,v.PrimaryPart.CFrame.Z)
								
							else
								local petCframe = v.PrimaryPart.CFrame
								local characterCframe = hmndrootpart.CFrame

								local angle = getCirclePoint(i,#petsTable) 

								local position = CFrame.new(hmndrootpart.CFrame * Vector3.new(math.cos(angle) * 5, 0, math.sin(angle) * 5)) --local position = (hmndrootpart.CFrame * CFrame.new(math.sin(angle) * radius, 0 , math.cos(angle) * radius))

								local newCframe = petCframe:Lerp(position, LERP_ALPHA)
								v.PrimaryPart.CFrame = newCframe
								
							end
							
						else
							local angle = getCirclePoint(i,#petsTable) 
							
							v.PrimaryPart.CFrame = CFrame.new(hmndrootpart.CFrame * Vector3.new(math.cos(angle) * 5, 0, math.sin(angle) * 5)) --(hmndrootpart.CFrame * CFrame.new(math.sin(angle) * radius ,0, math.cos(angle) * radius))
							local newraycastResult = workspace:Raycast(v.PrimaryPart.Position, v.PrimaryPart.Position - Vector3.new(0, 100, 0), rayParam)
							
						end
						
					else
					
					game:GetService("Debris"):AddItem(v,0)
					
					end
					
			end
			
			
			end
			
		end
	end
end)


PetsFolder.ChildAdded:Connect(function(addedItem)
	task.wait()
	if addedItem:IsA("Folder") and game.Players:FindFirstChild(tostring(addedItem.Name)) then
		
		
		addedItem.ChildAdded:Connect(function(addedItem2)
			task.wait()
			
			if game.Players:FindFirstChild(addedItem.Name) and addedItem2:IsA("Model") and addedItem2.PrimaryPart then

				local function setNetworkOwnerOfModel(model, networkOwner)
					for _, descendant in pairs(model:GetDescendants()) do
						if descendant:IsA("BasePart") then
							if descendant:CanSetNetworkOwnership() then
								descendant:SetNetworkOwner(networkOwner)
							end
						end
					end
				end

				setNetworkOwnerOfModel(addedItem2, game.Players:FindFirstChild(addedItem.Name))
			else
				game:GetService("Debris"):AddItem(addedItem2,0)
			end
			
			
		end)
		
		
	end
end)



game.Players.PlayerAdded:Connect(function(plr)
	
	local newPlayerFolder = Instance.new("Folder",PetsFolder)
	newPlayerFolder.Name = plr.Name
	
end)


game.Players.PlayerRemoving:Connect(function(plr)
	
	if PetsFolder:FindFirstChild(plr.Name) then
		game:GetService("Debris"):AddItem(PetsFolder[plr.Name], 0)
	end
	
end)

still need help .-.-.-.-.-.----…-.