Distance,angle rotation entre 2 points

Soyez le premier à donner votre avis sur cette source.

Vue 8 784 fois - Téléchargée 682 fois

Description

Ce code montre comment :
Appliquer un rotation a un point par l'origine
Calculer une distance entre 2 points
Calculer un angle entre 2 points
Tracer un arc de cercle grâce a pset (je sais il y a une fonction pour ça)
Convertir des degré en radians et vice-versa

si vous voulez + :

Distance entre 2 points quelquonques :
sqrt((x1-x2)^2+(y1-y2)^2)

Angle entre 2 points quelquonques :
vers_degre=180/3.141592
angle=int(atn((y1-y2)/(x1-x2))*vers_degre*1000)/1000

Rotation entre 2 points :
Je vous le laisse comme exercice !!!
(C'est pas trops compliqué inspirez vous de ce qu'il y a ci dessu !)
:-)
Pour ceux qui ne veullent pas faire de copier coller, je met un ZIP !
Attention : c'est en VB3

Source / Exemple :


Sub Graph_MouseMove (Button As Integer, Shift As Integer, x As Single, y As Single)

Rem les deux constentes suivantes permettent de convertir des valeurs en radian ou en degré !
Const vers_radian = 3.141592 / 180
Const vers_degre = 180 / 3.141592

Rem J'efface la zone de dessin
graph.Cls

Rem je trace le rectangle vert
graph.Line (0, 0)-(x, y), QBColor(10), BF

Rem puis les 2 axes
graph.Line (-100, 0)-(100, 0), QBColor(4)
graph.Line (0, -100)-(0, 100), QBColor(4)

Rem enfin je trace la ligne origine==>curseur
graph.Line (0, 0)-(x, y), QBColor(15)

Rem ces 3 formules sont assez simple. j'utilise int(nombre/x)*x ou x est le nombre de chiffres aprè la virgule
Rem je sai une fonction existe pour ça mais bon...
coord = "(" + Str(Int(x * 100) / 100) + ";" + Str(Int(y * 100) / 100) + ")"
dist = Sqr(x ^ 2 + y ^ 2)'pythagore mais on ne voit pas X2 et Y2 car ils valent 0
angle = Int(Atn(y / x) * vers_degre * 1000) / 1000

Rem ici vient le gros du travail (pas pour moi, vu que je connais bien [branche préférée])
If x < 0 Then 'Dans quel quadran somme nous ?
angle = 180 + angle
End If

Rem ce n'est que la taille du "pinceau"
 graph.DrawWidth = 3

Rem trçage de l'arc de cercle
For ix = 0 To angle Step .5
graph.PSet (Cos(ix * vers_radian) * dist / 2, Sin(ix * vers_radian) * dist / 2), QBColor(15)
Next

Rem vous savez...
graph.DrawWidth = 2

Rem ça c'est la ligne origine==>curseur qui a subit une rotation de 45 degré
graph.Line (0, 0)-(Cos((angle + 45) * vers_radian) * dist, Sin((angle + 45) * vers_radian) * dist), QBColor(14)
End Sub

Conclusion :


Attention : c'est en VB3
Nouveau : Update vers VB6
Dorénavant je ferai VB3 et VB6 (VB3 est gratuit !)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
88
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
2 janvier 2007

En fait les "variables" dist,angle et coord sont des textbox placé
sur la feuille
Voilà, ainsi on voit la distance,l'angle et les coordonées
Messages postés
1133
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
24 juillet 2011
1
Autant pour moi, j'ai oublié de :
- renommer la feuille en Graph ;
- mettre la propriété AutoRedraw de celle-ci à True.

J'aurais aimé voir un label qui indiquerait justement les valeurs de ces lignes, angles et radians...

7/10
Messages postés
1133
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
24 juillet 2011
1
Question à 2 cents : Comment fait-on pour l'utiliser dans VB6 ?
Le simple copier-coller ne semble pas marcher...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.