App-GUI-Juliagraph

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

    color sets and dirs where to load and store setting files. You may also
    change it by editor or delet it to reset configs to default.

DESCRIPTION
    Mandelbrot (first two pictures) and Julia fractals (four after that) are
    just mathematical diagrams, showing you how iterating the equation
    "z_n+1 = z_n ** 2 + C" behaves on the complex plane. Our running
    variable gets an initial value and gets squared each time, plus an
    constant is added, also each time. Mandelbrot mean this constant are the
    pixel coordinates, Julia means the coordinates are the starting value.
    And the pixel color just contains the information how many iterations
    (times) it took until z got greater than our bailout value.

    This program has additional capabilities/options:

    *   iteration formula with up to four monomials

    *   choosable exponent and factor for each of them

    *   choosable stop value and stop metric

README  view on Meta::CPAN

    The third section is about the mentioned constant number, added to "z"
    at each iteration. A is the real part corresponding to the X-axis and B
    the imaginary part corresponding to Y. In same manner, section four is
    holding the starting value. To both of these values the coordinates can
    be added. Just click the checkbox in the upper right corner. If chosen
    the constant or starting value is then the sum of pixel coordinates with
    the displayed value.

    The fifth section holds all values that determine the end of the
    computation on one spot. There are two conditions that can trigger that.
    Either you run out of iterations (exceeded the maximal interation
    *count*). Please note, that the actual number is the displayed number
    squared. This gives you a wider range eof options and a little more
    comfort while changing the value. When the computation runs out of
    iterations, the current pixel will get the background color. The second
    stop criterion is fulfilled when the value exceeds the bailout limit
    (*Value*), which is also the displayed number squared. In the right
    corner you got ten different ways how to compute the amount of z.
    Mathematicians call them merics. They mostly influence the shape around
    the main shape (the crwon - corona).

  Monomials
    The second tab contains 4 identical sections which also work the same
    way. Each of them stand in for a monomial of the iteration equation, but
    only if the checkbox *On* is marked. A second checkbox decides if this

lib/App/GUI/Juliagraph.pm  view on Meta::CPAN


=head1 DESCRIPTION

Mandelbrot (first two pictures) and Julia fractals (four after that) are
just mathematical diagrams, showing you how iterating the equation
C<z_n+1 = z_n ** 2 + C> behaves on the complex plane.
Our running variable gets an initial value and gets squared each time,
plus an constant is added, also each time. Mandelbrot mean this constant
are the pixel coordinates, Julia means the coordinates are the starting
value. And the pixel color just contains the information how many
iterations (times) it took until z got greater than our bailout value.

=for HTML <p>
<img src="https://raw.githubusercontent.com/lichtkind/App-GUI-Juliagraph/master/img/examples/first.png"         alt=""  width="300" height="300">
<img src="https://raw.githubusercontent.com/lichtkind/App-GUI-Juliagraph/master/img/examples/first_detail.png"  alt=""  width="300" height="300">
<img src="https://raw.githubusercontent.com/lichtkind/App-GUI-Juliagraph/master/img/examples/feingoldkreutz.png"alt=""  width="300" height="300">
<img src="https://raw.githubusercontent.com/lichtkind/App-GUI-Juliagraph/master/img/examples/julia.png"         alt=""  width="300" height="300">
<img src="https://raw.githubusercontent.com/lichtkind/App-GUI-Juliagraph/master/img/examples/set.png"           alt=""  width="300" height="300">
<img src="https://raw.githubusercontent.com/lichtkind/App-GUI-Juliagraph/master/img/examples/sonne.png"         alt=""  width="300" height="300">
</p>

lib/App/GUI/Juliagraph.pm  view on Meta::CPAN

The third section is about the mentioned constant number, added to C<z>
at each iteration. A is the real part corresponding to the X-axis and
B the imaginary part corresponding to Y. In same manner, section four
is holding the starting value. To both of these values the coordinates
can be added. Just click the checkbox in the upper right corner. If
chosen the constant or starting value is then the sum of pixel coordinates
with the displayed value.

The fifth section holds all values that determine the end of the computation
on one spot. There are two conditions that can trigger that. Either you run
out of iterations (exceeded the maximal interation I<count>). Please note,
that the actual number is the displayed number squared. This gives you a
wider range eof options and a little more comfort while changing the value.
When the computation runs out of iterations, the current pixel will get
the background  color. The second stop criterion is fulfilled when
the value exceeds the bailout limit (I<Value>), which is also the displayed
number squared. In the right corner you got ten different ways how to compute
the amount of z. Mathematicians call them merics. They mostly influence
the shape around the main shape (the crwon - corona).

=head2 Monomials

=for HTML <p>
<img src="https://raw.githubusercontent.com/lichtkind/App-GUI-Juliagraph/master/img/POD/Tab_Polynomials.png"    alt=""  width="630" height="410">

lib/App/GUI/Juliagraph/Frame/Tab/Constraints.pm  view on Meta::CPAN

    $self->{'button_zoom'}->SetToolTip('zoom factor: the larger the more you zoom in');
    $self->{'button_zoom'}->SetCallBack(sub { $self->{'zoom'}->SetValue( $self->{'zoom'}->GetValue + shift ) });
    $self->{'button_x'}->SetCallBack( sub { my $value = shift;$self->{'center_x'}->SetValue( $self->{'center_x'}->GetValue + ($value * $self->zoom_size) ) });
    $self->{'button_y'}->SetCallBack( sub { my $value = shift;$self->{'center_y'}->SetValue( $self->{'center_y'}->GetValue + ($value * $self->zoom_size) ) });
    $self->{'button_ca'}->SetCallBack(sub { $self->{'const_a'}->SetValue( $self->{'const_a'}->GetValue + shift ) });
    $self->{'button_cb'}->SetCallBack(sub { $self->{'const_b'}->SetValue( $self->{'const_b'}->GetValue + shift ) });
    $self->{'button_sa'}->SetCallBack(sub { $self->{'start_a'}->SetValue( $self->{'start_a'}->GetValue + shift ) });
    $self->{'button_sb'}->SetCallBack(sub { $self->{'start_b'}->SetValue( $self->{'start_b'}->GetValue + shift ) });

    $self->{'reset_zoom'}->SetToolTip('Reset zoom level to one !');
    $self->{'stop_nr'}     = App::GUI::Juliagraph::Widget::SliderCombo->new( $self, 365, 'Count:', "Square root of maximal amount of iterations run on one pixel coordinates", 3, 120, 5, 0.25);
    $self->{'stop_nr'}->SetCallBack( sub { $self->{'callback'}->() });
    $self->{'stop_value'}  = App::GUI::Juliagraph::Widget::SliderCombo->new( $self, 200, 'Value:', "Square root of value that triggeres bailout / iteration stop", 1, 120, 5, 0.25);
    $self->{'stop_value'}->SetCallBack( sub { $self->{'callback'}->() });
    $self->{'stop_metric'} = Wx::ComboBox->new( $self, -1, '|var|', [-1,-1],[95, -1], ['|var|', '|x|+|y|', '|x|', '|y|', '|x+y|', 'x+y', 'x-y', 'y-x', 'x*y', '|x*y|']);
    $self->{'stop_metric'}->SetToolTip('metric for computing stop value (|var| = sqrt(z.re**2 + z.i**2), x = z.real, y = z.im');

    $self->{'const_widgets'} = [qw/const_a const_b button_ca button_cb lbl_const lbl_consta lbl_constb reset_const_a reset_const_b /];
    $self->{'start_widgets'} = [qw/start_a start_b button_sa button_sb lbl_start lbl_starta lbl_startb reset_start_a reset_start_b /];

    Wx::Event::EVT_BUTTON( $self, $self->{'reset_zoom'},     sub { $self->{'zoom'}->SetValue(1) });

lib/App/GUI/Juliagraph/Frame/Tab/Mapping.pm  view on Meta::CPAN

    $self->{'lbl_sub_dyn'} = Wx::StaticText->new($self, -1, 'Dynamic : ' );
    $self->{'lbl_sub_space'} = Wx::StaticText->new($self, -1, 'Space : ' );
    $self->{'lbl_sub_distro'} = Wx::StaticText->new($self, -1, 'Distribution : ' );
    $map_lbl->SetToolTip('Decide which colors are used to paint the drawing.');
    $color_lbl->SetToolTip('Use slected colors (on) or just simple gray scale (off)');
    $self->{'lbl_backg'}->SetToolTip('Which color is used to paint areas where computation never exceeds the bailout value.');
    $self->{'lbl_begin'}->SetToolTip('Starting color of the rainbow.');
    $self->{'lbl_end'}->SetToolTip('Endcolor of the rainbow');
    $map_dyn_lbl->SetToolTip('How many big is the slant of a color gradient in one or another direction (between the selected colors in next tab)');
    $map_space_lbl->SetToolTip('In which color space will the gradient between chosen colors be computed ?');
    $scale_lbl->SetToolTip('Divide the scale of possible iterations into goups (partitions) that can be mapped to colors.');
    $custom_lbl->SetToolTip('Divide the scale of possible iterations into goups (partitions) that can be mapped to colors. Use every iteration count gets its own color when off.');
    $self->{'lbl_max'}->SetToolTip('Maximal iteration count that gets partitioned.');
    $self->{'lbl_distro'}->SetToolTip('How to compute the partitioning of the iteration scale. Linear means evenly sized portions.');
    $submap_lbl->SetToolTip('Gradients between areas of iteration counts based on final value.');
    $self->{'lbl_sub_use'}->SetToolTip('Make even more fine grained color gradients, my computing gradient between color regions.');
    $self->{'lbl_sub_dyn'}->SetToolTip('How big is the slant of a color sub gradient in one or another direction ?');
    $self->{'lbl_sub_space'}->SetToolTip('In which color space will the subgradient between chosen colors be computed ?');

    my @color_names = map { 'color '.$_ } 1 .. 11;
    $self->{'custom_partition'} = Wx::CheckBox->new( $self, -1,  '', [-1,-1],[30, -1]);
    $self->{'user_colors'}      = Wx::CheckBox->new( $self, -1,  '', [-1,-1],[30, -1]);

lib/App/GUI/Juliagraph/Frame/Tab/Mapping.pm  view on Meta::CPAN

    $self->{'begin_color'}  = Wx::ComboBox->new( $self, -1, 'color 3', [-1,-1],[100, -1], [@color_names]);
    $self->{'end_color'}    = Wx::ComboBox->new( $self, -1, 'color 4', [-1,-1],[100, -1], [@color_names]);
    $self->{'background_color'}   = Wx::ComboBox->new( $self, -1,'black', [-1,-1],[100,-1], [qw/black blue gray white/, 'color 11']);
    $self->{'gradient_dynamic'}   = Wx::ComboBox->new( $self, -1,      0, [-1,-1],[80, -1], [-5, -4, -3, -2.5, -2, -1.6, -1.3, -1, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1, 1.3, 1.6, 2, 2.5, 3, 4, 5...
    $self->{'gradient_space'}     = Wx::ComboBox->new( $self, -1,  'RGB', [-1,-1],[80, -1], [qw/RGB HSL/]);
    $self->{'subgradient_steps'}  = App::GUI::Juliagraph::Widget::SliderCombo->new( $self, 249, 'Steps :', "How man shades toes the subgradient have ?", 2, 100, 5, 1);
    $self->{'subgradient_size'}   = App::GUI::Juliagraph::Widget::SliderCombo->new( $self, 249, 'Size :', "Up to which value (Bailout/Stop Value + X) does the scale goes, from which subgradient is computed", 100, 5000, 500, 50);
    $self->{'subgradient_space'}  = Wx::ComboBox->new( $self, -1,  'RGB', [-1,-1],[80, -1], [qw/RGB HSL/]);
    $self->{'subgradient_dynamic'}= Wx::ComboBox->new($self, -1,     0, [-1,-1],[80, -1], [-5, -4, -3, -2.5, -2, -1.6, -1.3, -1, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 1, 1.3, 1.6, 2, 2.5, 3, 4, 5])...
    $self->{'subgradient_distro'} = Wx::ComboBox->new( $self, -1, 'linear',  [-1,-1],[100, -1], [qw/log cubert sqrt linear square cube exp/]);
    $self->{'custom_partition'}->SetToolTip('Divide the scale of possible iterations into goups (partitions) that can be mapped to colors. Use every iteration count gets its own color when off.');
    $self->{'scale_max'}->SetToolTip('Maximal iteration count.');
    $self->{'scale_distro'}->SetToolTip('Relation between partitions size wise, linear means they all equally big.');
    $self->{'user_colors'}->SetToolTip('Use chosen color selection to compute color rainbow (on) or just a gray scale (off).');
    $self->{'use_subgradient'}->SetToolTip('Make color gradient smoother by computing gradients between colored areas based on final value of iteration.');
    $self->{'begin_color'}->SetToolTip('Starting color of the rainbow.');
    $self->{'end_color'}->SetToolTip('Endcolor of the rainbow');
    $self->{'background_color'}->SetToolTip('Color that is used to paint areas where iteration stays below stop value.');
    $self->{'gradient_dynamic'}->SetToolTip('Skew direction of gradient (positive value = left)');
    $self->{'subgradient_dynamic'}->SetToolTip('Skew direction of gradient (positive value = left)');
    $self->{'subgradient_distro'}->SetToolTip('Relation between parts of subgradient size wise');



( run in 1.015 second using v1.01-cache-2.11-cpan-96521ef73a4 )