Mercurial > hg > medcouple
diff talk/code/showalgo.m @ 66:916349600c4b
algorithm-visualisation code
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Wed, 18 May 2016 17:03:43 -0400 |
parents | |
children | 1aa38f4846e0 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/talk/code/showalgo.m @@ -0,0 +1,99 @@ +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"); +Am(end+1) = mc; + +colidx = 1:columns(H); + +origH = repmat((H+1)/2, 1, 1, 3); + +for iter = 1:length(Am) + ## 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; + + imshow(imgH); + pause + + ## 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); + pause + + 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); + pause + + ## 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); + pause + +endfor