Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Candidat au Club
    Bug d'affichage : la fenêtre devient blanche ou noir
    Bonjour à tous,
    Dans un programme, je calcul la déformation du profil d'un pièce. Pour obtenir une représentation assez visuel du phénomène je souhaite afficher le profil avec un gradient de couleur. Pour ce faire j'ai codé la fonction suivante.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    function affichageMoment(selectedStep,tulipe,jonc,Nhis,Mfis)
     
    DT=tulipe.diametreFondGorge+jonc.hauteurFil;
     
    xMax=max(Nhis(:,1,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />);
    yMax=max(Nhis(:,2,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />);
    yMin=max(Nhis(:,2,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />);
     
    etendu=abs(max(Mfis))+abs(min(Mfis));
     
    graphNumber=200+selectedStep
     
    nn=10
     
    nInf=zeros(nn,1)
    nSup=zeros(nn,1)
     
    temp997=size(Effch);
    n=temp997(1,3);
     
    nInf(1,1)=min(Mfis);
    for pp=2:nn
        nInf(pp,1)=min(Mfis)+(((pp-1)/nn)*etendu);
    end
     
    nSup(nn,1)=max(Mfis);
    for pp=1:nn-1
        nSup(pp,1)=min(Mfis)+((pp/nn)*etendu);
    end
     
    scf(graphNumber);
    for pp=1:nn
        plot(-10,0,'color',couleur(nn-pp+1,nn));
        str(pp,1)=msprintf("%d < X < %d",nInf(pp,1),nSup(pp,1));
    end
    legend(str(1,1),str(2,1),str(3,1),str(4,1),str(5,1),str(6,1),str(7,1),str(8,1),str(9,1),str(10,1),"out_upper_right")
    th=gce()
    th.font_size=2
     
    a=gca();
    a.isoview='on';
    a.data_bounds=[0,yMin;xMax,yMax];
    a.title.text="Circlip Simulation";
    a.title.font_size=5;
    f=gcf();
    f.figure_size=[700,1000];
     
    alpha=-%pi/2:0.01:%pi/2;
     
    plot((DT/2)*cos(alpha),(DT/2)*sin(alpha),'k');
    xstring(12,-12,string(selectedStep),0,1);
     
    for ii=1:99
        pt=[Nhis(ii,1,selectedStep) Nhis(ii,2,selectedStep);...
            Nhis(ii+1,1,selectedStep) Nhis(ii+1,2,selectedStep)];
        for uu=1:nn
            if Mfis(ii,selectedStep)>=nInf(uu,1)&Mfis(ii,selectedStep)<nSup(uu,1) then
                ptColor=couleur(uu,nn);
            end
        end
        plot(pt(:,1),pt(:,2),'color',ptColor);
        e=gce();
        e.children.thickness=2;
    end
     
    endfunction


    Pour une meilleure compréhension, Nhis correpond à l'historique des profil selon le pas de calcul, et Mfis au moments de flexion que je souhaite afficher. Ci joint une image du résultat (partiel j'ai arrêté le programme à 60 pas) de l'affichage souhaité.

    Le problème semble se situer sur la dernière boucle. La fonction s'exécute correctement jusqu'à un moment aléatoire où la fenêtre devient soit blanche ou noir. Je pense que je dois dépasser une limite d'affiche ou un nombre d'éléments.

    Je suis curieux de savoir si quelqu'un aurait une solution à ce problème où si vous l'avez déjà rencontré.

    Merci de votre aide
    LL

  2. #2
    Candidat au Club
    J'ai essayer avec une fonction scatter (qui n'affiche donc plus des bout de droite mais bien des points). Je penserais que ce serait plus léger mais ça ne fonctionne pas du tout
    J'ai des bugs similaires même si ils sont moins fréquents. Aussi ici j'utilise un color map au lieu de ma propre fonction de couleur. Donc je ne pense pas que cela vienne du nombre d'éléments à afficher

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    function affichageMoment(selectedStep,tulipe,jonc,Nhis,Mfis)
     
    DT=tulipe.diametreFondGorge+jonc.hauteurFil;
     
    xMax=max(Nhis(:,1,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />);
    yMax=max(Nhis(:,2,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />);
    yMin=max(Nhis(:,2,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />);
     
    etendu=abs(max(Mfis))+abs(min(Mfis));
     
    graphNumber=200+selectedStep
     
    nn=10
     
    nInf=zeros(nn,1)
    nSup=zeros(nn,1)
     
    nInf(1,1)=min(Mfis);
    for pp=2:nn
        nInf(pp,1)=min(Mfis)+(((pp-1)/nn)*etendu);
    end
     
    nSup(nn,1)=max(Mfis);
    for pp=1:nn-1
        nSup(pp,1)=min(Mfis)+((pp/nn)*etendu);
    end
     
    scf(graphNumber);
    f=gcf();
    f.figure_size=[700,1000];
    f.color_map=jetcolormap(nn);
    for pp=1:nn
        //plot(-10,0,'color',couleur(nn-pp+1,nn));
        plot(-10,0,'color',f.color_map(pp,<img src="images/smilies/icon_smile.gif" border="0" alt="" title=":)" class="inlineimg" />)
        str(pp,1)=msprintf("%d < X < %d",nInf(pp,1),nSup(pp,1));
    end
    legend(str(1,1),str(2,1),str(3,1),str(4,1),str(5,1),str(6,1),str(7,1),str(8,1),str(9,1),str(10,1),"out_upper_right");
    th=gce();
    th.font_size=2;
     
    a=gca();
    a.isoview='on';
    a.data_bounds=[0,yMin;xMax,yMax];
    a.title.text="Circlip Simulation";
    a.title.font_size=5;
     
    alpha=-%pi/2:0.01:%pi/2;
     
    plot((DT/2)*cos(alpha),(DT/2)*sin(alpha),'k');
    xstring(12,-12,string(selectedStep),0,1);
     
    ptColor(1,1)=nn
    for ii=1:99
        for uu=1:nn
            if Mfis(ii,selectedStep)>=nInf(uu,1)&Mfis(ii,selectedStep)<nSup(uu,1) then
                ptColor(ii+1,1)=nn-uu;
            end
        end
    end
     
    s=20;
     
    scatter(Nhis(:,1,selectedStep),Nhis(:,2,selectedStep),s,ptColor, "fill");
     
    endfunction