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
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 :
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 ^^
@++

Publié : mar. 25/oct./2005 11:31
par Dr. Dri
Publié : mar. 25/oct./2005 12:48
par Anonyme
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
++
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
