Surfaces mathématiques

Génération des surfaces : Maya, Mel-Python.
Images : 3ds max, VRay.

Scripts

Un tutoriel traitant de la génération de surfaces en python sous Maya est disponible ici : Générer une surface mathématique.

kleinBottle.py
##
# Klein bottle
# p01 2010
# Maya python script
##
 
from math import sin, cos, pi
from maya.cmds import curve, ls, loft, delete
 
rad = 1
uRes = .1
vRes = .1
 
cvs = []
u = -pi
while u <= pi :
    pts = []
    v = -pi
    while v <= pi :
        x = cos(u) * (rad + sin(v) * cos(u/2) - sin(2*v) * sin(u/2)/2)
        y = sin(u) * (rad + sin(v) * cos(u/2) - sin(2*v) * sin(u/2)/2)
        z = sin(u/2) * sin(v) + cos(u/2) * sin(2*v)/2
        pts.append((x, y, z))
        v += vRes
    u += uRes
    curve(p=pts)
    cv = ls(sl=1)
    cvs.append(cv[0])
loft(cvs)
delete(cvs)
heartSurface.py
##
# Heart surface
# p01 2010
# Maya python script
##
 
from math import sin, cos, pi, pow, sqrt, fabs
from maya.cmds import curve, ls, loft, delete
 
zRes = .1
tRes = .1
cut = 0.9
 
cvs = []
z = -cut
while z <= cut :
    pts = []
    t = -pi
    while t <= pi :
        r = 4 * sqrt(1 - z*z) * pow(sin(fabs(t)), fabs(t))
        x = r * sin(t)
        y = r * cos(t)
        t += tRes
        pts.append((x, y, z))
    z += zRes
    curve(p=pts)
    cv = ls(sl=1)
    cvs.append(cv[0])
loft(cvs)
delete(cvs)
dinisSurface.py
##
# Dinis surface
# p01 2010
# Maya python script
##
 
from math import cos, sin, log, tan, pi
from maya.cmds import curve, ls, loft, delete
 
rad = 5
len = 1
laps = 3
inRad = 0.1
uRes = 0.3
vRes = 0.1
 
cvs = []
u = 0
while u <= laps*2*pi :
    pts = []
    v = 1.6
    while v <= pi-inRad :
        x = rad * cos(u) * sin(v)
        y = rad * sin(u) * sin(v)
        z = rad * (cos(v) + log(tan(v/2))) + len * u
        pts.append((x, y, z))
        v += vRes
    u += uRes
    curve(p=pts)
    cv = ls(sl=1)
    cvs.append(cv[0])
loft(cvs)
delete(cvs)
limpetTorus.py
##
# Limpet torus
# p01 2010
# Maya python script
##
 
from math import sin, cos, pi, sqrt
from maya.cmds import curve, ls, loft, delete
 
width  = 1
height = 1
length = 1
uRes = .3
vRes = .2
 
cvs = []
u = -pi
while u <= pi :
    pts = []
    v = -pi
    while v <= pi :
        x = cos(u) / (sqrt(width+1) + sin(v))
        y = sin(u) / (sqrt(height+1) + sin(v))
        z = (length+1) / (sqrt(length+1) + cos(v)) 
        pts.append((x, y, z))
        v += vRes
    u += uRes
    curve(p=pts)
    cv = ls(sl=1)
    cvs.append(cv[0])
loft(cvs, c=1)
delete(cvs)
pseudocatenoid.py
##
# Pseudocatenoid
# p01 2010
# Maya python script
##
 
from math import sin, cos, tan, pi
from maya.cmds import curve, ls, loft, delete
 
uRes = .2
vRes = .2
 
cvs = []
u = 0
while u <= 2 * pi :
    pts = []
    v = -pi
    while v <= pi :
        x = cos(u) * (2 + cos(v))
        y = sin(u) * (2 + cos(v))
        z = x*x - y*y + 2 * x * y * tan(v)*tan(v)
        pts.append((x, y, z))
        v += vRes
    u += uRes
    curve(p=pts)
    cv = ls(sl=1)
    cvs.append(cv[0])
loft(cvs, c=1)
delete(cvs)
tractrixBasedSurface.py
##
# Tractrix based surface
# p01 2010
# Maya python script
##
 
from math import cos, cosh, tanh, pi
from maya.cmds import curve, ls, loft, delete
 
uRes = .2
vRes = .2
 
cvs = []
u = 0
while u <= 2 * pi :
    pts = []
    v = -pi
    while v <= pi :
        x = cos(u) * (v - tanh(v))
        y = cos(u) / cosh(v)
        z = x*x - y*y + 2 * x * y * tanh(u)*tanh(u)
        pts.append((x, y, z))
        v += vRes
    u += uRes
    curve(p=pts)
    cv = ls(sl=1)
    cvs.append(cv[0])
loft(cvs, c=1)
delete(cvs)
triaxialHexatorus.py
##
# Triaxial hexatorus
# p01 2010
# Maya python script
##
 
from math import sin, cos, sqrt, pi
from maya.cmds import curve, ls, loft, delete
 
uRes = .2
vRes = .2
 
cvs = []
u = 0
while u <= 2 * pi :
    pts = []
    v = -pi
    while v <= pi :
        x = sin(u) / (sqrt(2) + cos(v))
        y = sin(u+2*pi/3) / (sqrt(2) + cos(v+2*pi/3))
        z = cos(u-2*pi/3) / (sqrt(2) + cos(v-2*pi/3))
        pts.append((x, y, z))
        v += vRes
    u += uRes
    curve(p=pts)
    cv = ls(sl=1)
    cvs.append(cv[0])
loft(cvs, c=1)
delete(cvs)