Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme
Message
par Anonyme » lun. 24/oct./2005 18:11
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.
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » lun. 24/oct./2005 19:50
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 » lun. 24/oct./2005 20:03
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.
++
djes
Messages : 4252 Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France
Message
par djes » lun. 24/oct./2005 22:49
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 » lun. 24/oct./2005 23:17
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
...
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » mar. 25/oct./2005 8:11
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 » mar. 25/oct./2005 8:38
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 » mar. 25/oct./2005 11:27
Merki ! j'éspère que tu n'a pas trop eu mal en pondant ce code ^^
@++
Anonyme
Message
par Anonyme » mar. 25/oct./2005 12:48
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
++
Dr. Dri
Messages : 2527 Inscription : ven. 23/janv./2004 18:10
Message
par Dr. Dri » mar. 25/oct./2005 18:00
mon code ne fonctionne qu'avec une caméra a la position 0, 0, 0 et à l'orientation 0, 0, 0
Dri