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
Image

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