SAVOIR SI UN POINT DE L'ESPACE EST OU N'EST PAS DANS UN TRIANGLE (DE L'ESPACE LU
Neron2005
Messages postés63Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention 1 décembre 2013
-
19 juil. 2006 à 17:17
Neron2005
Messages postés63Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention 1 décembre 2013
-
6 juin 2007 à 23:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Neron2005
Messages postés63Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention 1 décembre 20131 6 juin 2007 à 23:30
oui c'est un erreur mais le truc c'est que ma fonction test si la progection du point est ou non dans le triangle.
oliv_def
Messages postés14Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention20 décembre 2007 21 mai 2007 à 09:18
Excellent merci :-) !!
Je regarde ca de suite !
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 18 mai 2007 à 15:41
j'ai généralisé un de mes programmes (2D) pour faire finalement la même chose que ce programme... l'intérêt est qu'il permet aussi de savoir si un point est dans une pyramide, et qu'il utilise une autre approche mathématique du problème (changement de base), tout ceci avec très peu de calculs.
(c'était en réponse à Oliv_Def, mon prog devrait fonctionner avec son problème)
oliv_def
Messages postés14Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention20 décembre 2007 17 mai 2007 à 12:40
Désolé, mais j'ai executer ce code en testant non pas 0 pour Z mais une valeure autre et le point est toujours dans le triangle..
Bref sauf erreure de ma part, cela ne fonctionne pas en 3D :-(
lording
Messages postés6Date d'inscriptionmercredi 26 juillet 2006StatutMembreDernière intervention11 février 2008 16 août 2006 à 16:18
Bonjour à tous,
Je suis à la recherche d'un code similaire.
Explication:
Je capture des trames GPS et converti les coordonnées WGS(etrs89) en lambert72.
Ainsi j'obtiens des valeurs X, Y, H (ma position actuelle).
J'ai un fichier CSV qui contient des position X, Y, H et j'aimerait maintenant que mon code vérifie le contenu ce mon fichier et m?indique si mes coordonnées actuelle se situent dans un rayon de 2 mètres autour d'une des valeurs lu dans le fichiers CSV.
Si oui, alors BIP
Si non alors on continue.
Ceci est mon premier commentaire, alors si je ne m'y suis pas bien pris, veuillez m'en excuser.
Voici un exemple de position X,Y,Z voir l'application cconvert sur le site: www.ngi.be
Valeur de X=150120.001
Valeur de Y=170365.998
Valeur de H=65.345
conversion de:
datum:ETRS89
Elipsoide: GRS80
Projection:None
Coordinates:Geographic
En Vous remerciant pour votre aide et B-R-A-V-O pour VBfrance !!!
Neron2005
Messages postés63Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention 1 décembre 20131 20 juil. 2006 à 18:11
Tres juste je vé reparer ca
rambc
Messages postés224Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention29 mars 2009 20 juil. 2006 à 11:03
Il me semble qu'il ya deux tests de trop.
Si alpha et beta sont positifs pour le 1er repère affine (A;AB;AC) alors on est sur que le point se situe dans le secteur angulaire BAC "en haut à droite" relativement au repère tracé de façon usuelle. La réciproque est vraie.
Pour le 2ème repère affine (B;BC;BA) alors alpha et beta sont positifs si et seulement si le point se situe dans le secteur angulaire CAB.
Un dessin montre qu'il n'est pas utile de tester le 3ème repère affine (C;CB;CA).
cs_Patrice99
Messages postés1221Date d'inscriptionjeudi 23 août 2001StatutMembreDernière intervention 9 septembre 2018 20 juil. 2006 à 08:43
# If S1 >= 0 Then
# If S2 >= 0 Then
Pour faire à la fois rapide et clair, il suffit d'inverser les conditions :
If S1 < 0 Then Goto Suite
If S2 < 0 Then Goto Suite
...
Et en VB.Net :
If S1 >= 0 AndAlso S2 >= 0 AndAlso ... Then
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 19 juil. 2006 à 22:44
Et... enocre moi... Une autre petite remarque.
La structure de test du type :
IF NOT Variable = 0 THEN
me semble moins rapide que son équivalent :
IF variable <>0 THEN
donc, si tu cherches la rapidité...
Amicalement,
Us.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 19 juil. 2006 à 22:32
Bonsoir,
Une simple question... Si je comprend bien, le but n'est pas d'en faire une application mathématique, mais de l'utiliser pour de la 3D. Dans ces conditions, les déclarations des variables en Double, ne seraient-elles pas suffisantes en LONG ? (donc plus rapide, et valeurs entières...)
Dans le même thème, il me semble que les lignes :
"Dim Alpha, Betha ' Les coeficiants des vecteurs "
"Dim A, B, C, d, N "
gagneraient à être déclarées avec le type. Actuellement, ces variables sont en Variant, donc peu rapide et non nécessaire ici... et même chose dans "IsPointInTRGL".
Amicalement,
Us.
Neron2005
Messages postés63Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention 1 décembre 20131 19 juil. 2006 à 20:15
Alors MadM@tt ecrire le code de cette facon :
# If S1 >= 0 Then
# If S2 >= 0 Then
# If S3 >= 0 Then
# If S4 >= 0 Then
# If S5 >= 0 Then
# If S6 >= 0 Then
# IsPointInTRGL = True
# End If
# End If
# End If
# End If
# End If
# End If
permet de gagner du temps (exemple : si S3 < 0, il n'y aurra que trois calcule alors que faire If S1>=0 and S2>=0 and .... Then, il y aurra quoi qu'il arrive 6 calcules).
Si on ne fait cette action qu'une fois, pourquoi pas, mais si on veut comme moi le faire une vingtaine de fois par seconde, c'est toujours bien de gagnez quelques centieme.
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 19 juil. 2006 à 19:35
Tu peux aussi employé PlaneIntersectLine si l'intersection correspond a ton point alors il est bien dans la surface du triangle.
@+
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 19 juil. 2006 à 18:11
J'ai adoré la présentation de la source, ça permet de comprendre le fonctionnement sans se casser le crane à déchiffrer le code, ça fait gagner un temps fou et pas tout le monde le fait. Bravo pour ça.
Sinon :
# If S1 >= 0 Then
# If S2 >= 0 Then
# If S3 >= 0 Then
# If S4 >= 0 Then
# If S5 >= 0 Then
# If S6 >= 0 Then
# IsPointInTRGL = True
# End If
# End If
# End If
# End If
# End If
# End If
à remplacer par :
If S1>=0 and S2>=0 and .... Then
Endif
Puis sinon pour tes goto, enfin c'est un avis personnel, mais des fois c'est plus parlant de mettre un mot ou une phrase plutot qu'un numéro
Et c'est marrant le colorateur syntaxique ne reconnait meme pas le mot clé rem... ^^
(PS : je croit que coefficient, ben ça s'écrit comme ça)
Bonne continuation
A+
Neron2005
Messages postés63Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention 1 décembre 20131 19 juil. 2006 à 17:17
J'oubliais de dire que si l'on veut l'utiliser dans le plan (càd sur la page form), il sufit de mettre la valeur 0 aux coordonées z. C'est juste un rappel mais pas necessairement inutile.
6 juin 2007 à 23:30
21 mai 2007 à 09:18
Je regarde ca de suite !
18 mai 2007 à 15:41
(c'était en réponse à Oliv_Def, mon prog devrait fonctionner avec son problème)
http://www.vbfrance.com/codes/SAVOIR-SI-POINT-3D-EST-DANS-TRIANGLE-PYRAMIDE_42743.aspx
bonne prog à tous
17 mai 2007 à 12:40
Bref sauf erreure de ma part, cela ne fonctionne pas en 3D :-(
16 août 2006 à 16:18
Je suis à la recherche d'un code similaire.
Explication:
Je capture des trames GPS et converti les coordonnées WGS(etrs89) en lambert72.
Ainsi j'obtiens des valeurs X, Y, H (ma position actuelle).
J'ai un fichier CSV qui contient des position X, Y, H et j'aimerait maintenant que mon code vérifie le contenu ce mon fichier et m?indique si mes coordonnées actuelle se situent dans un rayon de 2 mètres autour d'une des valeurs lu dans le fichiers CSV.
Si oui, alors BIP
Si non alors on continue.
Ceci est mon premier commentaire, alors si je ne m'y suis pas bien pris, veuillez m'en excuser.
Voici un exemple de position X,Y,Z voir l'application cconvert sur le site: www.ngi.be
Valeur de X=150120.001
Valeur de Y=170365.998
Valeur de H=65.345
conversion de:
datum:ETRS89
Elipsoide: GRS80
Projection:None
Coordinates:Geographic
<<<<< Conversion vers:
Datum: Belgian Datum72
Elipsiode: Hayford24
Projection: Lambert
Coordinates: Plane
En Vous remerciant pour votre aide et B-R-A-V-O pour VBfrance !!!
20 juil. 2006 à 18:11
20 juil. 2006 à 11:03
Si alpha et beta sont positifs pour le 1er repère affine (A;AB;AC) alors on est sur que le point se situe dans le secteur angulaire BAC "en haut à droite" relativement au repère tracé de façon usuelle. La réciproque est vraie.
Pour le 2ème repère affine (B;BC;BA) alors alpha et beta sont positifs si et seulement si le point se situe dans le secteur angulaire CAB.
Un dessin montre qu'il n'est pas utile de tester le 3ème repère affine (C;CB;CA).
20 juil. 2006 à 08:43
# If S2 >= 0 Then
Pour faire à la fois rapide et clair, il suffit d'inverser les conditions :
If S1 < 0 Then Goto Suite
If S2 < 0 Then Goto Suite
...
Et en VB.Net :
If S1 >= 0 AndAlso S2 >= 0 AndAlso ... Then
19 juil. 2006 à 22:44
La structure de test du type :
IF NOT Variable = 0 THEN
me semble moins rapide que son équivalent :
IF variable <>0 THEN
donc, si tu cherches la rapidité...
Amicalement,
Us.
19 juil. 2006 à 22:32
Une simple question... Si je comprend bien, le but n'est pas d'en faire une application mathématique, mais de l'utiliser pour de la 3D. Dans ces conditions, les déclarations des variables en Double, ne seraient-elles pas suffisantes en LONG ? (donc plus rapide, et valeurs entières...)
Dans le même thème, il me semble que les lignes :
"Dim Alpha, Betha ' Les coeficiants des vecteurs "
"Dim A, B, C, d, N "
gagneraient à être déclarées avec le type. Actuellement, ces variables sont en Variant, donc peu rapide et non nécessaire ici... et même chose dans "IsPointInTRGL".
Amicalement,
Us.
19 juil. 2006 à 20:15
# If S1 >= 0 Then
# If S2 >= 0 Then
# If S3 >= 0 Then
# If S4 >= 0 Then
# If S5 >= 0 Then
# If S6 >= 0 Then
# IsPointInTRGL = True
# End If
# End If
# End If
# End If
# End If
# End If
permet de gagner du temps (exemple : si S3 < 0, il n'y aurra que trois calcule alors que faire If S1>=0 and S2>=0 and .... Then, il y aurra quoi qu'il arrive 6 calcules).
Si on ne fait cette action qu'une fois, pourquoi pas, mais si on veut comme moi le faire une vingtaine de fois par seconde, c'est toujours bien de gagnez quelques centieme.
19 juil. 2006 à 19:35
@+
19 juil. 2006 à 18:11
Sinon :
# If S1 >= 0 Then
# If S2 >= 0 Then
# If S3 >= 0 Then
# If S4 >= 0 Then
# If S5 >= 0 Then
# If S6 >= 0 Then
# IsPointInTRGL = True
# End If
# End If
# End If
# End If
# End If
# End If
à remplacer par :
If S1>=0 and S2>=0 and .... Then
Endif
Puis sinon pour tes goto, enfin c'est un avis personnel, mais des fois c'est plus parlant de mettre un mot ou une phrase plutot qu'un numéro
Et c'est marrant le colorateur syntaxique ne reconnait meme pas le mot clé rem... ^^
(PS : je croit que coefficient, ben ça s'écrit comme ça)
Bonne continuation
A+
19 juil. 2006 à 17:17