Trigonométrie

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme

Trigonométrie

Message 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.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Anonyme

Message 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.

++
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message 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)
Anonyme

Message 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 :? ...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
Anonyme

Message par Anonyme »

Merki ! j'éspère que tu n'a pas trop eu mal en pondant ce code ^^

@++ :lol:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Anonyme

Message 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:
++
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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:
Répondre