Ex. de modularisation : point dans triangle

Description

Ce code est Très simple (comme d'habitude...)
Il montre comment on peut modulariser (Découper un problême en sous problêmes plus évidents) une tâche.

Ici la tâche est de vérifier si un point est dans un triangle.
On peut modulariser comme suit :
1)equ(a:TPoint, b:TPoint, p:TPoint)->Boléen
2)dansTriangle(c:TPoint, d:TPoint, e:TPoint, p:TPoint)->Boléen

Dessous, le module ;-)
Vous remarquerez que dansTriangle() fait appel à equ().
Aussi, le code de l'application ne fera appel qu'a dansTriangle()
Surtout, ne pas faire l'erreur de mettre un private devant equ() ! Car ainsi elle reste utilisable hors module.

Source / Exemple :


Public Type TPoint ' le type perso ;-)
X As Double
Y As Double
End Type
Public Function equ(a As TPoint, b As TPoint, p As TPoint) As Boolean
If (b.X - a.X) <> 0 Then ' vérifier si les points n'ont pas la même absice
ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y
If ppy < p.Y Then
    equ = False
Else
    If ppy = p.Y Then
        equ = True
    Else
        equ = True
    End If
End If
Else
equ = p.X >= a.X ' ça vous choque ? "a>b" et "a=b" sont des expressions boléennes, leur valeur peuvent être stockés dans une variable :-)
End If
End Function

Public Function dansTriangle(a As TPoint, b As TPoint, c As TPoint, p As TPoint) As Boolean
dansTriangle = True
If (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)) Then dansTriangle = False 
'si le sommet est au dessus du côté opposé et que le point P est en dessous du côté alors P est hors du triangle ainsi que si ... 
End Function

Conclusion :


Voilà, cela faisait longtemps que je n'avais plus posté ;-)
Donc, un petit post s'imposait :-)

Petit rappel :
"ppy = (b.Y - a.Y) * (p.X - a.X) / (b.X - a.X) + a.Y" n'est pas une formule tombée du ciel ;-)
être programmeur, c'est savoir ce qu'il faut faire et sourtout : Aimer chercher !!!!
Aussi, si vous en cherchez l'origine voici le dévlopement:
Y=aX+b
a=(A(y)-B(y))/(A(x)-B(x))
==>
A(y)=aA(x)+b
b=A(y)-aA(x)
==> On introduit un point P
P(y)=aP(x)+b
P(y)=(A(y)-B(y))/(A(x)-B(x))P(x)+A(y)-(A(y)-B(y))/(A(x)-B(x))A(x)
P(y)=(A(y)-B(y))/(A(x)-B(x))(P(x)-A(x))+A(y)
Sachant qu'il vaut mieux multiplier PUIS diviser :
P(y)=(A(y)-B(y))(P(x)-A(x))/(A(x)-B(x))+A(y)

Codes Sources

A voir également

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.