Mercurial > hg > medcouple
view talk/code/showalgo.m @ 74:305b7361a5bd default tip @
showalgo: save a snapshot instead of waiting for keyboard input
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Sun, 29 May 2016 19:05:01 -0400 |
parents | 7bcf3d503d33 |
children |
line wrap: on
line source
#!/usr/bin/octave H = load("H"); L = load("L") + 1; R = load("R") + 1; P = load("P") + 1; Q = load("Q") + 1; Ptot = load("Ptotal"); Qtot = load("Qtotal"); remaining = load("remaining"); mc = load("mc"); jackpot = load("jackpot"); Am = load("Am"); medc_idx = load("medc_idx"); Am(end+1) = mc; colidx = 1:columns(H); origH = repmat((H+1)/2, 1, 1, 3); graphics_toolkit fltk; figure function snapshot() persistent x = 1; fname = sprintf("%02d.png", x); print("-dpng", fname); x++; endfunction for iter = 1:length(Am) if iter > rows(L) break endif ## Reset the image imgH = origH; ## Make greater-than red red = imgH(:,:,1); red(colidx < L(iter, :)') = 1; imgH(:, :, 1) = red; ## Make less-than blue blue = imgH(:,:,3); blue(colidx > R(iter, :)') = 1; imgH(:, :, 3) = blue; printf("Remaining: %d\n", remaining(iter)) imshow(imgH); snapshot; ## Make the guess yellow [i,j] = find(Am(iter) == H); imgH(i,j,1) = imgH(i,j,2) = 1; imgH(i,j,3) = 0; imshow(imgH); snapshot; if iter == length(Am) break endif ## Check the left side imgLeft = imgH; red = imgH(:, :, 1); green = imgH(:, :, 2); blue = imgH(:, :, 3); idx = colidx > P(iter,:)'; ## Brighten blue blue(idx) = 1; ## Dim red and green red(idx) .*= 0.5; green(idx) .*= 0.5; imgLeft(:,:,2) = green; imgLeft(:,:,3) = blue; ## Make the guess yellow again [i,j] = find(Am(iter) == H); imgH(i,j,1) = imgH(i,j,2) = 1; imgH(i,j,3) = 0; imshow(imgLeft); snapshot; ## Check the right side imgRight = imgH; red = imgH(:, :, 1); green = imgH(:, :, 2); blue = imgH(:, :, 3); idx = colidx < Q(iter,:)'; ## Brighten red blue(idx) = 1; ## Dim blue and green blue(idx) .*= 0.5; green(idx) .*= 0.5; imgRight(:,:,2) = green; imgRight(:,:,3) = blue; ## Make the guess yellow again [i,j] = find(Am(iter) == H); imgH(i,j,1) = imgH(i,j,2) = 1; imgH(i,j,3) = 0; imshow(imgRight); snapshot; imshow(imgH); printf("rank is between %d and %d (target: %d)\n", Ptot(iter), Qtot(iter), medc_idx) snapshot; endfor if (jackpot) printf("Jackpot!\n") endif snapshot;