(es) El baile de los primos
(eo) Primobalo
http://dx.doi.org/10.13140/RG.2.2.34092.90243 
Descripción artística:
Los números primos danzando junto con los números compuestos al rededor del número uno.
Motivación:
Una lectura sobre la Esprial de Sacks y sus curiosidades.
Descripción técnica:
Es una espiral polar de la forma , con , y , con ,  y  medido en revoluciones. Para cada  se dibujó un círculo de color negro si es primo y griz si es compuesto.
Esta construcción se conoce como la Espiral de Sacks.
Alineaciones libres de números primos:
- Semirrecta horizontal derecha: cuadrados perfectos.
- Línea inmediatamente inferior a la anterior: números de la forma , divisibles siempre por y .
- Semirrecta horizontal izquierda: números de la forma , divisibles siempre por y .
Curvas aparentemente densas en números primos:
- Una espiral que, en la ilustración, termina cerca de la parte inferior del disco: números de la forma , el polinomio descubierto por Euler.
- Otra espiral situada varios lugares por encima de la anterior: números de la forma .
- Línea inmediatamente superior a la semirrecta horizontal izquierda: números de la forma .
Código (CFDG):
# Copyright 2015 Eduardo Adam Navas López
# Este archivo es Software Libre liberado bajo la licencia GNU GPLv3 o su versión más reciente:
# http://www.gnu.org/licenses/gpl.html
#Para generar la imagen:
#$ cfdg -b 0 -s 8000 sacks.cfdg sacks.png
CF::Size = [s 202 202]
startshape espiral
NUMREVOLUCIONES = 100
LIMITE = NUMREVOLUCIONES*NUMREVOLUCIONES
VUELTA = 360
esPrimo_aux(n, i, lim) =
 if(i <= lim,
  if(mod(n,i),
   esPrimo_aux(n, i+1, lim),
   0),
  1)
esPrimo(numero) = esPrimo_aux(numero, 2, floor(sqrt(numero)))
shape espiral {
 curva[]
 loop i = LIMITE []  {
  n = i+1
  ang = VUELTA * sqrt(n)
  rad = sqrt(n)
  CIRCLE[x (rad * cos(ang)) y (rad * sin(ang)) 
   b if(esPrimo(n), 0, 0.75)]
 }
 CIRCLE[x 0 y 0 b 1 h 0 sat 1 s 0.5]
 loop i = LIMITE []  {
  n = i+LIMITE
  ang = VUELTA * sqrt(n)
  rad = sqrt(n)
  CIRCLE[x (rad * cos(ang)) y (rad * sin(ang)) 
   b if(esPrimo(n), 0, 0.75)]
 }
}
path curva{
 MOVETO(0,0)
 loop i = LIMITE []  {
  n = i+1
  ang = VUELTA * sqrt(n)
  rad = sqrt(n)
  LINETO((rad * cos(ang)), (rad * sin(ang)) )
 }
 STROKE(0.05)[]
 #STROKE()[]
}
 
No hay comentarios:
Publicar un comentario