Forum Liberty Basic France

Débutant » Quelqu'un pourrait-il m'aider?? Arrondir un nombre réel....
Le 15/12/2012 à 08h17

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Reprise du message précédent

C'est vrai que j'ai un écran de 22 pouces (1920x1080), mais celui de chris ne doit être petit non plus, car j'ai simplement repris les dimensions données dans son code et j'ai même réduit le WindowWidth mais j'ai effectivement oublié le WindowHeight...
Il faut surtout aussi modifier le UpperLeftY qui donne la position en Y de la fenêtre à l'écran, avec UpperLeftY = 0 par exemple, afin que le haut de la fenêtre soit toujours visible... :siffle
JB connait la définition actuelle de ton écran avec DisplayWidth et DisplayHeight, il faut se débrouiller avec ça...!

Par contre chris, il serait peut-être intéressant de redimensionner l'echelle de la représentation de Fresnel car si on fait V1 + V2 + V3 avec une amplitude de 1.5 pour chacun par exemple ça fait 4.5 et l'échelle actuelle s'arrête à 2 !

Pas d'idée contre le scintillement Roland ?

@+



Edité par cassiope01 Le 15/12/2012 à 08h24
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/12/2012 à 09h02

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
J'ai modifié le code dans le post où il est, mais il se pourrait que JB ne gère pas ça très bien !!!!

@+
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/12/2012 à 17h23

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Ma foi, je ne vois aucun scintillement . Bien sur il y a l'effet de saut des vecteurs d'un affichage à l'autre. Qui pourrait etre réduit par un plus grand nombre d'affichage ( ce qui ralentirait aussi l'animation)
Peut-etre qu'en affichant la nouvelle pos avant d'effacer l'ancienne. Parce que là j'ai l'impression que toute l'image des vecteurs disparait puis réaparait.
Je viens de jeter un oeil sur mon gag "trébuchet" (rubrique trébuchet) et la rotation du bras se fait de façon fluide. La dimension de l'image ne doit pas y etre pour rien (quantité de données à traiter)
Mais avec ton code (avant modifs), pas le moindre scintillement. je mate la modif ...à+.
____________________
Roro

   
Le 15/12/2012 à 17h36

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
En s'entendant sur les termes: Un scintillement concerne la totalité de l'image.
____________________
Roro

   
Le 15/12/2012 à 17h45

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Le scintillement ne se voit QUE sur le graphisme animé !

Bonne idée de tester l'affichage de la nouvelle pos avant d'effacer la nouvelle, mais on risque de voir comme une trainée d'affichage... mais faut essayer :top enfin il faut voir comment faire ça...

C'est une limite très domage de JB je trouve: le graphisme.
D'autre langage gèrent très bien ça tout seul, et sans remplir la mémoire inutilement en plus...!

Notre ami chris doit être pris dans les neiges canadiennes :top :lol

@+
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/12/2012 à 18h00

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Ca y'est, je l'ai fait. les vecteurs tournent fluide, mais ce n'est pas encore parfait, et il reste les lignes violettes
Je mets le code Evidemment, tu me connais...y'a du rabe de variables... :s
J' ai fait l'essai sans toucher aux valeurs avec V1+V2-V3

Code JB :
 
 
    nomainwin
 
    WindowWidth = 1150
    WindowHeight = 750
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = 1
    if WindowHeight < DisplayHeight then UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
    mois$ = "Jan Fév Mar Avr Mai Jun Jui Aou Sep Oct Nov Déc"
   ' mois$ = "January February March April May June July August September October November December"     'US format
    today$ = date$("mm/dd/yyyy")
    j = date$(today$)
    jsem$ = word$("Mar Mer Jeu x Ven Sam x Dim Lun",int((j/7-int(j/7))*10)+1)
   ' jsem$ = word$("Tue Wed Thu x Fri Sat x Sun Mon",int((j/7-int(j/7))*10)+1)      ' US format
    date$ = jsem$+" "+mid$(today$,4,2)+" "+word$(mois$, val(today$))+"   "+left$(time$(),5)'right$(today$,4)
   ' date$ = jsem$+" "+word$(mois$, val(today$))+", "+mid$(today$,1,2)+"   "+left$(time$(),5)'right$(today$,4)   ' US format
 
    GLOBAL v1,v11,v12,v2,v21,v22,v3,v31,v32,Vtot,plus,moins,plus2,moins2, go  ' variable globales car touchées par la SUB init.
 
    button #SINUS.b1, "V1",  init, UL, 30, 10, 30, 30
    button #SINUS.b2, "V2",  init, UL, 30, 40, 30, 30
    button #SINUS.b3, "V3",  init, UL, 30, 70, 30, 30
    button #SINUS.b4, "+",   init, UL, 135, 20, 30, 30
    button #SINUS.b5, "-",   init, UL, 135, 50, 30, 30
    button #SINUS.b6, "V1",  init, UL, 250, 10, 30, 30
    button #SINUS.b7, "V2",  init, UL, 250, 40, 30, 30
    button #SINUS.b8, "V3",  init, UL, 250, 70, 30, 30
    button #SINUS.b9, "+",   init, UL, 370, 20, 30, 30
    button #SINUS.b10, "-",  init, UL, 370, 50, 30, 30
    button #SINUS.b11, "V1", init, UL, 500, 10, 30, 30
    button #SINUS.b12, "V2", init, UL, 500, 40, 30, 30
    button #SINUS.b13, "V3", init, UL, 500, 70, 30, 30
    button #SINUS.b14, "GO", init, UL, 610, 30, 40, 40
    statictext #SINUS.fleche, ">>>", 684, 42, 60, 20
    statictext #SINUS.av1, "Amplitude V1  ( entre 0 et 1.5 )", 750, 20, 150, 20
    statictext #SINUS.av2, "Amplitude V2  ( entre 0 et 1.5 )", 750, 50, 150, 20
    statictext #SINUS.av3, "Amplitude V3  ( entre 0 et 1.5 )", 750, 80, 150, 20
    TEXTBOX #SINUS.amp1, 910, 15, 45, 24
    TEXTBOX #SINUS.amp2, 910, 45, 45, 24
    TEXTBOX #SINUS.amp3, 910, 75, 45, 24
    statictext #SINUS.an1, "Angle V1", 1000, 20, 50, 20
    statictext #SINUS.an2, "Angle V2", 1000, 50, 50, 20
    statictext #SINUS.an3, "Angle V3", 1000, 80, 50, 20
    TEXTBOX #SINUS.angle1, 1070, 15, 45, 24
    TEXTBOX #SINUS.angle2, 1070, 45, 45, 24
    TEXTBOX #SINUS.angle3, 1070, 75, 45, 24
    graphicbox #SINUS.GBOX, 4, 124, WindowWidth-14, WindowHeight-150
 
    OPEN "    VECTEURS..."+space$(20)+date$ for window_nf as #SINUS  'graphics_nf_nsb
    #SINUS "trapclose quit"
    #SINUS.GBOX "down"
    #SINUS.amp1 "!font Arial 12"
    #SINUS.amp2 "!font Arial 12"
    #SINUS.amp3 "!font Arial 12"
    #SINUS.angle1 "!font Arial 12"
    #SINUS.angle2 "!font Arial 12"
    #SINUS.angle3 "!font Arial 12"
    #SINUS.b14 "!font Arial 9 bold"
    #SINUS.fleche "!font Arial 13"
    V1 = 0.5
    V2 = 1.0
    V3 = 1.5
    angle1 = 20
    angle2 = 60
    angle3 = 90
    #SINUS.amp1 using("#.#",V1)
    #SINUS.amp2 using("#.#",V2)
    #SINUS.amp3 using("#.#",V3)
    #SINUS.angle1 angle1
    #SINUS.angle2 angle2
    #SINUS.angle3 angle3
    deg = 0.017453292      '  0.01745329252 correspond à 1 degré en redians
    XPRIME=4 :YPRIME1=250 :YPRIME2=250 :YPRIME3=250 :YPRIME4=250
 
    while 1      '  boucle principale du programme. (while 1 n'est pas recommandé mais des fois y a pas le choix ;) )
        scan
        GOSUB [dessin_axes]  ' juste pour ne pas voir une feuille blanche au départ !
        if go = 1 then GOSUB [dessin]  ' go = 1 ou 0 suivant l'appui sur le bouton "GO"/"NEW" ( #SINUS.b14 )
    wend
 
    WAIT
 
 
' ------------------ ROUTINE de traitement de l'appui sur un bouton quelconque --------------------
    SUB init handle$
        bt = val(mid$(handle$,9))  ' n° du boutton pressé (extrait de son nom transmis dans handle$)
        select case bt
        case 1,2,3
            if bt=1 then v1 = 1
            if bt=2 then v2 = 1
            if bt=3 then v3 = 1
            for b=1 to 3 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
        case 4,5
            if v1+v2+v3>0 then
                if bt=4 then plus = 1
                if bt=5 then moins = 1
                for b=1 to 5 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            end if
        case 6,7,8
            if bt=6 then v11 = 1
            if bt=7 then v21 = 1
            if bt=8 then v31 = 1
            for b=1 to 8 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
        case 9,10
            if v11+v21+v31>0 then
                if bt=9 then plus2 = 1
                if bt=10 then moins2 = 1
                for b=1 to 10 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            end if
        case 11,12,13
            if bt=11 then v12 = 1
            if bt=12 then v22 = 1
            if bt=13 then v32 = 1
            for b=1 to 13 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
        case 14      '  le bouton "GO" qui se transforme en "NEW"
            if v1+v11+v12+v2+v21+v22+v3+v31+v32 = 0 then
                notice "Choisissez l'opération désirée..."
                go = 0
                exit SUB  ' sort de la SUB.
            end if
            if go = 0 then     '   la représentation pourra commencer.
                go = 1
                #SINUS.b14 "NEW"
                for b=1 to 13 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            else               '   réinitialisation pour une nouvelle représentation.
                go = 0
                #SINUS.b14 "GO"
                #SINUS.GBOX "cls"
                for b=1 to 13 : hdle$ = "#SINUS.b";b : #hdle$ "!enable" : next  ' réactive tous les boutons
                v1=0 : v2=0 : v3=0 : v11=0 : v21=0 : v31=0 : v12=0 : v22=0 : v32=0 : Vtot=0
                plus=0 : moins=0 : plus2=0 : moins2=0
            end if
        end select
    END SUB
' --------------------------------------------------------------------------------------------
 
    [dessin]    '      mise à jours des paramètres, puis calculs en temps réel et dessin des courbes.
        V1 = 0 : V2 = 0 : V3 = 0
        if (v1=1 or v11=1 or v12=1) then
            #SINUS.amp1 "!contents? V1"
            #SINUS.angle1 "!contents? angle1"
            if V1>1.5 then notice "Amplitude de V1 doit être entre 0 et 1.5" : go = 0
        end if
        if (v2=1 or v21=1 or v22=1) then
            #SINUS.amp2 "!contents? V2"
            #SINUS.angle2 "!contents? angle2"
            if V2>1.5 then notice "Amplitude de V2 doit être entre 0 et 1.5" : go = 0
        end if
        if (v3=1 or v31=1 or v32=1) then
            #SINUS.amp3 "!contents? V3"
            #SINUS.angle3 "!contents? angle3"
            if V3>1.5 then notice "Amplitude de V3 doit être entre 0 et 1.5" : go = 0
        end if
        if go = 0 then return  ' pour sortir si V1,V2 ou V3 sont hors limite.
        Vtot = 0
      if plus+moins+plus2+moins2>0 then   ' si on a demandé une opération
        select case
        case v1=1  : Vy = V1 : angley = angle1
        case v2=1  : Vy = V2 : angley = angle2
        case v3=1  : Vy = V3 : angley = angle3
        end select
        select case
        case v11=1 : Vz = V1 : anglez = angle1
        case v21=1 : Vz = V2 : anglez = angle2
        case v31=1 : Vz = V3 : anglez = angle3
        end select
        select case
        case v12=1 : Vk = V1 : anglek = angle1
        case v22=1 : Vk = V2 : anglek = angle2
        case v32=1 : Vk = V3 : anglek = angle3
        end select
 
        if plus+moins=0 then Vy=0 :angley=0
        if plus2+moins2=0 then Vk=0 :anglek=0
        if moins=1 then anglez=anglez+180
        if moins2=1 then anglek=anglek+180
        XX=0
        YY=0
        op1$=" "
        op2$=" "
        if plus=1 then op1$="+"
        if moins=1 then op1$="-"
        if plus2=1 then op2$="+"
        if moins2=1 then op2$="-"
 
       'calcul de Vtot et angletot    ********************************  Vtot = Vy+Vz+Vk
         XX = (Vy*cos(angley*deg))+(Vz*cos(anglez*deg))+(Vk*cos(anglek*deg))
         XX2 = XX^2
         YY = (Vy*sin(angley*deg))+(Vz*sin(anglez*deg))+(Vk*sin(anglek*deg))
         YY2 = YY^2
         if XX=0 then                            '
             if YY>0 then                        ' Test pour éviter la division par zéro
                 angletot=90                     ' et corriger s'il y a lieu l'angle (+ ou - 90°)
             else                                '
                 angletot=-90: goto [VTOTAL]     '
             end if
         end if
         angletot1=atn(YY/XX)  'en radians
         angletot=angletot1/deg  'en degrés          calcul de angletot en degrés
 
         [VTOTAL]
         Vtot = sqr(XX2+YY2)   ' calcul de Vtot
         if (XX<0) then angletot=angletot+180 ' Correction de l'angle si XX est négatif: on doit ajouter alors 180°
 
         if abs(Vtot)<0.01 then    ' sert à empècher angletot de 90 quand Vtot
            Vtot=0 : angletot=0    ' est trop petit (négligeable)et positif
         end if
       end if
 
         #SINUS.GBOX, "font Arial 12"
         Vyy$ = " " : Vzz$ = " " : Vkk$ = " "
         if V1>0 then
             #SINUS.GBOX "COLOR red"
             #SINUS.GBOX "PLACE 750 550"   'IMPRESSION NOTICE V1 (COULEUR rouge)
             #SINUS.GBOX "\- V1 = ";V1; " avec un angle de ";angle1; " degrés"
             Vyy$ = "V1"
         end if
         if V2>0 then   'bypass de l'impression de V2...
             #SINUS.GBOX "COLOR blue "
             #SINUS.GBOX "PLACE 750 575"   'IMPRESSION NOTICE V2 (COULEUR bleu)
             #SINUS.GBOX "\- V2 = ";V2; " avec un angle de "; angle2; " degrés"
             Vzz$ = "V2"
         end if
         if V3>0 then   'bypass de l'impression de V3...
             #SINUS.GBOX "COLOR green "
             #SINUS.GBOX "PLACE 750 600"   'IMPRESSION NOTICE V3 (COULEUR  vert)
             #SINUS.GBOX "\- V3 = ";V3; " avec un angle de "; angle3; " degrés"
             Vkk$ = "V3"
         end if
         if plus+moins+plus2+moins2>0 then
             #SINUS.GBOX "font Arial 16"
             #SINUS.GBOX "COLOR black"        ' Impression de la notice  premier signe + ou -
             #SINUS.GBOX "PLACE 535 650"
             #SINUS.GBOX "\"; op1$
 
             #SINUS.GBOX "PLACE 605 650"      ' Impression de la notice  second signe + ou -
             #SINUS.GBOX "\"; op2$
 
             #SINUS.GBOX "font Arial 14"
             #SINUS.GBOX "COLOR red"          ' Impression de la notice  Vy
             #SINUS.GBOX "PLACE 500 650"
             #SINUS.GBOX "\"; Vyy$
 
             #SINUS.GBOX "COLOR blue"         ' Impression de la notice  Vz
             #SINUS.GBOX "PLACE 565 650"
             #SINUS.GBOX "\"; Vzz$
 
             #SINUS.GBOX "COLOR green"         ' Impression de la notice  Vk
             #SINUS.GBOX "PLACE 632 650"
             #SINUS.GBOX "\"; Vkk$
 
             #SINUS.GBOX "COLOR black "
             #SINUS.GBOX "PLACE 675 650"   'IMPRESSION NOTICE Vtot (COULEUR  noir)
             #SINUS.GBOX "\= Vtot = ";USING("##.###",Vtot);" avec un angle de ";USING("###.##",angletot);" degrés."
         end if
        orig = 800
        #SINUS.GBOX, "font Arial 10"
 
       FOR i=0 TO 540   ' --------------- boucle de dessin des courbes ------------------------
            scan
            if go = 0 then exit for  ' si le bouton "NEW" est cliqué : on sort.
 
            GOSUB [dessin_axes]
            GOSUB [calculs]
 
        if V1>0 then           'Pas d'impression si V1=0
            #SINUS.GBOX "SIZE 2 ; COLOR RED"                                'IMPRESSION V1
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a1;" ";b1
            #SINUS.GBOX "PLACE ";orig;" "; 250
            #SINUS.GBOX "circle 2"       'impression d'un petit cercle à la base de v1
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a1;" ";b1;" ";4+i;" ";b1
        end if
 
        if V2>0 then           'Pas d'impression si V2=0
            #SINUS.GBOX "SIZE 2 ; COLOR BLUE"                                'IMPRESSION V2
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a2;" "; b2
            oldablue2=a2:oldbblue2=b2
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a2;" ";b2;" ";4+i;" ";b2
            oldapink2=a2:oldbpink2=b2:oldcpink2=4+i
        end if
 
        if V3>0 then           'Pas d'impression si V3=0
            #SINUS.GBOX "SIZE 2 ; COLOR GREEN"                                 'IMPRESSION V3
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a3;" "; b3
            oldagreen3=a3:oldbgreen3=b3
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a3;" ";b3;" ";4+i;" ";b3
            oldapink3=a3:oldbpink3=b3:oldcpink3=4+i
        end if
 
        if Vtot>0 then       'Pas d'impression si Vtot=0
            #SINUS.GBOX "SIZE 2 ; COLOR BLACK"                                'IMPRESSION Vtot
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a4;" ";b4
            oldablack4=a4:oldbblack4=b4
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a4;" ";b4;" ";4+i;" ";b4
            oldapink4=a4:oldbpink4=b4:oldcpink4=4+i
        end if
 
        #SINUS.GBOX "COLOR black"              'IMPRESSION curseur en X
        #SINUS.GBOX "SIZE 2 ; LINE ";4+i;" ";256;" ";4+i;" ";245
 
        timer 10, [coco]   ' gestion du timer pour animation...
        wait
        [coco]
        timer 0
 
        if i=540 then exit for
 
'          Séquence d'effaçage       Séquence d'effaçage        Séquence d'effaçage
 
        #SINUS.GBOX, "COLOR WHITE"        'effacements
        if V1>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";a1;" "; b1
            #SINUS.GBOX "SIZE 1 ; LINE ";a1;" ";b1;" ";4+i;" ";b1
        end if
           '66666666666666666666666666666666666666666666666666
        if V2>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";oldablue2;" "; oldbblue2
            #SINUS.GBOX "SIZE 1 ; LINE ";oldablue2;" ";oldbblue2;" ";4+i;" ";oldbblue2
        end if
 
        if V3>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";oldagreen3;" "; oldbgreen3
            #SINUS.GBOX "SIZE 1 ; LINE ";oldagreen3;" ";oldbgreen3;" ";4+i;" ";oldbgreen3
        end if
 
        if Vtot>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";oldablack4;" "; oldbblack4
            #SINUS.GBOX "SIZE 1 ; LINE ";oldablack4;" ";oldbblack4;" ";4+i;" ";oldbblack4
        end if
 
        #SINUS.GBOX "SIZE 2 ; LINE ";4+i;" 256 ";4+i;" 245"     'effaçage curseur en X
 
        if V1>0 then
            #SINUS.GBOX "COLOR red"     'TRAÇAGE DE F(T) pour V1
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME1;" ";4+i;" ";b1
        end if
 
        if V2>0 then
            #SINUS.GBOX "COLOR blue"     'TRAÇAGE DE F(T) pour V2
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME2;" ";4+i;" ";b2
        end if
 
        if V3>0 then
            #SINUS.GBOX "COLOR green"     'TRAÇAGE DE F(T) pour V3
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME3;" ";4+i;" ";b3
        end if
 
        if Vtot>0 then
            #SINUS.GBOX "COLOR black"     'TRAÇAGE DE F(T) pour Vtot
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME4;" ";4+i;" ";b4
        end if
      NEXT i  ' -------------------------------------------------------------------------
 
      timer 1500, [pause]   ' Arrêt de l'image 1.5s à la fin d'un cycle
      wait
      [pause]
      timer 0
      #SINUS.GBOX "cls"
    RETURN
 
    [calculs]         '  tous les calculs en temps réel
        bo=i+angle1      'bo est une variable intermédiaire qui tient compte de l'angle initial (angle du vecteur) et de l'incrément i
        x1= V1*100*cos(bo*deg) 'CALCUL longueur segment V1 en x et y
        y1= V1*100*sin(bo*deg)
        a1= int (800+x1)       'Correction pour l'origine en x (800)
        b1= int (250-y1)       'Correction pour l'origine en y (250)
 
        bo=i+angle2
        x2= V2*100*cos(bo*deg) 'CALCUL longueur segment V2 en x et Y'
        y2= V2*100*sin(bo*deg)
        a2= int (800+x2)
        b2= int (250-y2)
 
        bo=i+angle3
        x3= V3*100*cos(bo*deg) 'CALCUL longueur segment V3 en x et Y
        y3= V3*100*sin(bo*deg)
        a3= int (800+x3)
        b3= int (250-y3)
 
        bo=i+angletot
        x4= Vtot*100*cos(bo*deg) 'CALCUL longueur segment Vtot en x et Y'
        y4= Vtot*100*sin(bo*deg)
        a4= int (800+x4)
        b4= int (250-y4)
    RETURN
 
    [dessin_axes]
        #SINUS.GBOX, "font Arial 12"
        #SINUS.GBOX, "SIZE 2 ; COLOR blue"
        #SINUS.GBOX, "line 4 5 4 480"
        #SINUS.GBOX, "COLOR DARKBLUE"
 
          For kk=50 to 450 step 50      ' Cote correspondant à la marque sur l'axe central des Y
            if kk <> 250 then
               #SINUS.GBOX "LINE 597 ";kk;" 603 ";kk
               gygy= (-1*kk/100 +2.5)
               #SINUS.GBOX, "PLACE 605 ";kk+4
               #SINUS.GBOX, "\ "; gygy
            end if
          next kk
 
          For kk=50 to 450 step 50              ' Marques sur l'axe des Y à gauche
             if kk<> 250 then 'goto [saut11]
                #SINUS.GBOX "LINE 1 ";kk;" 6 ";kk
                gygy= (-1*kk/100 +2.5)         ' Cote correspondant à la marque sur l'axe gauche des Y
                #SINUS.GBOX, "PLACE 11 ";kk+4
                #SINUS.GBOX, "\ "; gygy
             end if
          next kk
 
          For j=45 to 540 step 45             ' Marques sur l'axe des X de f(t)
               #SINUS.GBOX "LINE ";j+4;" 254 ";j+4;" 246"
               #SINUS.GBOX, "PLACE ";j-9;" 270"
               #SINUS.GBOX, "\ "; j     ' angle correspondant sur l'axe des X de f(t)
          next j
 
           For mm=650 to 1000 step 50              ' Marques sur l'axe des X des vecteurs
              xoxo= mm/100 -8
              if mm<>800 then
                #SINUS.GBOX "LINE ";mm;" 254 ";mm;" 246"
                #SINUS.GBOX, "PLACE ";mm-9;" 270"
                #SINUS.GBOX, "\ "; xoxo             ' valeur correspondante sur l'axe des X des vecteurs
              end if
           next mm
 
          #SINUS.GBOX, "line 600 10 600 480"        'axe des Y central
          #SINUS.GBOX, "line 0 250 1100 250"     'retraçage axe des X
          XPRIME= 4+i
          YPRIME1= b1
          YPRIME2= b2
          YPRIME3= b3
          YPRIME4= b4
    RETURN
 
    SUB quit handle$
        close #handle$
        END
    END SUB
 
 




Edité par Roland Le 15/12/2012 à 18h02
____________________
Roro

   
Le 15/12/2012 à 18h07

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Ah merde ! ça ne marche qu'au premier tour ! au second le phénomène disparait/apparait, reviens.
Il faut faire ça plus proprement.
____________________
Roro

   
Le 15/12/2012 à 18h12

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Y a pas le choix : faut enregistrer les anciennes pos dans des variables...
Comme je disais : ça fait un peu bizarre...
Peut-être faut-il laisser le timer d'affichage au même endroit qu'initialement ?

Ceci dit c'est pas trop facile de se rendre compte de l'amélioration car mon PC est peut-être suffisament puissant pour ne pas trop laisser voir de scintillement...!?

Code VB :
    ' http://libertybasic.fr/forum/topic-236-0-2721+quelqu-un-pourrait-il-m-aider.php#m2721

    nomainwin
 
    WindowWidth = 1150
    WindowHeight = 850
    UpperLeftX = (DisplayWidth-WindowWidth) / 3
    UpperLeftY = 1
    if WindowHeight < DisplayHeight then UpperLeftY = (DisplayHeight-WindowHeight) / 2
 
    mois$ = "Jan Fév Mar Avr Mai Jun Jui Aou Sep Oct Nov Déc"
   ' mois$ = "January February March April May June July August September October November December"     'US format
    today$ = date$("mm/dd/yyyy")
    j = date$(today$)
    jsem$ = word$("Mar Mer Jeu x Ven Sam x Dim Lun",int((j/7-int(j/7))*10)+1)
   ' jsem$ = word$("Tue Wed Thu x Fri Sat x Sun Mon",int((j/7-int(j/7))*10)+1)      ' US format
    date$ = jsem$+" "+mid$(today$,4,2)+" "+word$(mois$, val(today$))+"   "+left$(time$(),5)'right$(today$,4)
   ' date$ = jsem$+" "+word$(mois$, val(today$))+", "+mid$(today$,1,2)+"   "+left$(time$(),5)'right$(today$,4)   ' US format

    GLOBAL v1,v11,v12,v2,v21,v22,v3,v31,v32,Vtot,plus,moins,plus2,moins2,ok1,ok2,ok3, go  ' variable globales car touchées par la SUB init.

    button #SINUS.b1, "V1",  init, UL, 30, 10, 30, 30
    button #SINUS.b2, "V2",  init, UL, 30, 40, 30, 30
    button #SINUS.b3, "V3",  init, UL, 30, 70, 30, 30
    button #SINUS.b4, "+",   init, UL, 135, 20, 30, 30
    button #SINUS.b5, "-",   init, UL, 135, 50, 30, 30
    button #SINUS.b6, "V1",  init, UL, 250, 10, 30, 30
    button #SINUS.b7, "V2",  init, UL, 250, 40, 30, 30
    button #SINUS.b8, "V3",  init, UL, 250, 70, 30, 30
    button #SINUS.b9, "+",   init, UL, 370, 20, 30, 30
    button #SINUS.b10, "-",  init, UL, 370, 50, 30, 30
    button #SINUS.b11, "V1", init, UL, 500, 10, 30, 30
    button #SINUS.b12, "V2", init, UL, 500, 40, 30, 30
    button #SINUS.b13, "V3", init, UL, 500, 70, 30, 30
    button #SINUS.b14, "GO", init, UL, 610, 30, 40, 40
    statictext #SINUS.fleche, ">>>", 684, 42, 60, 20
    statictext #SINUS.av1, "Amplitude V1  ( entre 0 et 1.5 )", 750, 20, 150, 20
    statictext #SINUS.av2, "Amplitude V2  ( entre 0 et 1.5 )", 750, 50, 150, 20
    statictext #SINUS.av3, "Amplitude V3  ( entre 0 et 1.5 )", 750, 80, 150, 20
    TEXTBOX #SINUS.amp1, 910, 15, 45, 24
    TEXTBOX #SINUS.amp2, 910, 45, 45, 24
    TEXTBOX #SINUS.amp3, 910, 75, 45, 24
    statictext #SINUS.an1, "Angle V1", 1000, 20, 50, 20
    statictext #SINUS.an2, "Angle V2", 1000, 50, 50, 20
    statictext #SINUS.an3, "Angle V3", 1000, 80, 50, 20
    TEXTBOX #SINUS.angle1, 1070, 15, 45, 24
    TEXTBOX #SINUS.angle2, 1070, 45, 45, 24
    TEXTBOX #SINUS.angle3, 1070, 75, 45, 24
    graphicbox #SINUS.GBOX, 4, 124, WindowWidth-14, WindowHeight-150
 
    OPEN "    VECTEURS..."+space$(20)+date$ for window_nf as #SINUS  'graphics_nf_nsb
    #SINUS "trapclose quit"
    #SINUS.GBOX "down"
    #SINUS.amp1 "!font Arial 12"
    #SINUS.amp2 "!font Arial 12"
    #SINUS.amp3 "!font Arial 12"
    #SINUS.angle1 "!font Arial 12"
    #SINUS.angle2 "!font Arial 12"
    #SINUS.angle3 "!font Arial 12"
    #SINUS.b14 "!font Arial 9 bold"
    #SINUS.fleche "!font Arial 13"
    V1 = 0.6
    V2 = 1.2
    V3 = 1.5
    angle1 = 20
    angle2 = 190
    angle3 = 90
    #SINUS.amp1 using("#.#",V1)
    #SINUS.amp2 using("#.#",V2)
    #SINUS.amp3 using("#.#",V3)
    #SINUS.angle1 angle1
    #SINUS.angle2 angle2
    #SINUS.angle3 angle3
    deg = 0.017453292      '  0.01745329252 correspond à 1 degré en redians
    XPRIME=4 :YPRIME1=250 :YPRIME2=250 :YPRIME3=250 :YPRIME4=250
 
    while 1      '  boucle principale du programme. (while 1 n'est pas recommandé mais des fois y a pas le choix ;) )
        scan
        GOSUB [dessin_axes]  ' juste pour ne pas voir une feuille blanche au départ !
        if go = 1 then GOSUB [dessin]  ' go = 1 ou 0 suivant l'appui sur le bouton "GO"/"NEW" ( #SINUS.b14 )
    wend
 
    WAIT
 
 
' ------------------ ROUTINE de traitement de l'appui sur un bouton quelconque --------------------
    SUB init handle$
        bt = val(mid$(handle$,9))  ' n° du boutton pressé (extrait de son nom transmis dans handle$)
        select case bt
        case 1,2,3
            if bt=1 then v1 = 1
            if bt=2 then v2 = 1
            if bt=3 then v3 = 1
            for b=1 to 3 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            ok1 = 1
        case 4,5
            if v1+v2+v3>0 then
                if bt=4 then plus = 1
                if bt=5 then moins = 1
                for b=1 to 5 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            end if
        case 6,7,8
            if bt=6 then v11 = 1
            if bt=7 then v21 = 1
            if bt=8 then v31 = 1
            for b=1 to 8 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            ok2 = 1
        case 9,10
            if v1+v2+v3+v11+v21+v31>0 then
                if bt=9 then plus2 = 1
                if bt=10 then moins2 = 1
                for b=1 to 10 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            end if
        case 11,12,13
            if bt=11 then v12 = 1
            if bt=12 then v22 = 1
            if bt=13 then v32 = 1
            for b=1 to 13 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            ok3 = 1
        case 14      '  le bouton "GO" qui se transforme en "NEW"
            if v1+v11+v12+v2+v21+v22+v3+v31+v32 = 0 then
                notice "Choisissez l'opération désirée..."
                go = 0
                exit SUB  ' sort de la SUB.
            end if
            if go = 0 then     '   la représentation pourra commencer.
                go = 1
                #SINUS.b14 "NEW"
                for b=1 to 13 : hdle$ = "#SINUS.b";b : #hdle$ "!disable" : next
            else               '   réinitialisation pour une nouvelle représentation.
                go = 0
                #SINUS.b14 "GO"
                #SINUS.GBOX "cls"
                for b=1 to 13 : hdle$ = "#SINUS.b";b : #hdle$ "!enable" : next  ' réactive tous les boutons
                v1=0 : v2=0 : v3=0 : v11=0 : v21=0 : v31=0 : v12=0 : v22=0 : v32=0 : Vtot=0
                plus=0 : moins=0 : plus2=0 : moins2=0 : ok1=0 : ok2=0 :ok3=0
            end if
        end select
    END SUB
' --------------------------------------------------------------------------------------------

    [dessin]    '      mise à jours des paramètres, puis calculs en temps réel et dessin des courbes.
        V1 = 0 : V2 = 0 : V3 = 0 : Vtot = 0
        if (v1=1 or v11=1 or v12=1) then
            #SINUS.amp1 "!contents? V1"
            #SINUS.angle1 "!contents? angle1"
            if V1>1.5 then notice "Amplitude de V1 doit être entre 0 et 1.5" : go = 0
        end if
        if (v2=1 or v21=1 or v22=1) then
            #SINUS.amp2 "!contents? V2"
            #SINUS.angle2 "!contents? angle2"
            if V2>1.5 then notice "Amplitude de V2 doit être entre 0 et 1.5" : go = 0
        end if
        if (v3=1 or v31=1 or v32=1) then
            #SINUS.amp3 "!contents? V3"
            #SINUS.angle3 "!contents? angle3"
            if V3>1.5 then notice "Amplitude de V3 doit être entre 0 et 1.5" : go = 0
        end if
        if go = 0 then return  ' pour sortir si V1,V2 ou V3 sont hors limite.
      if plus+moins+plus2+moins2>0 and ok1+ok2+ok3>1 then   ' si on a demandé une opération
        select case
        case v1=1  : Vy = V1 : angley = angle1
        case v2=1  : Vy = V2 : angley = angle2
        case v3=1  : Vy = V3 : angley = angle3
        end select
        select case
        case v11=1 : Vz = V1 : anglez = angle1
        case v21=1 : Vz = V2 : anglez = angle2
        case v31=1 : Vz = V3 : anglez = angle3
        end select
        select case
        case v12=1 : Vk = V1 : anglek = angle1
        case v22=1 : Vk = V2 : anglek = angle2
        case v32=1 : Vk = V3 : anglek = angle3
        end select
 
        if plus+moins=0 then Vy=0 :angley=0
        if plus2+moins2=0 then Vk=0 :anglek=0
        if moins=1 then anglez=anglez+180
        if moins2=1 then anglek=anglek+180
        XX=0
        YY=0
        op1$=" "
        op2$=" "
        if plus=1 then op1$="+"
        if moins=1 then op1$="-"
        if plus2=1 then op2$="+"
        if moins2=1 then op2$="-"
 
       'calcul de Vtot et angletot    ********************************  Vtot = Vy+Vz+Vk
         XX = (Vy*cos(angley*deg))+(Vz*cos(anglez*deg))+(Vk*cos(anglek*deg))
         XX2 = XX^2
         YY = (Vy*sin(angley*deg))+(Vz*sin(anglez*deg))+(Vk*sin(anglek*deg))
         YY2 = YY^2
         if XX=0 then                            '
             if YY>0 then                        ' Test pour éviter la division par zéro
                 angletot=90                     ' et corriger s'il y a lieu l'angle (+ ou - 90°)
             else                                '
                 angletot=-90: goto [VTOTAL]     '
             end if
         end if
         angletot1=atn(YY/XX)  'en radians
         angletot=angletot1/deg  'en degrés          calcul de angletot en degrés

         [VTOTAL]
         Vtot = sqr(XX2+YY2)   ' calcul de Vtot
         if (XX<0) then angletot=angletot+180 ' Correction de l'angle si XX est négatif: on doit ajouter alors 180°
         if abs(Vtot)<0.01 then    ' sert à empècher angletot de 90 quand Vtot
            Vtot=0 : angletot=0    ' est trop petit (négligeable)et positif
         end if
       end if
 
         #SINUS.GBOX, "font Arial 12"
         Vyy$ = " " : Vzz$ = " " : Vkk$ = " "
         if V1>0 then
             #SINUS.GBOX "COLOR red"
             #SINUS.GBOX "PLACE 750 550"   'IMPRESSION NOTICE V1 (COULEUR rouge)
             #SINUS.GBOX "\- V1 = ";V1; " avec un angle de ";angle1; " degrés"
             Vyy$ = "V1"
         end if
         if V2>0 then   'bypass de l'impression de V2...
             #SINUS.GBOX "COLOR blue "
             #SINUS.GBOX "PLACE 750 575"   'IMPRESSION NOTICE V2 (COULEUR bleu)
             #SINUS.GBOX "\- V2 = ";V2; " avec un angle de "; angle2; " degrés"
             Vzz$ = "V2"
         end if
         if V3>0 then   'bypass de l'impression de V3...
             #SINUS.GBOX "COLOR green "
             #SINUS.GBOX "PLACE 750 600"   'IMPRESSION NOTICE V3 (COULEUR  vert)
             #SINUS.GBOX "\- V3 = ";V3; " avec un angle de "; angle3; " degrés"
             Vkk$ = "V3"
         end if
         if Vtot>0 then
             #SINUS.GBOX "font Arial 16"
             #SINUS.GBOX "COLOR black"        ' Impression de la notice  premier signe + ou -
             #SINUS.GBOX "PLACE 535 650"
             #SINUS.GBOX "\"; op1$
 
             #SINUS.GBOX "PLACE 605 650"      ' Impression de la notice  second signe + ou -
             #SINUS.GBOX "\"; op2$
 
             #SINUS.GBOX "font Arial 14"
             #SINUS.GBOX "COLOR red"          ' Impression de la notice  Vy
             #SINUS.GBOX "PLACE 500 650"
             #SINUS.GBOX "\"; Vyy$
 
             #SINUS.GBOX "COLOR blue"         ' Impression de la notice  Vz
             #SINUS.GBOX "PLACE 565 650"
             #SINUS.GBOX "\"; Vzz$
 
             #SINUS.GBOX "COLOR green"         ' Impression de la notice  Vk
             #SINUS.GBOX "PLACE 632 650"
             #SINUS.GBOX "\"; Vkk$
 
             #SINUS.GBOX "COLOR black "
             #SINUS.GBOX "PLACE 675 650"   'IMPRESSION NOTICE Vtot (COULEUR  noir)
             #SINUS.GBOX "\= Vtot = ";USING("##.###",Vtot);" avec un angle de ";USING("###.##",angletot);" degrés."
         end if
        orig = 800
        #SINUS.GBOX, "font Arial 10"
 
       FOR i=0 TO 540   ' --------------- boucle de dessin des courbes ------------------------
            scan
            if go = 0 then exit for  ' si le bouton "NEW" est cliqué : on sort.

            olda1 = a1 : oldb1 = b1
            olda2 = a2 : oldb2 = b2
            olda3 = a3 : oldb3 = b3
            olda4 = a4 : oldb4 = b4
            oldi = i-1
            GOSUB [dessin_axes]
            GOSUB [calculs]
 
        if V1>0 then           'Pas d'impression si V1=0
            #SINUS.GBOX "SIZE 2 ; COLOR RED"                                'IMPRESSION V1
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a1;" ";b1
            #SINUS.GBOX "PLACE ";orig;" "; 250
            #SINUS.GBOX "circle 2"       'impression d'un petit cercle à la base de v1
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a1;" ";b1;" ";4+i;" ";b1
        end if
 
        if V2>0 then           'Pas d'impression si V2=0
            #SINUS.GBOX "SIZE 2 ; COLOR BLUE"                                'IMPRESSION V2
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a2;" "; b2
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a2;" ";b2;" ";4+i;" ";b2
        end if
 
        if V3>0 then           'Pas d'impression si V3=0
            #SINUS.GBOX "SIZE 2 ; COLOR GREEN"                               'IMPRESSION V3
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a3;" "; b3
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a3;" ";b3;" ";4+i;" ";b3
        end if
 
        if Vtot>0 then       'Pas d'impression si Vtot=0
            #SINUS.GBOX "SIZE 2 ; COLOR BLACK"                               'IMPRESSION Vtot
            #SINUS.GBOX "LINE ";orig;" ";250;" ";a4;" ";b4
            #SINUS.GBOX "SIZE 1 ; COLOR PINK"
            #SINUS.GBOX "LINE ";a4;" ";b4;" ";4+i;" ";b4
        end if
 
        #SINUS.GBOX "COLOR black"              'IMPRESSION curseur en X
        #SINUS.GBOX "SIZE 2 ; LINE ";4+i;" 256 ";4+i;" 245"
 
       ' timer 10, [coco]   ' gestion du timer pour animation...
       ' wait
       ' [coco]
       ' timer 0

        if i=540 then exit for
 
'          Séquence d'effaçage       Séquence d'effaçage        Séquence d'effaçage

        #SINUS.GBOX, "COLOR WHITE"        'effacements
        if i>0 then
        if V1>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";olda1;" "; oldb1
            #SINUS.GBOX "SIZE 1 ; LINE ";olda1;" ";oldb1;" ";4+i;" ";oldb1
        end if
 
        if V2>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";olda2;" "; oldb2
            #SINUS.GBOX "SIZE 1 ; LINE ";olda2;" ";oldb2;" ";4+i;" ";oldb2
        end if
 
        if V3>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";olda3;" "; oldb3
            #SINUS.GBOX "SIZE 1 ; LINE ";olda3;" ";oldb3;" ";4+i;" ";oldb3
        end if
 
        if Vtot>0 then
            #SINUS.GBOX "SIZE 2 ; LINE ";orig;" ";250;" ";olda4;" "; oldb4
            #SINUS.GBOX "SIZE 1 ; LINE ";olda4;" ";oldb4;" ";4+i;" ";oldb4
        end if
        #SINUS.GBOX "SIZE 2 ; LINE ";4+oldi;" 256 ";4+oldi;" 245"     'effaçage curseur en X
        end if
 
        if V1>0 then
            #SINUS.GBOX "COLOR red"     'TRAÇAGE DE F(T) pour V1
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME1;" ";4+i;" ";b1
        end if
 
        if V2>0 then
            #SINUS.GBOX "COLOR blue"     'TRAÇAGE DE F(T) pour V2
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME2;" ";4+i;" ";b2
        end if
 
        if V3>0 then
            #SINUS.GBOX "COLOR green"     'TRAÇAGE DE F(T) pour V3
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME3;" ";4+i;" ";b3
        end if
 
        if Vtot>0 then
            #SINUS.GBOX "COLOR black"     'TRAÇAGE DE F(T) pour Vtot
            #SINUS.GBOX "LINE ";XPRIME;" ";YPRIME4;" ";4+i;" ";b4
        end if
 
        timer 10, [coco]   ' gestion du timer pour animation...
        wait
        [coco]
        timer 0
 
      NEXT i  ' -------------------------------------------------------------------------

      timer 1500, [pause]   ' Arrêt de l'image 1.5s à la fin d'un cycle
      wait
      [pause]
      timer 0
      #SINUS.GBOX "cls"
    RETURN
 
    [calculs]         '  tous les calculs en temps réel
        bo=i+angle1      'bo est une variable intermédiaire qui tient compte de l'angle initial (angle du vecteur) et de l'incrément i
        x1= V1*100*cos(bo*deg) 'CALCUL longueur segment V1 en x et y
        y1= V1*100*sin(bo*deg)
        a1= int (800+x1)       'Correction pour l'origine en x (800)
        b1= int (250-y1)       'Correction pour l'origine en y (250)

        bo=i+angle2
        x2= V2*100*cos(bo*deg) 'CALCUL longueur segment V2 en x et Y'
        y2= V2*100*sin(bo*deg)
        a2= int (800+x2)
        b2= int (250-y2)
 
        bo=i+angle3
        x3= V3*100*cos(bo*deg) 'CALCUL longueur segment V3 en x et Y
        y3= V3*100*sin(bo*deg)
        a3= int (800+x3)
        b3= int (250-y3)
 
        bo=i+angletot
        x4= Vtot*100*cos(bo*deg) 'CALCUL longueur segment Vtot en x et Y'
        y4= Vtot*100*sin(bo*deg)
        a4= int (800+x4)
        b4= int (250-y4)
    RETURN
 
    [dessin_axes]
        #SINUS.GBOX, "font Arial 12"
        #SINUS.GBOX, "SIZE 2 ; COLOR blue"
        #SINUS.GBOX, "line 4 5 4 480"
        #SINUS.GBOX, "COLOR DARKBLUE"
 
          For kk=50 to 450 step 50      ' Cote correspondant à la marque sur l'axe central des Y
            if kk <> 250 then
               #SINUS.GBOX "LINE 597 ";kk;" 603 ";kk
               gygy= (-1*kk/100 +2.5)
               #SINUS.GBOX, "PLACE 605 ";kk+4
               #SINUS.GBOX, "\ "; gygy
            end if
          next kk
 
          For kk=50 to 450 step 50              ' Marques sur l'axe des Y à gauche
             if kk<> 250 then 'goto [saut11]
                #SINUS.GBOX "LINE 1 ";kk;" 6 ";kk
                gygy= (-1*kk/100 +2.5)         ' Cote correspondant à la marque sur l'axe gauche des Y
                #SINUS.GBOX, "PLACE 11 ";kk+4
                #SINUS.GBOX, "\ "; gygy
             end if
          next kk
 
          For j=45 to 540 step 45             ' Marques sur l'axe des X de f(t)
               #SINUS.GBOX "LINE ";j+4;" 254 ";j+4;" 246"
               #SINUS.GBOX, "PLACE ";j-9;" 270"
               #SINUS.GBOX, "\ "; j     ' angle correspondant sur l'axe des X de f(t)
          next j
 
           For mm=650 to 1000 step 50              ' Marques sur l'axe des X des vecteurs
              xoxo= mm/100 -8
              if mm<>800 then
                #SINUS.GBOX "LINE ";mm;" 254 ";mm;" 246"
                #SINUS.GBOX, "PLACE ";mm-9;" 270"
                #SINUS.GBOX, "\ "; xoxo             ' valeur correspondante sur l'axe des X des vecteurs
              end if
           next mm
 
          #SINUS.GBOX, "line 600 10 600 480"        'axe des Y central
          #SINUS.GBOX, "line 0 250 1100 250"     'retraçage axe des X
          XPRIME= 4+i
          YPRIME1= b1
          YPRIME2= b2
          YPRIME3= b3
          YPRIME4= b4
    RETURN
 
    SUB quit handle$
        close #handle$
        END
    END SUB
 




Edité par cassiope01 Le 18/12/2012 à 14h25
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 15/12/2012 à 19h02

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Citation:
D'autre langage gèrent très bien

C'est sûr, mais alors c'est au codeur de gérer le langage Lol
Bon, ben c'est pas mal comme ça (mine de rien y'a un sacré morceau)
J'espère que tes "légères" modifs ne vont pas scier les bras de Chris..Quand la neige aura fondue à l'entrée de sa grotte....Brrrr.. moi qui râle quand ça passe en dessous de 17 °C
____________________
Roro

   
Le 16/12/2012 à 15h23

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Léger Upgrade (dans le dernier post où se trouve le code) pour plus de cohérence avec l'utilisation des boutons...

J'espère seulement que ça donnera envis à chris de se pencher encore plus sur JustBasic pour concrétiser d'autres projets...

@+



Edité par cassiope01 Le 16/12/2012 à 15h23
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 16/12/2012 à 16h47

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Je m'y suis mis une pause, mais pas facile de le faire repartir.
C'est une pause pour toujours ! :(
____________________
Roro

   
Le 17/12/2012 à 07h16

Libertynaute Débutant

Groupe: Membre

Inscrit le: 04/06/2012
Messages: 23
Bonjour! Je m'excuse encore pour le délais de réponse, mais le boulot se fait pressant par les temps qui courent .
Je viens de faire tourner la version de CASSIOPE01......WOW! :clap je ne reconnais plus mon programme.
La présentation graphique est vraiment sensas. Je vais certainement prendre de nombreuses heures à analyser et comprendre le programme. C'est certain que vais avoir quelques questions à poser à ce sujet. Merci beaucoup pour tout ce travail, je l'apprécie beaucoup.
Plus j'avance et plus je réalise que c'est surtout au niveau de l'utilisation des fenêtre et du graphisme que je vais devoir bosser pour m'améliorer (là y a vraiment du boulot...).
J'ai aussi fait une autre version du programme qui permet de reconstituer un signal en fonction de ses harmoniques (toujours suivant la représentation de Fresnel). La seule différence est que cette fois les vecteurs tournants (qui sont à des fréquences différentes les uns des autres) sont mis bouts à bouts pour réaliser une fonction. Après avoir digéré la cuisine de CASSIOPE01 (dans les semaines qui suivent) , je vais tenter d'améliorer la présentation graphique de ce nouveau programme.
Pour répondre à une question posée précédemment par CASSIOPE01, oui je me débrouille pas mal en math (je ne suis pas un crack, loin de là, mais j'ai une formation d'ingénieur en électricité). Si c'a peut être utile à quelqu'un ça me fera un grand plaisir de donner un coup de main. Ce sera probablement la seule façon dont je pourrai contribuer à quelque chose ici...parce que je ne suis pas en mesure ce conseiller qui que ce soit en programmation....:lol
Merci encore pour le coup de pouce et un bon temps des fêtes à tout le monde si on ne se croise pas d'ici là.
ChRiS

____________________
ChRiS :)

Web    
Le 17/12/2012 à 16h22

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Avec plaisir chris.
Si tu te plonges un peu dans JustBasic pour réaliser tes projets, tu verras que tu pourras très vite à ton tour partager des trucs et astuces que tu auras eu l'idée d'utiliser, car JustBasic n'est pas si compliqué : c'est en bucheronnant qu'on devient bucheron :top

Si tes nouveaux vecteurs n'ont pas la même fréquence, je suppose que ça implique dans la représentation de Fresnel qu'on doit les voir tourner chacun à une vitesse différente...! vu qu'il n'y a qu'un seul Timer va falloir trouver un idée judicieuse...!? :top

Pour ce qui est des maths, c'est vrai que j'aurai peut-être besoin d'un coup de main... :siffle enfin c'est plutôt de la trigo, car il s'agirait de représenter le terrain vu par le sonar d'un sous-marin à sa profondeur actuelle et dans le sens de sa marche (son cap donc de 0 à 360°) tout ça lu sur une carte de profondeurs.
Et aussi calculer plusieurs données physiques comme le rapport entre le remplissage des ballasts Av/AR et son inclinaison et sa vitesse, l'effet des commandes par rapport à sa vitesse, la pression qu'il subit suivant sa profondeur, etc...
Enfin la routine quoi... :nex

A+



Edité par cassiope01 Le 17/12/2012 à 16h24
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 19/12/2012 à 01h14

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
En commençant par la fin:
La pression , c'est facile: 1Kg/cm2 de plus tous les dix metres. :p
Pour l'inclinaison, c'est déjà plus raide, à cause de la forme. :heink (intégrales en vue...Virez de bord ! )
mais on doit pouvoir réduire le problème en considérant deux volumes fixes, de poids variable, liés par un
segment de droite. ( principe du trébuchet....de pharmacien ...hein...pas celui de Godefroy.. ;) )
Pour la profondeur: des barres de différentes hauteurs (spectre) seront plus facile qu'une ligne de niveau.
Mais pour sonder le fond, il faut qu'il y est un fond :d (peut-etre le système de limites du RPG d'Atomose
pour le matérialiser.)
Sondage (vertical pour commencer ! ) par l'envoi d'un sprite (émmission du signal+ démmarage d'un chrono)
Quand le sprite touche la limite, il en renvoie plusieurs (suffisament pour que le récepteur en reçoive un)
mesure du temps d'aller/retour.-->coeff-->distance. :)
Pour faire des mesures horizontal x vertical, il faut dés à présent planter des hypothénuses, pour espérer en récolter quelques racines au primptemps. ..........à+ Pytagore !



Edité par Roland Le 19/12/2012 à 01h16
____________________
Roro

   
Le 19/12/2012 à 11h18

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
Mais pour sonder le fond, il faut qu'il y est un fond :d (peut-etre le système de limites du RPG d'Atomose pour le matérialiser.)


Bien vu Roland ;) tu pense bien que c'est ce que j'ai fait ;)

C'est l'ami Pytagore et ses hypoténuses avec qui je ne suis pas super copain :lol

Mais ne s'agit pas non plus d'appliquer strictement toutes les lois physiques de la réalité, mais plutôt de rendre à peu près réaliste une simulation : il faut finter avec ce pauvre JB...

Mais je crois bien qu'il est temps que je montre où j'en suis pour que tu saisisses mieux la situation... mais surtout pour ne pas pourrir le post de chris.

J'ai créé un nouveau post ICI.

@+



Edité par cassiope01 Le 19/12/2012 à 12h29
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Débutant » Quelqu'un pourrait-il m'aider?? Arrondir un nombre réel....  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie