cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Check out the JMP® Marketplace featured Capability Explorer add-in
Choose Language Hide Translation Bar
Craige_Hales
Super User
Disorganization

 Playing with a square matrix of random numbers between zero and one. I was hoping for a more dynamic video; the rules in the loop settle into a fairly stable image in just a few thousand iterations...I threw away more than 8,000 of the 10,000 images at the end. The goal of the angle calculations in the loop is to look at points a little ways forward in the circle to determine the fate of the current point. The two videos are identical, except for the forward/reverse sequence of the frames. Forward is the order they are generated in, starting random and ending less random. Reverse ends in random data. The most interesting features are the thin rainbow bands created by the spectral color theme and the heatmap function. It takes many seconds to generate each frame; set the scale to .25 to speed it up.

 

dir = "D:\Chales\random\";
pad=5;
scale=1;
bitmap = J( 1200*scale +2*pad+1, 1200*scale + 2*pad + 1, Random Uniform( 0, 1 ) );//randomnormal(.5,1));//
New Window( "random", holder = H List Box( New Image( "rgb", {bitmap, bitmap, bitmap} ) ) );
nnn = 2e6;
For( i = 1, i <= 10000, i++, 
    (holder << child) << delete;
    bitmapt = bitmap[pad :: (N Rows( bitmap ) - pad), pad :: N Cols( bitmap ) - pad];
    img = New Image( Heat Color( bitmapt, "spectral" ) );
    img << saveImage( dir || "p" || Char( nnn ) || ".png", "png" );
    nnn += 1;
    holder << append( img );
    holder << updatewindow;
    Print( i );
    Wait( .02 );
    Parallel Assign(
        {thresholdx = Mean( bitmap ), source = bitmap, nr = N Rows( bitmap ), nc = N Cols( bitmap ), rmid = N Rows( bitmap ) / 2, cmid =
        N Cols( bitmap ) / 2, rate = .96, speed = 100, power=.1},
        bitmap[r, c] = If(
            angle = ATan( r - rmid, c - cmid );
            radius = Sqrt( (c - cmid) ^ 2 + (r - rmid) ^ 2 );
            angle = angle - speed / (radius ^ power);
            rr = ((rmid + Sin( angle ) * radius));
            If(
                rr < 2, rr = 2,
                rr > nr - 1, rr = nr - 1
            );
            cc = ((cmid + Cos( angle ) * radius));
            If(
                cc < 2, cc = 2,
                cc > nc - 1, cc = nc - 1
            );
           // show(rr,cc);
            Try( Sum( source[rr - 1 :: rr + 1, cc - 1 :: cc + 1] ) / 9 < thresholdx, Show( rr, cc ) );
        , 
            Max( 0, source[r, c] * rate )
        ,
            Min( 1, source[r, c] / rate )
        )
    );
);
Print( "done" );

 

 

Last Modified: Sep 1, 2018 9:57 AM