cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 2015
-
26 oct. 2005 à 20:55
krissssss
Messages postés88Date d'inscriptionjeudi 26 décembre 2002StatutMembreDernière intervention 2 janvier 2007
-
17 mai 2007 à 15:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
krissssss
Messages postés88Date d'inscriptionjeudi 26 décembre 2002StatutMembreDernière intervention 2 janvier 2007 17 mai 2007 à 15:21
Tu pourais le faire de la même façon avec un tétraèdre :
Tu dois probablement jouer avec les points de percée.
puisque ton solide a 4 sommets dans ce cas, un point y est contenu SSI la droite passant par un des sommets et ton point perce la base opposée au sommet.
Les cas limites étants : point sur une arrête ou un sommet.
Pour le cube, tu le découpe en 2 tétraèdres.
Pour la sphère, il y a une formule de la distance entre 2 point dans l'espace dans l'espace. Il suffit que d < r.
C'est des connaissances en maths qu'il faut plus qu'en VB ;-)
oliv_def
Messages postés14Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention20 décembre 2007 17 mai 2007 à 12:57
Super :-) !
mais ou trouve t on le code testant si un point de l'espace est dans un volume de l'espace (cube) ou dans un premier temps si un point de l'espace est dans un triangle de l'espace ?
on trouve sur VBFRANCE le code : http://www.vbfrance.com/code.aspx?ID=38673, mais il ne repond pas au besoin puisqu'il ne fonctionne que dans le plan egalement...
Bref ce serait tres bien si qqun etudiat le probleme, quand a moi j'ai ce besoin mais ne suis pas un master en vb... :-(
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 11 nov. 2005 à 14:20
Tu n'aimes pas les commentaires non constructifs donc je n'en fais pas
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 30 oct. 2005 à 10:59
Bonjour,
A la suite de la remarque de VBLOVER, sur son code il y a une remarque très intéressante de VbMaster, précisant l'existance d'une API réalisant la même chose, valable pour de nombreuses formes géomètriques...
Autrement, le code proposé me semble assez bien construit dans l'ensemble... Néanmoins, j'ai une remarque sur le code proposé...
LE code :
=
If ppy < p.Y Then
equ = False
Else
If ppy = p.Y Then
equ = True
Else
equ = True
End If
End If
=
A été simplifié par Gally avec :
=
If (b.X - a.X) <> &H0 Then
ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y
If ppy < p.Y Then
setTriangle = False
Else
setTriangle = True
End If
End If
=
Il me semble qu'on peut encore faire plus optimum, par :
If (b.X - a.X) <> &H0 Then
ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y
setTriangle = (ppy > p.Y)
End If
=
Amicalement,
Us.
gallyhc
Messages postés386Date d'inscriptionsamedi 4 octobre 2008StatutMembreDernière intervention19 février 20182 27 oct. 2005 à 09:35
ReBOnjour,
Petite erreur dans le message si-dessus, revu et corrigé:
Public Type TPoint
X As Double
Y As Double
End Type
Public Function setTriangle(ByRef a As TPoint, ByRef b As TPoint, ByRef p As TPoint) As Boolean
'
If (b.X - a.X) <> &H0 Then
ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y
If ppy < p.Y Then
setTriangle = False
Else
setTriangle = True
End If
End If
End Function
Public Function getInTriangle(ByRef a As TPoint, ByRef b As TPoint, ByRef c As TPoint, ByRef p As TPoint) As Boolean
'
getInTriangle Not ((setTriangle(a, b, c) Not setTriangle(a, b, p)) Or (setTriangle(b, c, a) = Not setTriangle(b, c, p)) Or (setTriangle(c, a, b) = Not setTriangle(c, a, p)))
End Function
A++
[Gally Home Corp]
gallyhc
Messages postés386Date d'inscriptionsamedi 4 octobre 2008StatutMembreDernière intervention19 février 20182 27 oct. 2005 à 09:06
Bonjour Krissssss,
Je penses pour ma par que voir plusieurs méthodes est une bonne choses. Même si vous avez des codes "plus propre", cela n'empeche pas de voir d'autre façon de faire.
Sinon tu peux optimiser avec la
Public Function dansTriangle(Byval a As TPoint, Byval b As TPoint, Byval c As TPoint, Byval p As TPoint) As Boolean
'
dansTriangle Not ((equ(a, b, c) Not equ(a, b, p)) Or (equ(b, c, a) = Not equ(b, c, p)) Or (equ(c, a, b) = Not equ(c, a, p)))
End Function
A++
[Gally Home Corp]
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 26 oct. 2005 à 21:41
je pense aussi que la diversité est un avantage, sauf quand elle n'apporte rien de plus (surtout quand c'est des maths)! j'ai posté un code il y a longtemps sur ce site qui fait exactement la même chose, mais de manière mathématique beaucoup plus élégante:
je pense que d'un point de vue purement utilitaire, rien ne sert de rajouter des sources qui font la même chose que d'autres; ça surcharge inutilement les recherches des utilisateurs
à part ça je n'ai rien de personnel contre ce code:)
cs_Alain Proviste
Messages postés908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 26 oct. 2005 à 20:55
il y a une méthode matricielle pour ça, beaucoup plus rapide et efficace, qu'on peut trouver sur vbfrance aussi :)
17 mai 2007 à 15:21
Tu dois probablement jouer avec les points de percée.
puisque ton solide a 4 sommets dans ce cas, un point y est contenu SSI la droite passant par un des sommets et ton point perce la base opposée au sommet.
Les cas limites étants : point sur une arrête ou un sommet.
Pour le cube, tu le découpe en 2 tétraèdres.
Pour la sphère, il y a une formule de la distance entre 2 point dans l'espace dans l'espace. Il suffit que d < r.
C'est des connaissances en maths qu'il faut plus qu'en VB ;-)
17 mai 2007 à 12:57
mais ou trouve t on le code testant si un point de l'espace est dans un volume de l'espace (cube) ou dans un premier temps si un point de l'espace est dans un triangle de l'espace ?
on trouve sur VBFRANCE le code : http://www.vbfrance.com/code.aspx?ID=38673, mais il ne repond pas au besoin puisqu'il ne fonctionne que dans le plan egalement...
Bref ce serait tres bien si qqun etudiat le probleme, quand a moi j'ai ce besoin mais ne suis pas un master en vb... :-(
11 nov. 2005 à 14:20
30 oct. 2005 à 10:59
A la suite de la remarque de VBLOVER, sur son code il y a une remarque très intéressante de VbMaster, précisant l'existance d'une API réalisant la même chose, valable pour de nombreuses formes géomètriques...
Autrement, le code proposé me semble assez bien construit dans l'ensemble... Néanmoins, j'ai une remarque sur le code proposé...
LE code :
=
If ppy < p.Y Then
equ = False
Else
If ppy = p.Y Then
equ = True
Else
equ = True
End If
End If
=
A été simplifié par Gally avec :
=
If (b.X - a.X) <> &H0 Then
ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y
If ppy < p.Y Then
setTriangle = False
Else
setTriangle = True
End If
End If
=
Il me semble qu'on peut encore faire plus optimum, par :
If (b.X - a.X) <> &H0 Then
ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y
setTriangle = (ppy > p.Y)
End If
=
Amicalement,
Us.
27 oct. 2005 à 09:35
Petite erreur dans le message si-dessus, revu et corrigé:
Public Type TPoint
X As Double
Y As Double
End Type
Public Function setTriangle(ByRef a As TPoint, ByRef b As TPoint, ByRef p As TPoint) As Boolean
'
If (b.X - a.X) <> &H0 Then
ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y
If ppy < p.Y Then
setTriangle = False
Else
setTriangle = True
End If
End If
End Function
Public Function getInTriangle(ByRef a As TPoint, ByRef b As TPoint, ByRef c As TPoint, ByRef p As TPoint) As Boolean
'
getInTriangle Not ((setTriangle(a, b, c) Not setTriangle(a, b, p)) Or (setTriangle(b, c, a) = Not setTriangle(b, c, p)) Or (setTriangle(c, a, b) = Not setTriangle(c, a, p)))
End Function
A++
[Gally Home Corp]
27 oct. 2005 à 09:06
Je penses pour ma par que voir plusieurs méthodes est une bonne choses. Même si vous avez des codes "plus propre", cela n'empeche pas de voir d'autre façon de faire.
Sinon tu peux optimiser avec la
Public Function dansTriangle(Byval a As TPoint, Byval b As TPoint, Byval c As TPoint, Byval p As TPoint) As Boolean
'
dansTriangle Not ((equ(a, b, c) Not equ(a, b, p)) Or (equ(b, c, a) = Not equ(b, c, p)) Or (equ(c, a, b) = Not equ(c, a, p)))
End Function
A++
[Gally Home Corp]
26 oct. 2005 à 21:41
http://www.vbfrance.com/code.aspx?id=2196
je pense que d'un point de vue purement utilitaire, rien ne sert de rajouter des sources qui font la même chose que d'autres; ça surcharge inutilement les recherches des utilisateurs
à part ça je n'ai rien de personnel contre ce code:)
26 oct. 2005 à 20:55
mais la diversité c'est un avantage !