jueves, 26 de febrero de 2015

Sexo oral

(es) Sexo oral

(eo) Buŝa seksumado

Sexo oral

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

Descripción artística:

Una vista de cunnilingus.

Motivación:

Ver el nombre.

Descripción técnica:

Una serie segmentos de rectas tangentes a la elipse x 2 + y 2 2 =1 que pasan por la circunferencia x 2 + y 2 =49 , más el dibujo de la elipse.

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 -b 0 -s 8000 sexo.cfdg sexo.png

startshape sexo4[h 14 sat 0.61 b 0.81]

pi = 3.14159265

#Número de rectas tangentes
MAXPASOS = 500

R = 7.0
aelipse = 1.0
belipse = 2.0

shape sexo4 {
 elipse[]
 loop i = MAXPASOS [] {
  th = 90 - i*180/(MAXPASOS-1) # 90 a -90
  Px = R*cos(th)
  Py = R*sin(th)
  ang_elipse = raiz1(Px,Py,-pi,pi)*180/pi
  elipsex = aelipse*cos(ang_elipse)
  elipsey = belipse*sin(ang_elipse)
  linea2(Px,Py,elipsex,elipsey, 0.01)[] #0.05)[]
  linea2(-Px,Py,-elipsex,elipsey, 0.01)[] #0.05)[]
 }
}

#Esta función localiza la primera raíz de la función 'funcion' en [-pi,pi]
raiz1(Px,Py,ini,fin) = 
 if(funcion(ini,Px,Py)*funcion(fin,Px,Py)>0.0,
  raiz1(Px,Py,ini,fin-0.12345),
  raiz(Px,Py,ini, (ini+fin)/2,fin)
 )

raiz(Px,Py,ini,med,fin) = 
 if(abs(funcion(med,Px,Py))<0.001, 
  med,
  if(funcion(ini,Px,Py)*funcion(med,Px,Py)<0.0,
   raiz(Px,Py,ini,(ini+med)/2,med),
   raiz(Px,Py,med,(med+fin)/2,fin)
  )
 )

#Esta función sólo tiene dos raíces en [-pi,pi]
#Ambos ángulos son los ángulos de los puntos de tangencia sobre la elipse
funcion(xx,Px,Py) = -aelipse * Py * sin(xx*180/pi) - belipse * Px * cos(xx*180/pi) + aelipse * belipse
#funcion(xx,Px,Py) = aelipse * belipse * sin(xx*180/pi)^2 - Py * aelipse * sin(xx*180/pi) + belipse * cos(xx*180/pi) * (aelipse * cos(xx*180/pi) - Px)

#Esta función devuelve la segunda raíz de la función 'funcion' en [-pi,pi]
raiz2(Px,Py,ini,fin) = 
 if(funcion(ini,Px,Py)*funcion(fin,Px,Py)>0.0,
  raiz1(Px,Py,ini+0.12345,fin),
  raiz(Px,Py,ini,(ini+fin)/2,fin)
 )

path linea(x1,y1,x2,y2){
 MOVETO(x1,y1)
 LINETO(x2,y2)
 STROKE(CF::RoundCap)[]
}

path linea2(x1,y1,x2,y2,tam){
 MOVETO(x1,y1)
 LINETO(x2,y2)
 STROKE(tam,CF::RoundCap)[]
}


shape sexo3 {
 elipse[]
 loop i = MAXPASOS [] {
 
  #th = i*360/(MAXPASOS-1) # 0 a 360
  #th = 90 - i*180/(MAXPASOS-1) # 90 a -90
  th = 90 - i*120/(MAXPASOS-1)  #90 a -30
  #th = 90 - i*90/(MAXPASOS-1)  #90 a 0

  Px = R*cos(th)
  Py = R*sin(th)
  ang_elipse = raiz1(Px,Py,-pi,pi)*180/pi
  elipsex = aelipse*cos(ang_elipse)
  elipsey = belipse*sin(ang_elipse)
  yx = (belipse*belipse*elipsex)/(aelipse*aelipse*elipsey)
  y2 = elipsey + yx * elipsex
  #linea(Px,Py,elipsex,elipsey)[]
  
  if (yx>0){
   xint1 = (yx*y2+sqrt(R*R*(yx*yx+1)-y2*y2))/(yx*yx+1)
   yint1 = -sqrt(R*R-xint1*xint1)
   linea(Px,Py,xint1,yint1)[]
   linea(-Px,Py,-xint1,yint1)[]
  }

  if (yx<0){
   xint2 = (yx*y2-sqrt(R*R*(yx*yx+1)-y2*y2))/(yx*yx+1)
   yint2 = -sqrt(R*R-xint2*xint2)
   linea(Px,Py,xint2,yint2)[]
   linea(-Px,Py,-xint2,yint2)[]
  }
 }
}

shape sexo2 {
 elipse[]
 loop i = MAXPASOS [] {
 
  th = i*90/(MAXPASOS-1)
  elipsex = aelipse*cos(th)
  elipsey = belipse*sin(th)
  yx = (belipse*belipse*elipsex)/(aelipse*aelipse*elipsey)
  y2 = elipsey + yx*elipsex
  
  xint1 = (yx*y2+sqrt(R*R*(yx*yx+1)-y2*y2))/(yx*yx+1)
  yint1 = sqrt(R*R-xint1*xint1)
  xint2 = (yx*y2-sqrt(R*R*(yx*yx+1)-y2*y2))/(yx*yx+1)
  yint2 = sqrt(R*R-xint2*xint2)
  
  linea(xint1,yint1,xint2,yint2)[]
 }
}

shape sexo1 {
 elipse[]
 loop i = MAXPASOS [] {
  #th = i*360/(MAXPASOS-1) # 0 a 360
  #th = 90 - i*180/(MAXPASOS-1) # 90 a -90
  th = 90 - i*120/(MAXPASOS-1)  #90 a -30
  #th = 90 - i*90/(MAXPASOS-1)  #90 a 0

  Px = R * cos(th)
  Py = R * sin(th)
  angulo = raiz1(Px,Py,-pi,pi)*180/pi
  elipsex = aelipse * cos(angulo)
  elipsey = belipse * sin(angulo)
  linea(Px,Py,elipsex,elipsey)[]
 }
}


shape elipse {
 loop i = MAXPASOS [] {
  th1 = i*360/(MAXPASOS-1)
  th2 = (i+1)*360/(MAXPASOS-1)
  xth1 = aelipse*cos(th1)
  yth1 = belipse*sin(th1)
  xth2 = aelipse*cos(th2)
  yth2 = belipse*sin(th2)
  linea2(xth1,yth1,xth2,yth2,0.05)[]
 }
}

No hay comentarios:

Publicar un comentario