Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
16 nov. 2005 à 23:27
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
11 mai 2006 à 09:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 11 mai 2006 à 09:28
quite à vouloir faire du portable, en ce cas, autant faire une dll C, par exemple...
VB n'est pas un modèle de portabilité.
On pourrait, a la limite, voir ça comme un 'pseudo code', une implémentation possible de cet algoritme... sur ce point, cette source est interessante
les API mentionnées ci-dessus risque d'être présentes encore un bon moment, dans les dll de Windows...
Maintenant, si c'est pour utiliser en VB, et que le cadre le permet (comme la précision des coordonnées) il vaux mieux, question performance, utiliser les APIs
krissssss
Messages postés88Date d'inscriptionjeudi 26 décembre 2002StatutMembreDernière intervention 2 janvier 2007 10 mai 2006 à 22:55
Renfield,
Moins on est tenu à un système, mieux c'est ! ;-)
En utilisant les API le code est certe plus rapide et plus facil à écrire, cepandant il est difficilement adaptable à d'autres langages/environnements [et donc non portable].
Un code tel que présenté est facilement "portable".
De plus, je suis sûr qu'il existe des librairies super optimisées pour chaque problême développé sur le site donc...Voilà
;-)
cs_the_best
Messages postés212Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention 6 avril 2006 21 nov. 2005 à 10:17
Pas mal ce code ! De temps en temps je cherchait de faire des truc sans ça et j'avait abandonné !
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 20 nov. 2005 à 13:48
Salut Renfield et Asimengo,
J'ai amélioré le code de la fonction pour tenir compte de la bonne remarque d'Asimengo. Maintenant, on peut aussi savoir si le point est sur la frontière.
Je savais qu'ils existent des fonctions API destinées à cela, même si je ne suis pas un grand spécialiste des API. Néanmoins, il me semble qu'elles sont limitées à des variables long, donc à 2 147 483 647 et les fractions sont arrondies. C'est donc bien adapté à l'informatique, par exemple pour une application faisant intervenir les coordonnées de la souris... mais pas pour un pb de math pur. En clair, cette fonction utilise la précision des variables "Double". (donc plage plus importante, et arrondie à 16 décimales)... voilà, c'était un peu ma motivation, en plus qu'il n'existe pas sur VBF (sauf erreur) un code général pour traiter ce type de problème...
Amicalement,
Us.
cs_asimengo
Messages postés280Date d'inscriptionjeudi 24 mars 2005StatutMembreDernière intervention18 mars 2009 17 nov. 2005 à 14:55
Merci Renfield, tè un vrai cowboy plus rapide que lucky luke, c'est appréciable.
A+
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 17 nov. 2005 à 09:34
je pense principalement à ces API là :
Private Const RGN_DIFF As Long = 4
Private Const RGN_OR As Long = 2
Private Declare Function CombineRgn Lib "gdi32.dll" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
Private Declare Function PtInRegion Lib "gdi32.dll" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
cs_asimengo
Messages postés280Date d'inscriptionjeudi 24 mars 2005StatutMembreDernière intervention18 mars 2009 17 nov. 2005 à 09:16
C'est toujours bien de voir des petits programmes qui font les grandes choses, bonne continuation.
Je pense qu'il serait interessant de renvoyer des indicateurs plus précis:
1 = Dans la zone
-1 = Hors de la zone
0 = A la frontière
ceci n'est qu'un exemple
Neanmoins je suis aussi interessé par la solution de Renfield, s'il pouvait libeller toutes les fonctions API sur le sujet je suis preneur.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 16 nov. 2005 à 23:27
Pourquoi ne pas utiliser les fonctions API relatives aux régions.. ??
11 mai 2006 à 09:28
VB n'est pas un modèle de portabilité.
On pourrait, a la limite, voir ça comme un 'pseudo code', une implémentation possible de cet algoritme... sur ce point, cette source est interessante
les API mentionnées ci-dessus risque d'être présentes encore un bon moment, dans les dll de Windows...
Maintenant, si c'est pour utiliser en VB, et que le cadre le permet (comme la précision des coordonnées) il vaux mieux, question performance, utiliser les APIs
10 mai 2006 à 22:55
Moins on est tenu à un système, mieux c'est ! ;-)
En utilisant les API le code est certe plus rapide et plus facil à écrire, cepandant il est difficilement adaptable à d'autres langages/environnements [et donc non portable].
Un code tel que présenté est facilement "portable".
De plus, je suis sûr qu'il existe des librairies super optimisées pour chaque problême développé sur le site donc...Voilà
;-)
21 nov. 2005 à 10:17
20 nov. 2005 à 13:48
J'ai amélioré le code de la fonction pour tenir compte de la bonne remarque d'Asimengo. Maintenant, on peut aussi savoir si le point est sur la frontière.
Je savais qu'ils existent des fonctions API destinées à cela, même si je ne suis pas un grand spécialiste des API. Néanmoins, il me semble qu'elles sont limitées à des variables long, donc à 2 147 483 647 et les fractions sont arrondies. C'est donc bien adapté à l'informatique, par exemple pour une application faisant intervenir les coordonnées de la souris... mais pas pour un pb de math pur. En clair, cette fonction utilise la précision des variables "Double". (donc plage plus importante, et arrondie à 16 décimales)... voilà, c'était un peu ma motivation, en plus qu'il n'existe pas sur VBF (sauf erreur) un code général pour traiter ce type de problème...
Amicalement,
Us.
17 nov. 2005 à 14:55
A+
17 nov. 2005 à 09:34
Private Const RGN_DIFF As Long = 4
Private Const RGN_OR As Long = 2
Private Declare Function CombineRgn Lib "gdi32.dll" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
Private Declare Function PtInRegion Lib "gdi32.dll" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
17 nov. 2005 à 09:16
Je pense qu'il serait interessant de renvoyer des indicateurs plus précis:
1 = Dans la zone
-1 = Hors de la zone
0 = A la frontière
ceci n'est qu'un exemple
Neanmoins je suis aussi interessé par la solution de Renfield, s'il pouvait libeller toutes les fonctions API sur le sujet je suis preneur.
16 nov. 2005 à 23:27
CreateRectRgn & Co (PtInRegion pour le test)