Сегодня повторил фрактал из 2009 года

Jul 18, 2020 18:45

Когда-то очень давно я делал IFS папоротника. У меня тогда это получилось сделать и неплохо, и я целый день пытался повторить на С++, пока не понял, что там была багофича, которая, внезапно, давала неплохой эффект мурзни. Так вот, о чем я... я сделал учет этой багофичи и получилось нормально, почти так же, как было.

Кот промурлыкан вот здесь:

struct ifspoint {
int x, y;
double radius;
double theta;
};

struct generator {
float phi, radius;
};

const generator gn[3] =
{
{ 6, 0.9 },
{ 45+6, 0.9*0.6 },
{270+45+6, 0.9*0.6*0.6 },
};

void ifs(ifspoint origin, int d) {

vec2i c = {320 + origin.x, 240 - origin.y};
int p = point(c.x, c.y);

pset(c.x, c.y, max(p, 40 + d));

if (d > 0) {

for (int i = 0; i < 3; i++) {

ifspoint dv = origin;

dv.theta += (gn[i].phi / 180*M_PI);
dv.radius *= gn[i].radius;

dv.x += sin(dv.theta)*dv.radius;
dv.y += cos(dv.theta)*dv.radius;

ifs(dv, d - 1);
}
}
}

int main(int argc, char* argv[]) {

screen(14);
ifs({ 0, -120, 50, 0 }, 14);
while (sdlevent(EVT_REDRAW)) { }
return 0;
}

Папоротник, Воспоминания

Previous post Next post
Up