Scripts/Plot 3D

From J Wiki
Jump to navigation Jump to search

Plotting boolean 3-array, roughly equivalent to 3D version of viewmat. Also plots a list of 3-coordinates similarly.

Plot3d.png

Summary

plotcubes v plot #y cubes at (x,y,z)=i{y
view3d v boolean 3d viewmat

plotcubes

plotcubes (v) plot #y cubes at (x,y,z)=i{y

 x is palette string of GRAYSCALE,STDCLR,RBCLR,RGCLR,RGBCLR,BGCLR
 simpler form of this verb is:  'poly'"_ plot cubes

view3d

view3d (v) boolean 3d viewmat

Details

The following script would be loadable by itself, which would load plot, and used straight away. (Some assembly required.)

require 'plot'
coclass 'jzplot'

NB. «support»

NB. «public»

plotcubes_z_=: plotcubes_jzplot_
view3d_z_=: view3d_jzplot_

NB. «test»

Implementation of public verbs.

NB.* plotcubes v plot #y cubes at (x,y,z)=i{y
NB.  x is palette string of GRAYSCALE,STDCLR,RBCLR,RGCLR,RGBCLR,BGCLR
NB.  simpler form of this verb is:  'poly'"_ plot cubes
plotcubes=: 3 : 0
  'GRAYSCALE' plotcubes y
:
  d=. |:_6<\ &> cubes y /: +/"1]1 _1 1*"1 y 
  MYCOLOR_jzplot_=: c{~6#<.(<:#c=.(x,'_jzplot_')~)*(i.%<:)#d
  pd 'new;type poly;edgecolor gray;color MYCOLOR'
  pd"1 d
  pd'show'
)

NB.*view3d v boolean 3d viewmat
view3d=: 'GRAYSCALE'&$: : (plotcubes $ #: I.@,)

Private support verbs operate on cube representations.

cut3=: <"2 @ (0 1&|:)    NB. 3-array to list of boxed matrices

cubic=: 3 : 0            NB. unit 3-cube
  v   =. 2 2 2#: i.8
  ndx =. 0 2 6 4, 4 6 7 5, 1 5 7 3, 0 1 3 2, 2 3 7 6,: 0 4 5 1
  ndx { v
)
                         NB.  unit cubes shifted by list of 3-coords
cubes=: [: cut3 cubic ,/@:(+"1"_ 1) ]

                         NB. y 3-coords from 0..x
randcubes=: 4 : '3 (# (#: ?) y&#@^~) x'

Here we do some testing and illustration. The results are given in the pictures above. Hilbert curve was built with
   view3d H_3d 3
using JForum:general/2005-August/024079

NB. =========================================================
Note 'Test'
  plotcubes            5 randcubes_jzplot_ 10
  'STDCLR'plotcubes    5 randcubes_jzplot_ 20
  'RGBCLR'plotcubes   10 randcubes_jzplot_ 100
          plotcubes   30 randcubes_jzplot_ 1000
          plotcubes  100 randcubes_jzplot_ 10000

  ]CUBES=: 5 randcubes_jzplot_ 10
  cut3_jzplot_ QUBES=: 1(<"1 CUBES)}5 5 5$0    NB. coord to boolean 3-cube
  (/:~CUBES) -: ($ #: I.@,) QUBES
  plotcubes CUBES
  view3d QUBES

  'STDCLR' view3d 1>? (3#5)$10
           view3d 3>? (3#20)$100
)

Thanks to RE Boss for the ideas about 3D plot shading.
See RE Boss/Jblog for comment.

See Also

    • [Jgeneral] 3d plot, dot style,

JForum:general/2007-January/028644 JForum:general/2007-January/028610

    • [Jgeneral] RE: Plotting high dimensional figures

JForum:general/2005-December/025949

    • [Jforum] Visualizing (Hilbert)curves (was Re: [Jforum] assign numbers to areas)

JForum:general/2005-August/024079 JForum:general/2005-August/023984 JForum:general/2005-August/024012 JForum:general/2005-August/024020


Contributed by Oleg Kobchenko