begin process at 2012 02 13 23:26:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Algorithme

 > 

Maths

 > 

Pb de rotation avec un objet image


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pb de rotation avec un objet image

samedi 29 mars 2008 à 00:39:05 | Pb de rotation avec un objet image

domi123

Bonjour, je suis en train de réaliser un potentiomètre avec un objet image. Mon image représente un cercle sur un fond transparent (d'où l'intéret de l'objet image).
Je voudrais réaliser une variable qui lorsque je clique sur l'image (dans le cercle), la variable m'affiche une valeur avec comme coordonnées x et y.
Voici un extrait de mon code qui fonctionne mais la variable me donne une valeur erronée :

Dim nuRo As Long
Dim Ycapture As Long, Xcapture As Long
Dim variation As Long, bouton0 As Long
Dim btn_down As Boolean

Dim TwipX           As Integer
Dim TwipY           As Integer


Private Sub Form_Load()
Me.ScaleMode = 3
btn_down = False
Ycapture = -1
TwipX = Screen.TwipsPerPixelX
TwipY = Screen.TwipsPerPixelY
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Ycapture = Y / TwipY
    Xcapture = X / TwipX
    bouton0 = variation
    btn_down = True
End Sub

Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If btn_down Then
        If Xcapture = -1 Then Exit Sub
        If ((X / TwipX) > 0 And X / TwipX < 246) Then
            nuRo = bouton0 - ((180 * (Atn((X / TwipX) / (Y / TwipY))) / 3.14159265358979) - (180 * Atn(Xcapture / Ycapture) / 3.14159265358979))
            nuRo = (nuRo + 360) Mod 360
            variation = nuRo
        End If
    End If
End Sub

Private Sub Image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Ycapture = -1
    Xcapture = -1
    btn_down = False
End Sub

Private Sub Timer1_Timer()
    Label1.Caption = variation
End Sub

Pour info ma form est en pixel et j'affiche ma variable dans un label.
J'ai beau chercher sur tous les forum mais je n'ai pas réussi a trouver mon bonheur.
Merci de votre aide. Help !

dimanche 30 mars 2008 à 13:07:12 | Re : Pb de rotation avec un objet image

Neron2005

Si j'ai bien compris ton probleme tu veux calculer un angle.
Alors,
pour calculer un angle il faut un repere donc
   - un point qui servira d'origine du repere O 
   - un vecteur qui servira d'origine des angles (le plus souvent on prend le vecteur ox(1,0))
   - et un vecteur oy de sorte que l'on ait un repere orthonorme,
   ce qui veut dire que l'axe oy doit etre perpendiculaire a ox donc on aura
      soit oy(0,-1) (les angles sont orientés dans le sens horaire),
      soit oy(0,1) (les angles son oriantes dans le sens trigo (anti horaire)

A partir de la ce n'est plus que des calcules.
On notera Ox(ax,ay) et Oy(bx,by) et O(ox, oy)
On considere un point quelconque M(x,y)
et on cherche alpha, l'angle forme entre (Ox, OM),
(c'est bon ca suis ???)

Soit d la norme de OM, ainsi d = sqr((x-ox) ^ 2 + (y - oy) ^ 2)

  - la norme de la projection de OM sur Ox note c vaut
  c = (x-ox) * ax + (y-oy) * ay ' valide uniquement si norme de ox = 1
  ainsi, cos(alpha) = c / d ' proprietes du produit scalaire

de plus, la norme de la projection de OM su Oy note s nous donne
  s = (x-ox) * bx + (y-ox) * by
  or l'angle forme entre OM et Oy vaut (Pi/2 - alpha)
  d'ou cos(Pi/2 - alpha) = sin(alpha) = s / d

a present on a le cos et le sin d'un angle, il est donc parfaitement definis a 2Pi pres.

On a donc tan(alpha) = sin(alpha) / cos(alpha) = s / c
de cette facon,
    si cos(alpha) > 0 alors alpha = atn(s / c)
    si cos(alpha) < 0 alors alpha = -atn(s / c)
    si cos(alpha) = 0 alors 
        si sin(alpha) > 0 alors alpha = atn(1) * 2 = pi / 2
        si sin(alpha) < 0 alors alpha = -atn(1) * 2 = -pi / 2
        si sin(alpha) = 0 alors ' probleme car M = O

RQ : Pour rendre la norme d'un vecteur egale a 1:
        soit u(a,b) de nome quelconque <> 0,
        on a v(a / sqr(a*a + b*b) , b / sqr(a*a + b*b)) qui est un vecteur de norme egale a 1
           
dimanche 30 mars 2008 à 13:30:53 | Re : Pb de rotation avec un objet image

Neron2005

Désole j'ai fait une petite erreur c'est :
    si cos(alpha) > 0 alors alpha = atn(s / c) 
    si cos(alpha) < 0 alors alpha = atn(s / c) + Pi

voila ce que ca donne dans une procedure

Option Explicit
Public Ox As Single, Oy As Single, PI As Single

Private Sub Form_Load()

    Ox = 1000
    Oy = 1000
    PI = Atn(1) * 4
    Me.DrawWidth = 3

End Sub


Public Function GetAngle( _
    X As Single, Y As Single, _
    Ox As Single, Oy As Single, _
    ax As Single, ay As Single, bx As Single, by As Single) As Single
   
Dim c As Single, s As Single, alpha As Single

c = (X - Ox) * ax + (Y - Oy) * ay
s = (X - Ox) * bx + (Y - Oy) * by

    If c > 0 Then
        alpha = Atn(s / c)
    ElseIf c < 0 Then alpha = Atn(s / c) + PI
    Else
        If s > 0 Then
            alpha = PI / 2
        ElseIf s < 0 Then alpha = -PI / 2
        Else: alpha = 0
        End If
    End If
   
    GetAngle = alpha

End Function

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Cls

    Dim a As Single
    a = GetAngle(X, Y, Ox, Oy, 1, 0, 0, -1)
   
    PSet (Ox, Oy), vbYellow
    Print Round(a / PI * 180, 2) 'convertion des radians en degres
    Line (Ox, Oy)-(X, Y)
   

End Sub

  



Cette discussion est classée dans : image, integer, single, nuro, xcapture


Répondre à ce message

Sujets en rapport avec ce message

Utiliser lechangement dune image avec un Mouse_Up mais avec un groupe dimages:comment? [ par yokulan ] Environnement: WIn Xp - VBasic 6. edition professionnelle Bonjour Soit une image appelé oiseau: Avec le code suivant je parvenais a simuler un éclair Déplacement un par un de controle fesan parti d'un groupe de controle [ par SuperPit37 ] Bon voila j'ai un groupe de 30 controle et voudrai savoir comment et t'il possible de les déplacer un par un sans avoir a reécrire le procedure a chaq recupéré une couleur d'une image [ par laurent180 ] Bonjour a tous,voila le programme consiste a récupéré le num de couleur d'une image c pt tout simple mais sa fct pas il me met erreur erreur d'executi Nouvelle Barre de titre [ par rclsilver02 ] salut, j'ai fait un porg avec une barre de titre apaprence "XP". Donc le border style de ma form = 0. Ma new barre de titre est faite avec des Picture Imprimer couleur inverse sur image [ par samoht ] Bonjour,J'arrive à inverser les couleurs d'un picture Box suite à un printscreen. Avec ce code (trouvé ici d'ailleurs). Le problème est lorsque je fai Urgent pb sur vb.net avec getpixel et le hdc!!!!!! [ par albator88li201 ] voila g un pb dans un prog ke je suis en train d'écrire pour un cours et je n'arrive pas a lire le fichier image, les valeurs données par getpixel ne determination de la longueur d'une LINE [ par morrison29 ] Bonjour,J'ai un logiciel a modifié, ce logiciel programmé en VB  me permet de déterminer la giration en metre d un bateau (demi tour) j ai besoin d un image [ par nabilwael ] Bonjour,j'ai ce code: Option ExplicitDim DragX As Single, DragY As Single Private Sub command1_Click() ' command buttonbegin_im.Visible = TrueEnd Su Création d'une image à partir d'un composant Vb Net [ par dieuzorro ] Bonjour Mon probléme est que je souhaite copier un composant situé sur une form dans une image pour sauver son apparence dans un fichier image. J'ai t Que-veut dire : Long , Short , Integer , Single , Double ? [ par vbnino ] Salut! -Que-veut dire : Long , Short , Integer , Single , Double ?-Merci


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales