DIVs em círculo dinamicamente

O código abaixo produziu um efeito legal de posicionamento em círculo, calculando o seno e cosseno dos ângulos de cada div para gerar as coordenadas ao redor de um ponto. O código está em VBScript com ASP, mas pode ser feito em qualquer linguagem de programação para web, como JavaScript. Para testar a formação em círculo, é só passar a quantidade de divs a ser geradas através do parâmetro "n" na URL. Por exemplo: testecirc.asp?n=5

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
centroX = 400
centroY = 400
raio = 200
numPontos = Request("n")
If numPontos < 1 Then : numPontos = 1
angulo = 360 / (numPontos + 1)
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Teste de menu em círculo</title>
</head>
<body onload="document.myForm.n.select();">
<%
For i = 1 to numPontos
x = Round(centroX + Cos(angulo * i) * raio)
y = Round(centroY + Sin(angulo * i) * raio)
Response.Write "<div style=""position: absolute; left: "
Response.Write x & "px; "
Response.Write "top: "
Response.Write y & "px;"">"
Response.Write i & " ° (" & x & ", " & y & ")</div>" & VbCrLf
Next
%>
<form action="" method="get" name="myForm">
<label for="n">Nº de pontos: </label>
<input name="n" type="text" value="<%= numPontos %>" size="11" maxlength="11" />
<input name="submit" type="submit" value="Testar" />
</form>
</body>
</html>

As variáveis centroX e centroY servem para determinar o ponto central do círculo que será formado pelas divs. Raio é o raio do círculo em pixels.

A linha numPontos = Request("n") recebe a variável "n" passada como parâmetro na URL. Em seguida, o script verifica se o valor é menor que 1 e estabelece o valor mínimo de 1 para evitar um erro, caso numPontos seja igual a 0 (zero).

Com todas as variáveis na mão, o cálculo faz a iteração entre os ângulos em que cada div vai ficar calculando as coordenadas de cada div.

Este teste serve apenas para exemplificar, pois o resultado não sai sempre como esperado, embora as coordenadas obedeçam sempre o raio que foi determinado. Experimente verificar outras fontes de consulta e aprimorar a fórmula para produzir resultados mais precisos.