Distance,angle rotation entre 2 points

0/5 (3 avis)

Vue 9 851 fois - Téléchargée 724 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
krissssss Messages postés 88 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 janvier 2007
5 avril 2003 à 13:45
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
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
5 avril 2003 à 10:20
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
cs_PROGRAMMIX Messages postés 1133 Date d'inscription mercredi 2 octobre 2002 Statut Membre Dernière intervention 24 juillet 2011 2
5 avril 2003 à 10:16
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.