Accueil Carrara : Index 

 

L'éditeur de formules de Carrara Studio - Page 1

A - Langage de programmation

0 - Introduction

Carrara Studio inclut un langage de programmation composé d'un certain nombre de fonctions prédéfinies.

L'application de ces fonctions retourne un résultat (expression,valeur) qui peut être lui-même passé en argument aux autres fonctions.

On pourra écrire, par exemple, quelque chose du genre sin(u>=2?sqrt(u-2):log(2-u))

Ce langage de programmation permet de définir mathématiquement et de construire des objets de l'espace ou du plan.

Il permet aussi de définir mathématiquement des transformations géométriques (modificateurs) que l'on pourra appliquer aux objets déjà existants (que l'on connaisse ou non les équations de ces objets).

Carrara Studio est par conséquent un logiciel 3D que les amateurs de logiciels mathématiques prendront plaisir à utiliser. 

1 - Fonctions intégrées

Les fonctions mathématiques usuelles sont présentes ainsi que les fonctions de comparaison et les fonctions booléennes de base.  
    
On trouve aussi une fonction conditionnelle:
      
(condition?expression1:expression2) retourne l'expression1 si la condition est vérifiée,sinon retourne l' expression2
  
Puisque (condition?expression1:expression2) retourne une expression ou une valeur,on peut écrire des choses de ce genre:
        
y = cos((condition?expression1:expression2)) ou bien z = x + (condition?expression1:expression2)
    
On peut aussi imbriquer les conditions les unes dans les autres :
         
(condition1?expression1:(condition2?expression2:(condition3?expression3:..:expressionN))...)

2 - Constructions de surfaces

Les surfaces sont déterminées sous la forme paramétrique:

(x = f(u,v) , y = g(u,v) , z = h(u,v))

où les paramètres u et v, prédéfinis, varient de 0 à 1 et où les symboles x, y et z sont prédéfinis eux-aussi.

Lorsque on ne souhaite pas être astreint à l'intervalle [0 , 1], on peut utiliser une nouvelle paramétrisation:

par exemple des paramètres p et q variant respectivement de pmin à pmax et de qmin à qmax tels que :

p = (pmax - pmin)*u + pmin
q = (qmax - qmin)*v + qmin


On a donc une surface donnée par un système du genre :

p = (pmax - pmin)*u + pmin
q = (qmax - qmin)*v + qmin
x = F(p,q)
y = G(p,q)
z = H(p,q)

3 - Remarque sur l'utilisation de l'éditeur de Carrara Studio

Il est préférable de taper son programme dans un éditeur ordinaire ou taitement de texte, et de faire ensuite un copier-coller dans l'éditeur de Carrara. C'est beaucoup plus agréable que d'écrire directement dans l'éditeur de Carrara qui, en entrée directe, n'accepte qu'un certain nombre limité de caractères. 

B -  Surfaces

Variables d'entrée

u , v : paramètres variant de 0 à 1

Variables de sortie

x , y , z : coordonnées locales du point défini par (u , v)

Les textures utilisées dans les exemples sont de simples grilles : grille H , grille HV , grille V 

1 - Exemple

a=3;c=4;
p=2*PI*(u-0.5);
q=4*v;
x=a*q*cos(p);
y=a*q*sin(p);
z=c*sqrt((q<=2?4-q*q:q-2));
exemple1.gif

2 - Exemple

p=2*PI*(u-0.5);
q=24*v;
c1=(q<11);
c2=(q<12);
c3=(q<23);
z1=-3*q/11+8;
z2=-q+16;
z3=(-3*q+80)/11;
z4=-q+24;
x=q*cos(p);
y=q*sin(p);
z=2*(c1?z1:(c2?z2:(c3?z3:z4)));
exemple2.gif

3 - Exemple

p=2*PI*u;
q=PI*v/2;
r=abs(cos(p)*sin(q))+abs(sin(p)*sin(q))+abs(cos(q))+
abs(cos(p)*sin(q)-sin(p)*sin(q))+abs(cos(p)*sin(q)+sin(p)*sin(q));
x=8*cos(p)*sin(q)/r;
y=8*sin(p)*sin(q)/r;
z=2*cos(q)/r;
exemple3.gif

4 - Exemple

a=1;c=8;m=9;n=9;
p=2*PI*(u-0.5);
x=a*v*(m*cos(p)-cos(n*p));
y=a*v*(m*sin(p)-sin(n*p));
z=-c*sqrt(v);
exemple4.gif

5 - Exemple

a=1;c=1;r=PI;s=PI;
p=2*PI*(u-0.5);
q=2*PI*(v-0.5);
x=a*p*cos(q);
y=a*q*cos(p);
z=-c*cos(r*p)*cos(s*q);
exemple5.gif

6 - Exemple

p=PI*u;
q=8*v;
x=4*cos(p);
y=0.75*q*sin(p);
z=-0.5*floor(q);
exemple6.gif

7 - Exemple (Surface de Boy : http://www.mathcurve.com/surfaces/boy/boy.shtml )

a=1;
p=PI*(u-0.5);
q=PI*v;
r1=pow(cos(q),2);
r2=cos(p)*sin(2*q);
r=2-sqrt(2)*sin(3*p)*sin(2*q);
x=a*(sqrt(2)*r1*cos(2*p)+r2)/r;
y=a*(sqrt(2)*r1*sin(2*p)+r2)/r;
z=3*a*r1/r;
exemple7.gif

8 - Exemple (Surface de Dini : http://mathworld.wolfram.com/DinisSurface.html )

a=2;b=0.25;
e=0.01;
p=6*PI*u;
q=(2-e)*v+e;
x=a*cos(p)*sin(q);
y=a*sin(p)*sin(q);
z=a*(cos(q)+log(tan(q/2)))+b*p;
exemple8.gif

9 - Exemple (Bouteille de Klein : http://perso.club-internet.fr/rferreol/encyclopedie/surfaces/klein/klein.shtml )

p=2*PI*u;
q=2*PI*v;
r=4*(1-cos(p)/2);
x1=6*cos(p)*(1+sin(p))+r*cos(p)*cos(q);
x2=6*cos(p)*(1+sin(p))-r*cos(q);
x=((p<=PI)?x1:x2);
y1=16*sin(p)+r*sin(p)*cos(q);
y2=16*sin(p);
y=((p<=PI)?y1:y2);
z=r*sin(q);
exemple9.gif