Page 1 sur 1

Trigonométrie

Publié : lun. 24/oct./2005 18:11
par Anonyme
Voila , j'ai ranger dans une structure des coordonées de points (x,y) que j'espace régulierement entre eux.


Je voudrais leur donner un axe commun de rotation (voir image).

Je bloque vraiment, pourtant je m'en sort toujours avec la trigo :oops:


Image


Image

Merci d'avance.

Publié : lun. 24/oct./2005 19:50
par Dr. Dri
Je l'ai fait récemment (un truc similaire), donc laisse moi le temps et je te file une solution ;)
peut être juste file moi la structure avec laquelle tu travailles
et expplique moi ce que tu entends par les espacer régulièrement

Dri

Publié : lun. 24/oct./2005 20:03
par Anonyme

Code : Tout sélectionner

#TAILLE_MATRICE = 512

Structure Vertex
 X.f
 Y.f
EndStructure

Dim Matrice.Vertex(#TAILLE_MATRICE*#TAILLE_MATRICE)

Pour ceux qui est de l'espace entres les points, c'est la distance en pixel qui sépare les points entre eux.

Ex :

Code : Tout sélectionner

Matrice(0)\X = 100
Matrice(0)\Y = 100

Matrice(1)\X = Matrice(0)\X + 20
Matrice(1)\Y = Matrice(0)\Y + 20

Bien entendu, je le fait avec une boucle for-next, en prennant en compte la largeur & la hauteur
etc...
ensuite une fois les points enregistrer dans la structure "Matrice.Vertex"
Je peut afficher des points au coordonées enregistrer.
je voudrais donc faire une rotation par rapport à un axe commun de tout les points.

++

Publié : lun. 24/oct./2005 22:49
par djes
Très simple, tu soustrais les coordonnées du point central avant de faire ta rotation, et tu les rajoutes après. :) (en fait, tu ramènes le 0 au niveau de ce point)

Publié : lun. 24/oct./2005 23:17
par Anonyme
En fait pour les angles entre 2 point je procede comme cela

Point_A_X = 100
Point_A_Y = 100


Point_B_X = Point_A_X + DISTANCE_X * cos(angle)
Point_B_Y = Point_A_X + DISTANCE_Y * sin(angle)


Avec 2 points cela marche nickel , mais la j'utilise des points comme sur mon schéma : Image

l'axe est en haut à gauche, je veut qu'ils tourne tous autour de ce point.
je bloque :? ...

Publié : mar. 25/oct./2005 8:11
par Dr. Dri
en gros on tourne autour du point matrice(0)
je comprend pas pourquoi avoir un tableau s'ils sont espacés régulièrement ^^

peu importe je vais te pondre un truc

Dri ;)

Publié : mar. 25/oct./2005 8:38
par Dr. Dri

Code : Tout sélectionner

Structure Matrice
  espacement.l
  origine_x.l
  origine_y.l
  taille_x.l
  taille_y.l
  angle_deg.l
EndStructure

matrice.Matrice
matrice\espacement =  20
matrice\origine_x  = 320
matrice\origine_y  = 240
matrice\taille_x   =   5
matrice\taille_y   =  10
matrice\angle_deg  =   0

Procedure DessineMatrice(*mat.Matrice)
  ;Pi / 180 = 0.01745329
  cos.f = Cos(-*mat\angle_deg * 0.01745329)
  sin.f = Sin(-*mat\angle_deg * 0.01745329)
  
  For y = 0 To *mat\taille_y - 1
    For x = 0 To *mat\taille_x - 1
      
      tx = *mat\espacement * x
      ty = *mat\espacement * y
      
      sx = cos * tx - sin * ty + *mat\origine_x
      sy = sin * tx + cos * ty + *mat\origine_y
      
      Circle(sx, sy, 3, $FFFFFF)
    Next x
  Next y
  
  Line(*mat\origine_x, *mat\origine_y, tx, 0, $FF0000)
  Line(*mat\origine_x, *mat\origine_y, 0, ty, $FF0000)
  
EndProcedure

InitSprite()
InitKeyboard()

OpenWindow(0, 0, 0, 640, 480, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Matrice")
OpenWindowedScreen(WindowID(), 0, 0, 640, 480, 0, 0, 0)

Repeat
  FlipBuffers()
  ClearScreen(0, 0, 0)
  
  If StartDrawing( ScreenOutput() )
    DessineMatrice(matrice)
    StopDrawing()
  EndIf
  
  matrice\angle_deg + 1
  If matrice\angle_deg >= 360
    matrice\angle_deg - 360
  EndIf
  
Until WindowEvent() = #PB_Event_CloseWindow
Dri ;)

Publié : mar. 25/oct./2005 11:27
par Anonyme
Merki ! j'éspère que tu n'a pas trop eu mal en pondant ce code ^^

@++ :lol:

Publié : mar. 25/oct./2005 11:31
par Dr. Dri

Publié : mar. 25/oct./2005 12:48
par Anonyme
Image

Je vais étudier ton code, car j'essaye de faire une ch'tite matrice, je vais essayer d'integrer le facteur Z , de maniere à obtenir le meme resultat que sur le shéma.

Merci encore :wink:
++

Publié : mar. 25/oct./2005 18:00
par Dr. Dri
mon code ne fonctionne qu'avec une caméra a la position 0, 0, 0 et à l'orientation 0, 0, 0

Dri :oops: