silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: WRAP_VALUE amélioré Jeu 14 Nov 2019 - 14:40 | |
| Bonjour à tous Voici une FNC qui permet de retourner une "Valeur" ramené à un intervalle "Mini,Maxi" (Les nombres à virgules sont également supportés). Il s'agit d'une amélioration de la fonction WRAP_VALUE de panoramic - Code:
-
dim Valeur,Mini,Maxi
Valeur = 420 Mini = 40 Maxi = 400
' Retourne une "Valeur" ramené à l'intervalle "Mini,Maxi" print "EXT_WRAP_VALUE(",Valeur,",",Mini,",",Maxi,") = ",EXT_WRAP_VALUE(Valeur,Mini,Maxi)
END fnc EXT_WRAP_VALUE( EXT_WRAP_VALUE_Value , EXT_WRAP_VALUE_Mini , EXT_WRAP_VALUE_Maxi ) ' Cette FNC retourne une "Valeur" ramené à l'intervalle "Mini,Maxi" dim_local temp ' rétabli "EXT_WRAP_VALUE_Mini" plus petit que "EXT_WRAP_VALUE_Maxi" si nécéssaire if EXT_WRAP_VALUE_Mini>EXT_WRAP_VALUE_Maxi temp=EXT_WRAP_VALUE_Mini EXT_WRAP_VALUE_Mini=EXT_WRAP_VALUE_Maxi EXT_WRAP_VALUE_Maxi=temp end_if ' calcul if EXT_WRAP_VALUE_Mini = EXT_WRAP_VALUE_Maxi result EXT_WRAP_VALUE_Mini else if (EXT_WRAP_VALUE_Value < EXT_WRAP_VALUE_Mini) result EXT_WRAP_VALUE_Maxi - (MOD((EXT_WRAP_VALUE_Mini - EXT_WRAP_VALUE_Value),(EXT_WRAP_VALUE_Maxi - EXT_WRAP_VALUE_Mini))) else result EXT_WRAP_VALUE_Mini + (MOD((EXT_WRAP_VALUE_Value - EXT_WRAP_VALUE_Mini),(EXT_WRAP_VALUE_Maxi - EXT_WRAP_VALUE_Mini))) end_if end_if end_fnc | |
|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Ven 15 Nov 2019 - 15:37 | |
| Ça aussi, c'est pointu ! J'ai encore jamais utilisé wrap_value ! Peut-être un jour...? | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: WRAP_VALUE amélioré Dim 17 Nov 2019 - 0:46 | |
| Merci Silverman pour le partage. - jjn4 a écrit:
- J 'ai encore jamais utilisé wrap_value !
C’est sûrement parce que l’occasion ne s’est pas présentée pour toi. Dans les calcules trigonométriques en général et astronomiques en particulier, il arrive souvent que l’on doit manipuler des valeurs très grandes pour les angles. Il est alors souhaitable de ramener ces grandes valeurs à l’intervalle [0,360[ (0 inclus, 360 exclu) : c’est le rôle de WRAP_VALUE(a)Exemple d'utilisation : - Code:
-
rem ============================================================================ rem La fonction WRAP_VALUE(A) retourne une valeur de l’angle A ramenée à rem l’intervalle semi-fermé à gauche, semi-ouvert à droite [0,360[ rem WRAP_VALUE(a) c’est équivalent à MOD(a,360) rem ============================================================================ dim a font_bold 0 : font_name 0,"ariel" degrees a = 12345678987654321 : ' <--- très grande valeur d'un angle en ° print : print : print " a = " + str$(a) print " mod(a,360) = " + str$(mod(a,360)) : ' <--- ramenée à 60°, c'est plus sympa ! print " wrap_value(360) = " + str$(wrap_value(a)) : ' <--- ramenée à 60°, c'est plus sympa ! print " sin(a) = " + str$(sin(a)) : ' <--- sqr(3)/2 = 0.866033695578443 a = wrap_value(a) print " a = " + str$(a) print " sin(a) = " + str$(sin(a)) : ' <--- sqr(3)/2 = 0.866033695578443 rem ============================================================================
| |
|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Dim 17 Nov 2019 - 14:22 | |
| Ouaah, super ! Promis, au prochain calcul astronomiaque, je l'utilise ! | |
|
Contenu sponsorisé
| Sujet: Re: WRAP_VALUE amélioré | |
| |
|