понедельник, 20 мая 2013 г.

Треугольник (салфетка) Серпинского в консоли

Наряду с "квадратом Серпинского" часто рисуют аналогичный фрактал под названием "треугольник Серпинского", исследованный знаменитым польским математиком В. Серпинским в 1916 году. Приведём реализацию программы построения фрактала на классическом Си. Константы N и M задают размер массива, в котором строится изображение, а константа HEIGHT задаёт масштаб фрактала.


/* Serpinsky triangle
***********************/

#include < stdio.h >
#include < string.h >

#define N 70
#define M 140
#define SYMB '*'
#define HEIGHT 6

void clear(char *buf)
{
  memset(buf,' ',M*N);
}
void print(char (*buf)[M])
{
  int i,j;
  for(i=0;i < N;i++) {
    for(j=0;j < M;j++)
      putchar(buf[i][j]);
    putchar('\n');
  }
}
int pow2(int m)
{
  int i,n=1;
  for(i=0;i < m;i++)
    n*=2;
  return n;
}
void serpin(char (*buf)[M],int x,int y,int s)
{
    int step=pow2(s-1);
    if(s==1)
      buf[y][x]=buf[y+step][x-step]=buf[y+step][x+step]=SYMB;
    else
      {
        serpin(buf,x,y,s-1);
        serpin(buf,x-step,y+step,s-1);
        serpin(buf,x+step,y+step,s-1);
      }
}

int main()
{
  char buf[N][M];
  clear((char*)buf);
  serpin(buf,M/2,1,HEIGHT);
  print(buf);
  return 0;
}


Приведём снимок экрана терминала, в котором был построен фрактал:


Литература

А. А. Кириллов. Повесть о двух фракталах. (c2) МЦНМО, 2010, 180 с.

Комментариев нет:

Отправить комментарий