Loading...
Pages: [1]   Go Down
Author Topic: Maths... l'école ne m'a pas aimé ;-)  (Read 398 times)
0 Members and 1 Guest are viewing this topic.
Paris
Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Après mes premiers tests pour faire varier progressivement l'intensité lumineuse des bandes de LED, je trouve que la progession n'est pas linéaire... elle s'allume fort "trop" rapidement.

Pour remédier à ça, avec mon background de modéliste, je me dis : "Faut mettre de l'expo"... mais de l'expo pour les modélistes ça ressemble à ça :

C'est une courbe "quart de cercle, je me suis un peu battu pour trouver comment tracer la fonction, mais j'y suis arrivé (merci Monsieur Pythagore !)

Au niveau code, j'ai appelé la bleu (f(x)): sqlog() (parce qu'elle me rappelait une fonction logarithme) et la rouge (g(x)) sqexp() (parce qu'elle me rappelait une exponentielle).

La verte h(x) est la droite y=x standard.

Code:
int sqlog (long xval,long xmax) {
  if (xval<0){
    if (xval<-xmax) xval=-xmax;
    return -(sqrt(sq(xmax)-sq(xmax+xval)));
  }
  else {
    if (xval>xmax) xval=xmax;
    return (sqrt(sq(xmax)-sq(xmax-xval)));
  }
}

int sqexp (long xval,long xmax) {
  if (xval<0) {
    if (xval<-xmax) xval=-xmax;
    return -(xmax-sqrt(sq(xmax)-sq(-xval)));
  }
  else {
    if (xval>xmax) xval=xmax;
    return (xmax-sqrt(sq(xmax)-sq(xval)));
  }
}

Mais vous allez me dire : "Mais ou est la question ?"... j'y viens :
J'aimerai pouvoir utiliser les courbes "intermédiaires" entre la bleue et la verte, avec une courbure plus faible (moins d'expo diront les modélistes)... mais mon niveau en math me fait coincer. smiley-confuse
« Last Edit: March 04, 2013, 07:39:42 am by UniseV » Logged

EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

france
Offline Offline
Sr. Member
****
Karma: 4
Posts: 277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un truc comme ça ?
C'est une courbe paramétrée Y = X^a
Passe par les points (0,0) et (1,1) avec une courbure plus ou moins prononcée. a=1 on retrouve la droite; et a=0,1 la forme est creusée.
Logged

Christian

Paris
Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est tout à fait l'idée, sauf que ma courbe est un véritable quart de cercle, les intermédiaires devront quant à elles être de véritables arcs de cercle.

Je remet ici mes fonctions "joliement écrites" avec Word :



xM est en fait xMAX, c'est en gros le diamètre du cercle et c'est aussi la limite d'utilisation de ma formule.

L'idée est donc d'ajouter à ces formules un paramètre "a", qui permettrai de la faire varier de plat à quart de cercle, tout en passant toujours par les points [0,0] & [xM,xM].

EDIT : Je viens de comprendre, ce sont mes racine et mes carrés, qui doivent varier de 1 à 2 : 1 étant plat et 2 étant quart de cercle.
Les nouvelles formules avec "a" :

Et la courbe avec a=1,5 :


Merci Christian_R  smiley-wink, il ne me reste plus qu'à syntaxer ça en C/C++.
« Last Edit: March 04, 2013, 05:48:51 am by UniseV » Logged

EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

france
Offline Offline
Sr. Member
****
Karma: 4
Posts: 277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu peux aussi ça
T varie de 0 à 180°

Ces deux équations
X = 1 - [ Cos (T* pi / 360) ] ^a
Y =  [ Sin (T* pi / 360) ] ^a
génèrent une famille de courbes quand on fait varier le paramètre (a).

Quand a=1 on obtient le quart de cercle passant par (0,0) et (1,1)
X = 1 - Cos(t)
Y = Sin(t)

avec t = T *pi/360

Quand a= 2 on obtient
X = 1 - cos ²(t) et
Y = sin² (t)
Mais comme cos²(t) + sin²(t) = 1 ça se résume simplement à  X = Y et ça donne le segment de diagonale.

Pour les valeurs intermédiaires de 1 <a <2 on obtient les autres courbes qui s'intercalent.
« Last Edit: March 04, 2013, 12:16:28 pm by Christian_R » Logged

Christian

Paris
Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ta solution à l'air très propre mais mon X est fixe... le but est d'obtenir une fonction de type f(x)=

J'envoi un nombre dans ma fonction (le x) et ma fonction me renvoi le y.

Avec quoi tu trace tes courbes ?
« Last Edit: March 04, 2013, 02:32:52 pm by UniseV » Logged

EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

france
Offline Offline
Sr. Member
****
Karma: 4
Posts: 277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec Excel 2000, Insérer/Graphique/Nuage de points
Logged

Christian

Paris
Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je viens de télécharger et d'essayer Microsoft Mathematics, c'est pas mal.

Finalement voici le code, pas encore testé, je n'aime pas trop ce mélange de datatypes (float,int,long) mais si ça fonctionne, je ne ferais pas le difficile.

Code:
int sqlog (long xval,long xmax,float curve=2) { // V003
  signed char sens;
  if (xval<0){
    xval=-xval;
    sens=-1;
  }
  else sens=1;
  if (xval>xmax) xval=xmax;
  return sens*(pow(pow(xmax,curve)-pow(xmax-xval,curve),1/curve));
}

int sqexp (long xval,long xmax,float curve=2) {  // V002
  if (xval<0) {
    if (xval<-xmax) xval=-xmax;
    return -(xmax-pow(pow(xmax,curve)-pow(-xval,curve),1/curve));
  }
  else {
    if (xval>xmax) xval=xmax;
    return (xmax-pow(pow(xmax,curve)-pow(xval,curve),1/curve));
  }
}

Le compilateur refuse de compiler si je mets mes fonctions à la fin du sketch, ça ne me le faisait pas avant l'ajout du paramètre "curve" est-ce normal ?

Il me m'insulte comme suit : "error: 'sqlog' was not declared in this scope".
« Last Edit: March 05, 2013, 08:47:44 am by UniseV » Logged

EN: Libraries are my Gurus, they make me believe anything they want !
FR: Les librairies sont mes gourous, elles me font croire ce qu'elles veulent !

Pages: [1]   Go Up
Print
 
Jump to: