(es) Sexo oral
(eo) Buŝa seksumado
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 que pasan por la circunferencia , más el dibujo de la elipse.
Archivos
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