ajuste des entités
Remarque importante
Principe
pf_mat2 =
Les fonctions ´adjust com1 com2 ...´ permettent de définir des contraintes
géométriques et dynamiques sur des objets.
Une telle propriété peut être encapsulée dans un volume par:
attach adjust ... vol(id)
Elles définissent aussi des ajustements variés.
adjust
adjust(np)
Retourne le 3D vecteur 3D 0,0,0, ..., 1,1,1
Options:
format(f): vecteur de dimension f (f=1,2,3, 3 par défaut).
adjust(np,v1,v2) vecteur interpolé entre v1 et v2
selon le format.
var(n,v1,v2):
v{0,n-1} interpolé de v1 à v2
v{n-np-n} = v1
v{np-n,np-1} interpolé de v2 à v1
Exemples:
adjust(2);
retourne:
0 0 0
1 1 1
adjust(2)format(1);
retournes:
0 1
adjust(4, 1,2, 3,4)format(2);
retourne:
1 3
1.333333 3.333333
1.666667 3.666667
2 4
adjust(8)var(3,[1,6]);
retourne:
1 2 3
2.5 3.5 4.5
4 5 6
4 5 6
4 5 6
4 5 6
2.5 3.5 4.5
1 2 3
adjust ang
adjust ang(an)vol(id)
Fait adjust ang(an)line(p) où p est une ligne de points
du volume ids.
Options:
secx(x1,x2): p sont les sections en x entre x1 et x2)
(x1=1 x2=nx par défaut), avec nx=secx vol(id).
secy(y1,y2): p sont les sections en y entre y1 and y2)
(y1=1 y2=ny+1 par défaut), ny=secy vol(id).
adjust(c1,c2)audio(id)
Coupe le signal audio de audio id par [c1,c2] (-1.0,1.0 par défaut).
adjust audio
Ajuste le coefficient audio de façon à ce
que la valeur de l´audio soit compris entre c1 et c2.
adjust audio ini
Doit être fait une fois.
adjust audio coe
retourne adjust audio coe.
adjust audio coe=c1,c2
donne à adjust audio coe la valeur c1,c2 (0.1,1 par défaut).
coe audio est incrémenté de c1 et multiplié par c2.
adjust audio exec
Effectue l´ajustement.
adjust audio max
retourne adjust audio max.
adjust audio max=m2
donne à adjust audio max la valeur m2 (64 par défaut).
adjust audio min
retourne adjust audio min.
adjust audio min=m1
donne à adjust audio min la valeur m1 (64 par défaut).
adjust audio scalar
retourne adjust audio min,max,time.
adjust audio scalar=m1,m2,t
donne à adjust audio min max time les valeurs m1 m2 t.
adjust audio time
retourne adjust audio time.
adjust audio time=t
donne à adjust audio time la valeur t
(50 par défaut).
adjust brush
adjust brush(id)
Retourne la propriété adjust du
pinceau id.
adjust brush(id)=a,c,d,r
Change cette propriété.
Remarque:
Quand le type du pinceau id est adjust:
a = coefficient de rayon (entre 1.0 et 5.0, 1.55 par défaut)
c = coefficient de complexité (1.0 par défaut)
d = distance des pixels (1.0 par défaut)
r = aléatoire (entre 0.0 et 1.0, 0.0 par défaut)
adjust line
adjust line(L)
Retourne la ligne polygonale régulière construite sur L.
Options:
adjust(n): la ligne retournée a n points (n=NP(L) par défaut).
acc: retourne la ligne polygonale graduée.
adjust(n,0): les sommets de la ligne L sont atteints.
adjust ext(e,c,f): réalise une distribution égale des sommets
sur l´extension (e,c,f) de la ligne polygonale 3D L.
adjust(np)ext(e,c,f): construit la ligne avec np points
(e*(np-1)+np) par défaut).
accélérée.
ang(an,sens): force les segments de la ligne L à faire des angles tels que:
Si sens > 0: Corrige les angles > an
Si sens < 0: Corrige les angles < an
Si sens = 0: Corrige les angles tels que: |an| > an (valeur par défaut).
clean(c)coe(d1,d2,n): avec c ="x", "y" ou "z": retourne un filtrage de la courbe L:
Les coordonnées correspondantes sont traitées. Par exemple pour c="y"
n=0:
Les points dont le y est inférieur à d1 sont ramenés à y=d1 et ceux
dont le y est supérieur à d2 sont ramenés à y=d2.
n>=1:
Dans chaque intervalle d´amplitude 2*n+1:
S´il n´y a qu´un seul point dont le y est supérieur à d2
son y est ramené à la moyenne des y des points de l´intervalle.
S´il y a p point dont le y est supérieur à d2 les y de tout
les points de l´intervalle sont ramenés à la moyenne des y de ces p points.
clean avec n>=1:
Les points 3D sont traités:
Pour chaque segment M(i)M(i+n), si un seul point est à une distance supérieure à >d2 il
est ramené à la moyenne des autres, s´il y en a p ils sont tous ramenés à la
moyenne de ces p points.
dec: retourne une ligne polygonale graduée décélérée.
close: en fermant L.
dim(n,ind)min(m1)max(m2): retourne la ligne L nD ajustée à
[min,max] pour l´indice ind (n=1 ind=0 par défaut).
format(1): L=x1,x2,...
format(2): L=x1,y1,x2,y2,...
interpolo: sur les segments.
law(w): retourne une ligne polygonale graduée selon la
loi wL.
limit(x1,y1,z1,x2,y2,z2): ajustement à la boite (x1,y1,z1,x2,y2,z2).
pend: retourne une ligne polygonale graduée pendulaire.
tan(x1,y1,z1,x2,y2,z2,...): permet de forcer les tangentes (xi,yi,zi).
var(n): la ligne retournée est:
L{0,n-1} interpolé entre 0 et 1
L{n,np-n-1} 1
L{np-n,np-1} interpolé entre 1 et 0
vertex(s1,s2,...)tan(x1,y1,z1,x2,y2,z2,...): permet de forcer les tangentes (xi,yi,zi)
aux sommets (i).
Exemples:
edit(adjust(5)line(-200,0,0, 200,0,0)tan(1,1,0, 1,-1,0)vertex(1,2)ext(3,1));
imprime:
0: -200 0 0
1: -108.768944 68.42394 0
2: 0 100 0
3: 108.768944 68.42394 0
4: 200 0 0
edit(adjust(4)line(0,0,0, 100,0,0)vertex(1,2)tan(1,1,0, 1,-1,0)ext(4,1,0);)
prints;
0 0 0
31.6 20.6 0
68.4 20.6 0
100 0 0
adjust line win
adjust line(x1,y1,z1,...) win
Retourne la ligne 3D (x1,y1,z1,...) ajustée dans la boite (-1,-1,-1,1,1,1).
adjust line(L) win(x1,x2)
Retourne la ligne 1D L ajustée dans la boite (x1,x2).
adjust line(L) win(x1,y1,x2,y2)
Retourne la ligne 2D L ajustée dans la boite (x1,y1,x2,y2).
adjust line(L) win(x1,y1,z1,x2,y2,z2)
Retourne la ligne 3D L ajustée dans la boite (x1,y1,z1,x2,y2,z2).
etc...
adjust line normal
adjust line(p)normal("c")coe(d)
Retourne p avec la composante x,y,z (selon que c="x", "y" ou "z")
normalisée entre 0.0 et d.
adjust line(x1,y1,z1,...xn,yn,zn) time(t1,...,tn) ext(c) vertex(s) tan(t) coe(c)
Retourne la ligne polygonale 3D L1 de (tn-t1+1) sommets, extension de la ligne
(x1,y1,z1,...,xn,yn,zn) passant au temps ti par (xi,yi,zi).
Options:
ext(c): c règle la courbure (entre 0 et 1).
time(n): ajuste sur n sommets.
time(t1,...,tp): ajuste (t1,...,tp) sur n valeurs.
vertex(s):
Si tan(t) est présent, les tangentes aux sommets s sont forcées a t.
Si coe(c) est présent, les coefficients aux tangentes aux sommets sont
forcées à c.
Utile en animation pour provoquer des évènements à des instants précis.
Exemples:
L=arc 200,PI,PI,4;
L1=adjust line(L) time(50) ext(.5);
L2=adjust line(L) time(50) ext(.5) vertex(1,4) tan(-300,-300,0, 100,0,0);
L3=adjust line(L) time(50) ext(.5) vertex(1,4) coe(0,3,0);
screen;displ(L);displ(L1)illum(1,0,0);displ(L2)illum(0,1,0);displ(L3)illum(1,1,0);
Les tangentes aux sommets 1 et 4 des lignes L2 et L3 sont modifiées.
adjust memory(id)
Ajuste la première composante des vecteurs de memory(id) entre 0.0 et 1.0.
Options:
adjust(d): ajuste entre 0.0 et d.
adjust(d1,d2): ajuste antre d1 et d2.
format(ind): composante ind (entre 0 et (dim memory(id))-1).
adjust rota vol(id)
Calcule rota matrix vol(id) modulo DEUXPI.
adjust rotx vol(id)
Calcule rotx matrix vol(id) DEUXPI.
adjust roty vol(id)
Calcule roty matrix vol(id) DEUXPI.
adjust rotz vol(id)
Calcule rotz matrix vol(id) DEUXPI.
adjust secx vol(id)dist(d1,d2)
La distancede deux points consécutifs des sections en x du volume id est
forcée entre d1 et d2. S´appele typiquement dans une fonction
F4.
adjust vol(id)vertex(s)force(f,v)poi(g)radius(r1,r2)
Met des forces aux points numéros s du volume id:
f = k * unit(ps - g)
k = 0 si d = dist(ps,g) > r2
k = f * (r2 - d) / (r2-r1) si r1 < d < r2
k = f si d <= r1
Remarques:
1) si vertex(s) est absent, tous les points sont traités.
2) f = amplitude maximum de la force (1 par défaut)
3) v est la viscosité (0 par défaut)
4) Si r2 est absent k = f / abs(d-r1)
Voir aussi adjust vol vol force radius.
adjust force
adjust(c)force rota add vol(id)
Fait:
s = sign(speed rota vol(id))
force rota add vol(id) += (s > 0) ? c : -c;
Permet de moduler des mouvements en fonction de l´amplitude c
d´un capteur.
adjust force(f,v)rota axis vol(id)
Modifie force rota add vol(id) de façon à ce que
g2-g1 reste voisin de 0,1,0
où g1 et g2 sont le premier et le dernier CG secy vol(id).
Permet de maintenir un volume horizontal..
adjust image
adjust(r1,v1,b1,r2,v2,b2,rs,vs,bs)image(id)
Commande permettant de seuiller inférieurement et supèrieurement
l´image id: if(k < ks) k=k1, if(k >= ks)k=k2;
adjust luminance(l1,l2,ls)image(id)
Commande permettant de seuiller inférieurement et supérieurement la
luminance de l´image id: if(l < l l=l1; else l=l2;
Par défaut l1=0, l2=1 et ls=luminance image(id).
Exemple:
adjust luminance(0,1,.5)image(num);
seuillage en noir et blanc.
adjust transp(t1,t2)luminance(l1,l2)image(id)
Commande permettant de calculer la transparence en fonction de la luminance.
adjust inv vol
adjust(na) inv vol(id) poi(p) force(f,c) rota(r) exp(e) vertex(s1,s2)
Le volume id est une extrémite d´une structure d´ancrage, il tend à
atteindre dynamiquement le poin p en entrainant ses parents:
Options:
adjust(na): le processas est répété na fois (le suivi est amélioré
lorsque na augmente)
force(f,c): une force d´amplitude f et d´attenuation c
est appliquée.
exp(e): f = f * (d ^ e) avec d = dist(num,p)
rota(r): un couple d´amplitude r est appliqué
vertex(s1,s2): l´axe des volumes joint leurs sommets s1 et s2,
sinon il joint le point d´ancrage suiveur au CG de chaque volume.
adjust matrix
adjust(c,c1,c2)matrix(m)
Retourne la matrice m ajustée à c dans les limites c1,c2,
(par défaut c=0.5, c1=0.0, c2=1.0):
m = (m > c) ? c2 : c1;
adjust sphere
adjust sphere(x,y,z)vol(id)
Les sommets du volume id sont contraints à être intérieurs
à la sphère de centre (x,y,z) et de rayeon r.
Options:
coe(c): rebound coefficient (0 default, -1 is a good value).
adjust vol
adjust vol dist
dist secx
dist secy
dist vertex
adjust vol(id)dist(d1,d2) secx(s)
Force les sommets des sections s en x du volume id à être séparés d´une distance
comprise entre d1 et d2.
Remarques:
1) Si s est absent, toutes les sections en x sont traitées.
2) d2 = d1 par défaut.
3) Si d1 < 0 l´ordre des sommets est inversé.
4) adjust vol(id)dist(d1,d2)secx(s)abs: conserve les sommets extrêmes.
adjust vol(id)dist(d1,d2)secx(s)poi(x,y,z)
Force les points de la section en x numéro s du volume id à être à une
distance comprise entre d1 et d2 du point (x,y,z).
Remarques:
1) d2 = d1 par défaut.
2) Si (x,y,z) est absent, le point est remplacé par le center de gravité la section.
3) Si d1 < 0 l´ordre des sommets est inversé.
4) adjust vol(id)dist(d1,d2)secx(s) abs: conserve les sommets extrêmes.
adjust vol(id)dist secy(s)
Force les sommets des sections s en y du volume id à être séparés d´une distance
comprise entre d1 et d2.
Options:
coe(c): d1*=c;d2*=c; à chaque secy.
Remarques:
1) Si s est absent, toutes les sections en y sont traitées.
2) d2 = d1 par défaut.
3) Si d1 < 0 l´ordre des sommets est inversé.
4) adjust vol(id)dist(d1,d2)secy(s)abs: conserve les sommets extrêmes.
adjust vol(id)dist(d1,d2)secy(s)poi(x,y,z)
Force les points de la section en y numéro s du volume id à être à une
distance comprise entre d1 et d2 du point (x,y,z).
Remarques:
1) d2 = d1 par défaut.
2) Si (x,y,z) est absent, le point est remplacé par le center de gravité la section.
3) Si d1 < 0 l´ordre des sommets est inversé.
4) adjust vol(id)dist(d1,d2)secy(s) abs: conserve les sommets extrêmes.
adjust vol(id)dist(d1,d2)vertex(s)
Force les sommets numéros s du volume id à être à une distance comprise
entre d1 et d2 les uns des autres.
Remarques:
1) Utile pour contrôler l´extensibilité d´un volume souple.
2) exemple: d1=0.5*d, d2=2*d, avec d=taille de la maille du volume.
3) Si s est absent tous les sommets sont traités.
4) d2 = d1 par défaut.
5) adjust vol(id)dist(d1,d2)vertex(s)abs: conserve les sommets extrêmes.
6) adjust vol(id)dist(d1,d2)vertex(s)alea: choisit aléatoirement un sommet fixe (aléatoire reproductible).
7) adjust vol(id)dist(d1,d2)vertex(s)rand: choisit aléatoirement un sommet fixe (aléatoire non reproductible).
adjust vol(id)force(f)dist(d1,d2)vertex(s)vol
Met des forces aux sommets numéros s du volume id de façon à maintenir
leurs distances à leurs voisins entre d1 et d2.
Remarques:
1) Si s est absent, tous les sommets sont traités
2) f permet de régler l´intensité des forces (entre 0 et 100)
adjust vol(id1)image(id2)luminance(lum0)
Chaque sommet du volume id1 est positionné à un pixel de l´image id2
si la luminance de ce pixel is > lum0 (0.5 par défaut), sinon il est positionné à
(0,0,0).
Options:
dila(cx,cy): le volume id1 est dilaté de cx,cy (1,1 par défaut).
poi(x0,y0): le volume id1 est translaté de x0,y0 (0,0 par défaut).
adjust(cr,cv,cb) vol(id1) image(id2)
Le z des points du volume id1 sont modifiés selon la formule:
z -= (cr * r + cv * v + cb * b) / 3
avec (r,v,b) = couleur moyenne de l´image id2 dans une fenêtre
contenant les voisins de ce point.
Si id2 est absent, l´image courante est traîtée.
adjust vol image illum;
Chaque point traîté prend la couleur de l´image.
adjust(ct,cs,cv) vol(n1) image(n2) hsv;
Le z des points du volume id1 sont mofifiés selon la formule:
z -= (ct * t + cs * s + cv * v) / 3
avec (t,s,v) = (teinte,saturation,valeur) moyennes de l´image dans une
fenêtre contenant les voisins de ce point.
adjust vol image limit;
Le volume est ajusté dans la fenêtre de l´image contenant des pixels
différents du fond.
adjust vol image precision(eps);
La comparaison se fait avec une approximation de eps.
adjust vertex(s) vol image;
Seuls les points numéros s seront traîtés.
Exemple:
adjust(100,50,30) vertex[100,200] vol(1) image;
adjust("x",crx,cvx,cbx,"y",cry,cvy,cby,"z",crz,cvz,cbz)vol image;
Le (x,y,z) des points du volume sont modifiés selon les formules:
x -= (crx * r + cvx * v + cbx * b) / 3
y -= (cry * r + cvy * v + cby * b) / 3
z -= (crz * r + cvz * v + cbz * b) / 3
adjust("toto") vol image;
Le (x,y,z) des points du volume sont modifiés par la fonction utilisateur
de nom toto dans laquelle on peut utiliser les commandes suivantes:
p=poi: récupere les coordonnées espace du point affiché
k=illum: récupere la couleur (r,v,b) du point écran
t=hsv(k): récupere le (t,s,v) du point écran
p=fonction(p,k): calcule la nouvelle position
poi(p): valide cette position
adjust exec(c,v1,v2,...) vol image;
La fonction adjust_vol_image_utilisateur sera executée avec le code c
et les valeurs v1, v2, .... Il sera nécessaire de modifier cette fonction
dans le fichier utilb.c et de relinker anyflo.
(voir ´manuel.applic.htm´).
Remarques:
1) (cr,cv,cb) = (100,100,100) par défaut.
2) Si id2 est absent ou nul, l´image courante est traîtée.
3) Cette fonction permet de "monter" un relief à partir d´une image 2D.
4) Toutes les formes précédentes sont combinables.
5) Pratiquement:
Construire une image (synthétisée ou digitalisée)
Construire un volume (de préférence une grille fine vue de face)
Invoquer adjust vol image
Exemples:
adjust(100,50,-50) vol(1) image;
adjust(100,70,40) vol(1) illum limit vertex[12,120] image(1);
adjust vol law
adjust vol(id)law
Si le volume id se meut sur une trajectoire, cette commande retourne:
v/r1/3
, avec v =vitesse tangentielle et r =
rayon de courbure.
C´est la
loi de la puissance 1/3 qui précise que, pour un mouvement naturel, ce rapport doit être
constant par morceaux (de l´order de 1 / 1000).
Remarques:
1) yes radius doit être actif pour générer
les rayons de courbure.
2) Il faut law vol(id)=1
adjust vol(id1,id2)law
Si les volume idi sont ancrés et de pè id1, cette commande retourne
la somme des vitesses angulaires des volumes id3 par rapport à id2 et id2 par rapport à
son père. La loi d'
opposition de phase précise que cette somme doit être constante pour un mouvement naturel
(ce qui signifie que lorsque id1 varie dans un sens, id2 varie dans le sens contraire).
Exemple:
force rota add vol(radius_g)=-abs(.25*(adjust vol(humerus_g,thorax)law));
adjust vol(id1,id2,id3)law
Si les volumes idi sont ancrés, cette commande retourne le point
(va1,va2,va3) de coordonnées les vitesses angulaires des volumes id3 par rapport à id2,
id2 par rapport à id1 et id1 par rapport à son père. La loi du
plan de phase
précise que, pour un mouvement naturel, ce plan est constant.
adjust vol(id)max poi(p)
Force les points p du volume id à ne pas s´éloigner de plus de d
des points mémorisés par validate(1)poi vol(id)
adjust vol(id)max vertex(s)
Force les sommets s du volume id à former une ligne polygonale de
longueur maximum d.
Utilisation:
Pour une grille munie de ressorts, cette fonction
permet de simuler un tissus élastique d´élongation limitée.
adjust(s1,p1,v1,d1,s2,p2,v2,d2,...)vol(id)normal
Les sommets s1,s2,... du volume id seront respectivement forcés sur
les normales aux sommets p1,p2,... des volumes v1,v2,... à une distance de d1,d2,...
adjust vol(id)NP
Complête éventuellement les propriétés ´... vertex´ au nombre de
points du volume id.
Remarque:
Si id est absent, tous les volumes sont traités.
adjust vol(id1)poi(x,y,z)vol(id2)vertex(v1,v2)
Le volume id1 est translaté et tourné de façon à ce que son sommet
v1 soit sur le sommet v2 du volume id2
et que son axe y passe par le point (x,y,z).
Remarque: il faut translater le volume id1 à son sommet v1:
tran(poi(v1)vol(id1))vol(id1);
adjust(an1,an2) vol(id1,id2)axis(x1,y1,z1,x2,y2,z2) rota
Remarques:
1) Les volumes id1 et id2 doivent être munis d´axes.
2) Soit d1 = le vecteur de composantes (x1,y1,z1) dans les axes de id1
et soit d2 = le vecteur de composantes (x2,y2,z2) dans les axes de id2:
L´angle (d1,d2) est astreint à être compris entre an1 et an2.
adjust vol rotx
adjust(an1,an2) vol(id1,id2)rotx
En animation dynamic les axes des volumes id1 et id2
sont astreints à avoir l´angle des axes en x compris entre an1 et an2.
Remarques:
1) Les volumes id1 et id2 doivent être munis d´axes.
2) Si (an1,an2) est absent, les axes en x coïncident.
3) si id2 est absent (ou égal à 0), le volume id2 est remplacé par les axes
4) adjust(an11,an12,an21,an22,...) vol(n0,n1,n2,...) rotx realise:
adjust(an11,an12) vol(n0,n1)rotx;
adjust(an21,an22) vol(n0,n2) rotx;
etc...
5) adjust(an1,an2) vol(n0,n1)force(k,v) rotx: une ´force ajust´ est appliquée
au volume id2 de façon à ce que l´angle des axes en x soit compris entre an1 et an2.
k = module de la force (1 par défaut)
v = viscosité (0 par défaut)
adjust vol roty
adjust(an1,an2) vol(id1,id2)roty
En animation dynamic les axes des volumes id1 et id2
sont astreints à avoir l´angle des axes en y compris an1 et an2.
Remarques:
1) Les volumes id1 et id2 doivent être munis d´axes.
2) Si (an1,an2) est absent, les axes en y coïncident.
3) si id2 est absent (ou égal à 0), le volume id2 est remplacé par les axes.
4) adjust(an11,an12,an21,an22,...) vol(n0,n1,n2,...) roty réalise:
adjust(an11,an12) vol(n0,n1)roty;
adjust(an21,an22) vol(n0,n2) roty;
etc...
5) adjust(an1,an2) vol(n0,n1)force(k,v) roty: une ´force ajust´ est appliquée
au volume id2 de façon à ce que l´angle des axes en y soit compris an1 et an2.
k = module de la force (1 par défaut)
v = viscosité (0 par défaut)
adjust(an1,an2) vol(n0,n1)rotz
En animation dynamic les axes des volumes id1 et id2
sont astreints à avoir l´angle des axes z0 et z1 compris entre an1 et an2.
Remarques:
1) Les volumes id1 et id2 doivent être munis d´axes.
2) Si (an1,an2) est absent, les axes en z coïncident.
3) si id2 est absent (ou égal à 0), le volume id2 est remplacé par les axes
4) adjust(an11,an12,an21,an22,...) vol(n0,n1,n2,...) rotz réalise:
adjust(an11,an12) vol(n0,n1)rotz;
adjust(an21,an22) vol(n0,n2) rotz;
etc...
5) adjust(an1,an2) vol(n0,n1)force(k,v) rotz: une ´force ajust´ est appliquée
au volume id2 de façon à ce que l´angle des axes en z soit compris entre an1 et an2.
k = module de la force (1 par défaut)
v = viscosité (0 par défaut)
adjust vol(id)secx(s) line(w)
Ajuste les sections en x de numéros s du volume id à la ligne polygonale
3D w.
adjust vol(id)secy
Force les sommets des sections successives en y du volume id à être
"en face" et à être de sens direct (utile pour rectifier un tuyau tordu).
Remarque:
Le volume id doit être isomorphe à une grille fermée.
adjust vol(id)secy(s) line(w)
Ajuste les sections en y de numéros s du volume id à la ligne polygonale 3D w.
adjust vol(id)vertex(s)dist(d1,d2)poi(g)
Limite les distances des sommets s du volume id au point g entre d1 et d2.
Remarques:
Si g est absent c´est le CG du volume id par défaut.
Si sest absent tous les sommets sont triatés.
adjust(n) obj(id) vertex(s) ext(e,c,f)
Equi répartit les sommets s de l´objet id sur leur contour.
Remarques:
1) obj est: vol, light ,fog, traj, cin
2) adjust vertex(n1) close obj(n2): pour un contour fermé
3) L´ajustement est d´autant meilleur que n est grand
entre 1 et 20 (1 par défaut).
4) Si s est absent tous les sommets sont traités.
5) Si ext(e,c,f) est present, l´équirepartition se fera sur
l´extension (e,c,f) de l´objet id (voir ext vol).
adjust vol(id)vertex(s) near dist(d)
Corrige les points numéros s du volume id pour qu´ils ne s´éloignent de plus de
d de leurs voisins.
Remarque:
Si s est absent, tous les points sont traités.
adjust vol(id) coe(c)
Lorsque plusieurs points du volume id sont "égaux" à c près, les facettes
les contenant ne feront référence qu´au premier d´entre eux.
Remarques:
1) c = 0 par défaut.
2) Cette fonction est utile pour supprimer les points multiples d´un
volume (par exemple les facettes passant par les poles d´une boule), lesquels
peuvent introduire des effets de bord dans le "shading"
adjust(d,k) vol(id1) vol(id2)
Fait coïncider les points du volume id1 avec ceux du volume id2 a d près.
1) Fonction utile pour caler un volume sur un autre.
2) k = 0.25 par défaut
adjust(cr,cv,cb) vol(id1) image(id2)
Le z des points du volume id1 sont modifiés selon la formule:
z -= (cr * r + cv * v + cb * b) / 3
avec (r,v,b) = couleur moyenne de l´image id2 dans une fenêtre contenant les
voisins de ce point.
Options:
illum: chaque point traité prend la couleur de l´image.
coe(c): les déplacements sont multipliés par c * r, avec r = rayon de la maille
passant par le point traité (si le volume est isomorphe à une grille).
Remarques:
1) Par défaut un antialiasing automatique est réalisé dans une fenêtre
contenant les voisins de chaque sommet.
2) adjust vol image alias(a): permet de contrôler la taille de la fenêtre:
a < 0: antialiasing automatique (valeur par défaut).
a = 0: pas d´antialiasing.
a > 0: fenêtre de taille a.
hsv: le z des points du volume id1 sont modifiés selon la formule:
z -= (ct * t + cs * s + cv * v) / 3
avec (t,s,v) = (teinte,saturation,valeur) moyennes de l´image id2 dans une
fenêtre contenant les voisins de ce point.
limit: le volume est ajusté dans la fenêtre de l´image contenant des pixels
différents du fond.
precision(eps): la comparaison se fait avec une approximation de eps.
vertex(s): seuls les points numéros s seront traités.
Exemple:
adjust(100,50,30) vol(1)vertex[100,200] image;
adjust("x",crx,cvx,cbx,"y",cry,cvy,cby,"z",crz,cvz,cbz)vol image;
Le (x,y,z) des points du volume sont modifiés selon les formules:
x -= (crx * r + cvx * v + cbx * b) / 3
y -= (cry * r + cvy * v + cby * b) / 3
z -= (crz * r + cvz * v + cbz * b) / 3
adjust("n",cr,cv,cb)vol image
Les points du volume sont deplacés le long de leur normal de:
(cr * r + cv * v + cb * b) / 3
adjust("toto") vol image
Le (x,y,z) des points du volume sont modifiés par la fonction utilisateur
de nom toto dans laquelle on peut utiliser les commandes suivantes:
p = poi: récupère les coordonnées espace du point affiché.
k = illum: récupère la couleur (r,v,b) du point écran.
t = hsv(k): récupère le (t,s,v) du point écran.
p = fonction(p,k): calcule la nouvelle position.
poi(p): valide cette position.
adjust vol exec(c,v1,v2,...) image
La fonction adjust_vol_image_utilisateur sera exécutée avec le code c
et les valeurs v1, v2, ... Il sera nécessaire de modifier cette fonction
dans le fichier utilb.c et de relinker anyflo.
Remarques:
1) (cr,cv,cb) = (100,100,100) par défaut.
2) Si id2 est absent ou nul, l´image courante est traitée.
3) Cette fonction permet de "monter" un relief à partir d´une image 2D.
4) Toutes les formes précédentes sont combinables.
5) Pratiquement:
Construire une image (synthétisée ou digitalisée).
Construire un volume (de préférence une grille fine vue de face).
Invoquer adjust vol image.
Exemples:
adjust(100,50,-50) vol(1) image;
adjust(100,70,40) vol(1) illum limit vertex[12,120] image(1);
Voir aussi: