viernes, 20 de febrero de 2015

La piscina de los topólogos

(es) La piscina de los topólogos

(eo) Naĝejo por topologiistoj

La piscina de los topólogos

http://dx.doi.org/10.13140/RG.2.2.34092.90243

Descripción artística:

Una curva espiral que tiende a la circunferencia.

Motivación:

Los recuerdos de un curso de topología general.

Descripción técnica:

Es la curva polar definida por r= θ θ +1 , con θ 0 . Nótese que lim θ r=1 , por lo que la curva se acerca infinitesimalmente a la circunferencia unitaria, pero nunca la alcanza.
Formalmente hablando, la piscina del topólogo es el conjunto W=A S 1 , donde A es el conjunto de todos los puntos de la espiral descrita y S 1 es el conjunto de la circunferencia unitaria. Este conjunto es un ejemplo de un espacio topológico que es conexo pero que no es conexo por caminos.

Archivos

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 -s 8000 -b 1 piscina.cfdg piscina.png

CF::Size = [s 2 2]
startshape piscina

NUMREVOLUCIONES = 20.0
PI = 3.14159
VUELTA = 2*PI #360.0

LIMITE = VUELTA*NUMREVOLUCIONES #Límite de ángulo
NUMSEG = 10000 #Número de segmentos para formar la curva
gMin = 0.0001 #Grueso mínimo de la línea
gMax = 0.01 #Grueso máximo de la línea

#Color elegido
#rgb:(35,119,184)
#h:206,s:81,b:72
COLOR = 206
SATURACION = 0.81
bMax = 0.72 #Brillo máximo


path piscina {
 exponente = log(gMax/gMin)/(NUMSEG-1)
 
 MOVETO(LIMITE/(LIMITE+1), 0.0)
 loop i = NUMSEG []  {
  theta = LIMITE*(1-i/(NUMSEG-1))
  brillo = i*bMax/(NUMSEG-1)
  #grueso = i*(gMax-gMin)/(NUMSEG-1) + gMin
  grueso = gMin*exp(exponente*i)
 
  radio = theta / (theta+1)
  thetagrad = 180*theta/PI
  LINETO(radio * cos(thetagrad), radio*sin(thetagrad))
  STROKE(grueso, CF::RoundJoin+CF::RoundCap)[h COLOR sat SATURACION b brillo]
 }
}

#De referencia:
path circunferencia {
 ##Círculo unitario
 MOVETO(1,0)
 loop i = 360 []{
  LINETO(cos(i+1),sin(i+1))
 }
 STROKE(gMin)[]
}

No hay comentarios:

Publicar un comentario