Page 2 sur 3
Publié : dim. 06/juin/2004 0:59
par KarLKoX
Jolie ! Bon boulot

Publié : lun. 07/juin/2004 9:49
par Crystal Noir
Est ce qu'on peut m'expliquer la procedure objet de ce code svp ?

Publié : lun. 07/juin/2004 10:04
par comtois
elle permet de calculer la position des sprites , #nb étant le nombre de sprites à afficher.
Object=2 correspond à une forme , il y en a 18 .
Ici c'est la Sphere .
Si tu vas sur le site
http://www.mathcurve.com/surfaces/sphere/sphere.shtml
tu verras que pour une sphere
x=R*CosU*CosV
y=R*SinU*CosV
z=R*SinV
Avec -Pi<=U<=Pi et -Pi/2<=V<=Pi/2
Ici R=100, Xd correspond à V
xd = -90 + Random(180)
si Random=0 alors xd = -90 (-Pi/2)
Si Random=180 alors xd = 90 (Pi/2)
et
x0 = (Cosd(xd) * 10) * (Cosd(t*360/#nb) * 10)
pourrait s'écrire
x0 = 100 * Cosd(t*360/#nb) * Cosd(xd)
tu retrouves bien R=100
Et les tableaux permettent d'enregistrer les positions des sprites
points1(t) = x0
points2(t) = y0
points3(t) = z0
Code : Tout sélectionner
If object=2
For t=1 To #nb
xd = -90 + Random(180)
x0 = (Cosd(xd) * 10) * (Cosd(t*360/#nb) * 10)
y0 = (Cosd(xd) * 10) * (Sind(t*360/#nb) * 10)
z0 = Sind(xd) * 100
points1(t) = x0
points2(t) = y0
points3(t) = z0
Next t
EndIf
Et donc si tu veux faire un ballon de rugby tu peux écrire
Code : Tout sélectionner
x0 = 50 * Cosd(xd) * Cosd(t*360/#nb)
y0 = 50 * Cosd(xd) * Sind(t*360/#nb)
z0 = Sind(xd) * 100
Publié : lun. 07/juin/2004 10:36
par Crystal Noir
je comprend mieux, mais quand je regarde le site sur les surfaces j'ai du mal à comprendre comment retranscrire dans ce code, par ex si je veux changer la figure 2 en autre chose, j'ai du mal à comprendre comment retranscrire l'équation

c quelque chose lol
Et le U ca représente quoi lol
Publié : lun. 07/juin/2004 10:40
par comtois
Et si tu veux une répartition plus régulière des sprites , tu peux faire un truc de ce genre ( avec #nb=360)
tu peux modifier l'objet 2 pour voir ce que ça donne .
la répartition pourrait être mieux faite encore ,je vais y réfléchir .
J'en aurai besoin de toute façon , puisque je voulais le faire pour une matrice et me faire des primitives calculées (mesh).
Code : Tout sélectionner
If object=2
;For t=1 To #nb
For v=-90 To 90 Step 15
For u=-180 To 180 Step 15
t + 1
Debug t
xd = -90 + Random(180)
x0 = (Cosd(v) * 10) * (Cosd(u) * 10)
y0 = (Cosd(v) * 10) * (Sind(u) * 10)
z0 = Sind(v) * 100
points1(t) = x0
points2(t) = y0
points3(t) = z0
Next u
Next v
;Next t
EndIf
Publié : lun. 07/juin/2004 10:49
par Crystal Noir
ouais car en fait dans le code de départ j'ai du mal à voir ce qu'est U et V alors U j'ai bien vu que c'était xd mais V ? c'est t*360 etc... ? d'accord mais pourquoi lol, chuis en train d'essayer de comprendre la comparaison
Publié : lun. 07/juin/2004 11:05
par Crystal Noir
autre question souvent dans les surfaces on trouve des constantes b ou a comme ici
http://www.mathcurve.com/surfaces/tromp ... riel.shtml
que représentent elles ? comment adapter ?
C'est comme Ch ca représente quoi ? car les formules ne seraient pas compliquées à comprendre si ces quelques détails étaient expliqués.
Bon a et b ce sont des constantes, rien de compliqué, mais ch c quoi ca ?
Vu la quiche que je suis en math, je ne suis pas sorti de l'auberge
Publié : lun. 07/juin/2004 12:29
par Crystal Noir
Au fait les tableaux tpoints représentent quoi ?
Désolé pour toutes ces questions mais avec vos réponses ensuite je fais le rapprochement et ca m'aide à comprendre la base mathématique d'une part et ensuite comment chaque sprite est géré
Publié : lun. 07/juin/2004 15:07
par comtois
les tableaux tpoints te permettent de gérer le morphing
la position finale des sprites est stockée dans points1() etc ...
pour chaque sprite on teste la position finale avec tpoint
on incrémente tpoint s'il est inférieur à point
on décrémente tpoint s'il est supérieur à point
ça se passe ici
#nb c'est le nombre de sprites .
Code : Tout sélectionner
For t=1 To #nb
If points1(t) > tpoint1(t) : tpoint1(t) + 1 : EndIf
If points1(t) < tpoint1(t) : tpoint1(t) - 1 : EndIf
If points2(t) > tpoint2(t) : tpoint2(t) + 1 : EndIf
If points2(t) < tpoint2(t) : tpoint2(t) - 1 : EndIf
If points3(t) > tpoint3(t) : tpoint3(t) + 1 : EndIf
If points3(t) < tpoint3(t) : tpoint3(t) - 1 : EndIf
Next t
et donc à chaque tour de programme , on réajuste progressivement les sprites pour les placer dans la bonne position (celle qui a été calculée et stockée dans points1()....)
on le fait pendant 375 tours de programme , tu peux modifier la valeur de cnt pour mieux comprendre ,si tu mets une petite valeur , tu verras que les figures n'ont pas le temps de se reconstituer .
Code : Tout sélectionner
If cnt>375 ; quand on estime que le morphing est terminé
;on incrémente l'effet courant
curobj + 1
If curobj > numobjs : curobj = 1 : EndIf
object(curobj)
cnt=0
EndIf
Publié : lun. 07/juin/2004 15:28
par Crystal Noir
une fois que j'aurais tout pigé, me permet tu d'utiliser cette routine pour mes programmes ?
sinon je commence à comprendre comment ca marche, mais ceci :
Code : Tout sélectionner
For t=1 To #nb
x3d.f = tpoint1(t)
y3d.f = tpoint2(t)
z3d.f = tpoint3(t)
ty.f = (y3d * Cosd(vx)) - (z3d * Sind(vx))
tz.f = (y3d * Sind(vx)) + (z3d * Cosd(vx))
tx.f = (x3d * Cosd(vy)) - (tz * Sind(vy))
tz.f = (x3d * Sind(vy)) + (tz * Cosd(vy))
ox.f = tx
tx = (tx * Cosd(vz)) - (ty * Sind(vz))
ty = (ox * Sind(vz)) + (ty * Cosd(vz))
nx = (512*tx) / (d - tz) + 320
ny = 240 - (512 * ty) / (d - tz)
DisplayTransparentSprite(No,Int(nx),Int(ny))
Next t
C'est ce qui permet la rotation ? ke ca se fait lol
Publié : lun. 07/juin/2004 15:38
par comtois
ben comme je le précisais plus haut , je ne connais pas l'auteur , j'ai adapté un code blitzbasic . Mais bon , les équations de la sphere et autres sont sûrement publiques, personne ne t'empêche de les utiliser comme bon te semble

Publié : lun. 07/juin/2004 16:03
par Crystal Noir
disons que je parlais surtout de la routine avec les tableaux pour faire le morphing
Publié : lun. 07/juin/2004 16:19
par comtois
Tu peux sans problème , je faisais déjà comme ça sans même connaitre ce code
Comme bcp d'autres, c'est pas une exclusivité

Publié : lun. 07/juin/2004 16:50
par Crystal Noir
oui mais pour faire des petites demomaking, c super intéressant
Et pour ce code, tu peux m'expliquer un peu ? (je commence à capter comment ca marche héhé mais ca par contre j'ai du mal)
Peut on m'expliquer ce que sont que Ch et Th ici
http://www.mathcurve.com/surfaces/pseud ... here.shtml
Publié : lun. 07/juin/2004 17:14
par Le Soldat Inconnu
C'est ce qui permet la rotation ? ke ca se fait lol
c'est pour calculé les coordonnées dans le plan 2D (l'écran) des points du repère 3D xyz en rotation.
en fait, on fait 3 rotation, une par axe.
le mieux serait de faire un schéma pour expliquer :
donc voici
donc on a un point P de coordonné a,b et c (sur les z donc pas visible sur le schéma)
on fait tourner le repère d'un angle E sur l'axe Z pour passer du point P' vers le point P (on tourne toujours dans le sens trigo)
on obtient les coordonnées du point P comme ça (un peu de trigo

)
P x = a * cos(E) - b * sin(E)
P y = a * sin(E) + b * cos(E)
P z = c
on repète l'opération pour les rotations sur les x et les y et on obtient les coordonnées du point P sur l'écran en partant du point P du repère 3D en rotation