Oui je sais que ça fonctionne et que dans certain cas c'est préférable de programmer de cet manière. Mais ce que je voudrais faire c'est d'éviter de programmer une procédure pour quelle retourne une simple variable mais plutôt un point 3D.
Alors une procédure comme celle-ci :
Code : Tout sélectionner
Procedure.f Helice3D(rayon.f, NbSpire.f, Pas.f, Pos_u.f, Calcul.b)
If Calcul = #CoordonneeX
Resultat.f = rayon * Cos(DegToRad(360 * NbSpire * Pos_u))
ElseIf Calcul = #CoordonneeY
Resultat.f = rayon * Sin(DegToRad(360 * NbSpire * Pos_u))
ElseIf Calcul = #CoordonneeZ
Resultat.f = Pas * NbSpire * Pos_u
EndIf
ProcedureReturn Resultat
EndProcedure
Deviendrait comme ceci :
Code : Tout sélectionner
Procedure.Pt3D Helice3D(rayon.f, NbSpire.f, Pas.f, Pos_u.f)
Resultat.Pt3D\x = rayon * Cos(DegToRad(360 * NbSpire * Pos_u))
Resultat.Pt3D\y = rayon * Sin(DegToRad(360 * NbSpire * Pos_u))
Resultat.Pt3D\z = Pas * NbSpire * Pos_u
ProcedureReturn Resultat.Pt3D
EndProcedure
Le principal avantage entre les deux procédures c'est que dans le 2e cas il n'y a aucun test d'effectué pour savoir quelle coordonnée doit être calculé. Puisque de toute façon, je vais faire les 3 calculs, j'ai besoin des 3 coordonnées pour travailler.
Et bien sûr si une fonction peut retrourner une variable structurée il me semble logique qu'elle puisse en recevoir également.
L'autre option serait d'avoir des retours multiples. La même procédure deviendrait alors :
Code : Tout sélectionner
Procedure.f Helice3D(rayon.f, NbSpire.f, Pas.f, Pos_u.f)
x.f = rayon * Cos(DegToRad(360 * NbSpire * Pos_u))
y.f = rayon * Sin(DegToRad(360 * NbSpire * Pos_u))
z.f = Pas * NbSpire * Pos_u
ProcedureReturn {x,y,z}
EndProcedure
; Et à l'appel :
{CoorDx,CoorDy,CoorDz} = Helice3D(rayon.f, NbSpire.f, Pas.f, Pos_u.f)
Donc la procédure place la valeur de x dans CoorDx, le y dans CoorDy et le z dans CoorDz.
Sauf que je n'aime pas vraiment cette dernière méthode.
Mais bon je ne fais qu'une simple suggestion. C'est à Fred de voir s'il peut faire quelque chose du genre.
Mais je sais que c'est possible, dans MatLab ces 2 méthodes fonctionnent, les retours multiples et le retour de variables structurés.
A+
Guimauve