Math-Fractal-Mandelbrot

 view release on metacpan or  search on metacpan

Mandelbrot.xs  view on Meta::CPAN


  CODE:
    a2 = (AV*)sv_2mortal((SV*)newAV());
    av_extend (a2, l + 1);
    x2 = x1 + l;
    i = 1; same = 0; last = _point (x1,y1);
    for (x = x1; x < x2; x++)
      {
      iter = _point (x,y1);
      av_push( a2, newSViv(iter) );
      if (iter == last) { same++; } else { break; }
      }
    for (;x < x2; x++)
      {
      iter = _point (x,y1);
      av_push( a2, newSViv(iter) );
      }
    av_push( a2, newSViv(same) );
    RETVAL = (AV*)a2;
  OUTPUT:
    RETVAL

##############################################################################
# ver_line() - calculate fractal at a vertical stripe
# input: X and Y   coordinates of the start point
#        L 	   length of line

AV*
ver_line(myclass, x1, y1, l)
	unsigned int	x1
	unsigned int	y1
	unsigned int	l

  INIT:
    unsigned int	y, y2, i, last, iter, same;
    AV*			a2;

  CODE:
    a2 = (AV*)sv_2mortal((SV*)newAV());
    av_extend (a2, l + 1);
    y2 = y1 + l;   
    i = 1; same = 0; last = _point (x1,y1);
    for (y = y1; y < y2; y++)
      {
      iter = _point (x1,y);
      av_push( a2, newSViv(iter) );
      if (iter == last) { same++; } else { break; }
      }
    for (;y < y2; y++)
      {
      iter = _point (x1,y);
      av_push( a2, newSViv(iter) );
      }
    av_push( a2, newSViv(same) );
    RETVAL = a2;
  OUTPUT:
    RETVAL


##############################################################################
# set_max_iter() - set maximum iterations
# input: new max_iter

unsigned int
set_max_iter(myclass, new_max_iter)
	unsigned int	new_max_iter
  CODE:
    m_max_iter = new_max_iter;
    if (new_max_iter == 0) { m_max_iter = 1; }		/* at least 1 */
    RETVAL = m_max_iter;
  OUTPUT:
    RETVAL


##############################################################################
# set_limit()
# input: new limit

double
set_limit(myclass, new_limit)
	double	new_limit
  CODE:
    m_limit = new_limit;
    RETVAL = m_limit;
  OUTPUT:
    RETVAL


##############################################################################
# set_epsilon()
# input: new limit

double
set_epsilon(myclass, new_e)
	double	new_e
  CODE:
    m_epsilon = new_e;
    RETVAL = m_epsilon;
  OUTPUT:
    RETVAL


##############################################################################
# set_bounds()
# input: x1,y1, x2,y2, w,h

void
set_bounds(myclass, nx1, ny1, nx2, ny2, nw, nh)
	double	nx1
	double	ny1
	double	nx2
	double	ny2
	unsigned int nw
	unsigned int nh
  CODE:
    m_x1 = nx1;
    m_y1 = ny1;
    m_x2 = nx2;
    m_y2 = ny2;
    m_w = nw;
    m_h = nh;



( run in 2.382 seconds using v1.01-cache-2.11-cpan-5c0b1e786e0 )