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.