TRANSLATION ET ROTATION D'UN POINT DE L'ÉCRAN EN QUELQUES LIGNES

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 - 3 mars 2006 à 21:17
legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009 - 8 avril 2009 à 19:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36338-translation-et-rotation-d-un-point-de-l-ecran-en-quelques-lignes

legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009
8 avril 2009 à 19:48
Pour ce qui est de l'optimisation, il est vrai que c'est plus court à écrire toutefois, au niveau de la rapidité, je crois que le if est une solution plus rapide!
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
5 mars 2006 à 18:39
Salut les amis :)

Je parle au conditionnel, mais le tuto n'est pas gravé dans le marbre.

L'idéal aurait été une fonction qui retourne le couple de coordonnées modifié.

Le tout avec des variables déclarées en long puisque tu dessines sur l' écran. Aussi je les aurais nommées x1 y1 x2 y2 c'est plus parlant.

Public X, Y, H, V, A, S As Double
... Déclare 5 Variant et un double. Pendant l' exécution, regarder la fenêtre affichage de variables locales pour vérifier (placer un point d' arrêt et faire un tour dans le menu Affichage).

Sub Trigo(X, Y, H, V, A, S)
Idem: la procédure prend 6 variant en arguments.

Comme c'est du niveau 1 il faudrait faire 3 fonctions; une translation, une rotation, et un mix. Le nom "Trigo" n'évoque rien de particulier.

Aussi une image utilisant un petit picture1.circle ou me.circle aurait aidé "les débutants qui haissent les maths". Ou avec la méthode line(), ya des choses très intéressantes à faire.
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
4 mars 2006 à 14:14
"L'origine (0,0) est le coin supérieur haut de l'écran" !!!
Généralement (car dépendant du contrôle ActiveX utilisé!!!) haut gauche de la zone de dessin.

Coté maths, ok, pourquoi pas... Encore qu'il manque cruellement d'explications !!!

Coté code, je ne vois pas l'intérêt !!! Par exemple, tu ne spécifies pas ByVal et ByRef dans ta fonction alors que, justement, si les valeurs sont renvoyées par les variables X et Y il est important de préciser ByRef ne serait-ce pour le codeur qui va utiliser ton code (et qui n'a pas forcément le temps de piger comment tu transmets les valeurs). Mais perso, j'aurais codé un type perso style Coordonnees contenant X et Y !

Bref, perso j'aurais préféré que tu nous fasses un tuto sur la trigo plutôt que de nous pondre des "formules" sans explications ni code réellement (pardonne moi l'expression) "constructif".

Bon, le prends pas mal hein, c'est pas méchant, c'est juste mon avis (un peu "dur" j'en conviens)... Mais c'est quand même une bonne première contribution : continu comme ça :D

Sinon, coté maths, y'a quand même un truc que je pige pas!
Tu m'excuses si je suis à coté de la plaque mais pourquoi ne pas se contenter de faire une truc du genre :
X = PtCentreX + R * Cos(Angle)
Y = PtCentreY + R * Sin(Angle)

Bon, allé, encore une dernière critique (critiques qui ne sont jamais ni positives ni négatives mais toujours constructives!), pourquoi ne pas avoir inclus la possibilité d'utiliser soit les degrés, soit les radians (voire les Grades ;) ?

Enjoy ^^
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
3 mars 2006 à 21:17
Optimisation : Dans l'expression ci-dessous, le test S=0 peut être enlevé.
En effet, la gestion du changement + - peut se faire en utilisant les puissances de -1
(-1)^0 = 1
(-1)^1 = -1

# If S = 0 Then
# XR = XT * Cos(A) + YT * Sin(A)
# YR = -XT * Sin(A) + YT * Cos(A)
# Else
# XR = XT * Cos(A) - YT * Sin(A)
# YR = XT * Sin(A) + YT * Cos(A)
# End If

se remplace, en deux lignes, par :

XR = XT * Cos(A) + ((-1)^S)*YT * Sin(A)
YR = -((-1)^S)*XT * Sin(A) + YT * Cos(A)
Rejoignez-nous