36 typedef typename compositor_t::function function_t;
38 const T width = T(120);
39 const T height = T( 42);
43 symbol_table_t symbol_table;
45 symbol_table.add_constant(
"width" , width );
46 symbol_table.add_constant(
"height" , height );
47 symbol_table.add_function(
"println", println);
53 std::this_thread::sleep_for(
54 std::chrono::milliseconds(
static_cast<std::size_t
>(time_ms)));
62 printf(
"%s\033[H", full == T(1) ?
"" :
"\033[2J");
68 add_function(
"log_details",
69 [](T frame, T c_real, T c_imag) -> T
71 printf(
"ExprTk Julia Set Fractal Animation (Frame: %04lu - c = %6.3f + %6.3fi)\n",
72 static_cast<std::size_t
>(frame + 1),
82 static const char palette[] =
"........,'`^\":;-_~=+<>!?|\\/()[]"
83 "{}1iIljtfxrnuvczmwqpdbkhaoGXYUJCL"
85 static const int palette_size =
sizeof(palette) /
sizeof(
char) - 1;
86 int index =
static_cast<int>(v);
87 if (index < 0) index = 0;
88 if (index >= palette_size) index = palette_size - 1;
89 printf(
"%c", palette[index]);
93 compositor_t compositor(symbol_table);
95 compositor.load_variables(
true);
96 compositor.load_vectors (
true);
99 function_t(
"julia_set_fractal")
100 .vars(
"c_real",
"c_imag")
103 " var imag_max := +1.5; "
104 " var imag_min := -1.5; "
105 " var real_max := +1.5; "
106 " var real_min := -1.5; "
107 " var x_step := (real_max - real_min) / width; "
108 " var y_step := (imag_max - imag_min) / height; "
110 " for (var y := 0; y < height; y += 1) "
112 " var imag := imag_min + (y_step * y); "
114 " for (var x := 0; x < width; x += 1) "
116 " var real := real_min + x_step * x; "
117 " var z_real := real; "
118 " var z_imag := imag; "
119 " var plot_value := 0; "
121 " for (var n := 0; n < 50; n += 1) "
123 " var a := z_real^2; "
124 " var b := z_imag^2; "
129 " z_imag := 2 * z_real * z_imag + c_imag; "
130 " z_real := a - b + c_real; "
136 " putch(plot_value); "
143 const std::string julia_set_fractal_driver =
145 " for (var frame := 0; frame < 1000; frame += 1) "
147 " var radius := 0.4 + 0.1 * sin(t / 5); "
148 " var c_real := -0.74543 + radius * cos(t); "
149 " var c_imag := 0.27015 + radius * sin(t); "
152 " clear(frame % 100 == 0); "
153 " log_details(frame, c_real, c_imag); "
154 " julia_set_fractal(c_real, c_imag); "
158 expression_t expression;
159 expression.register_symbol_table(symbol_table);
162 parser.compile(julia_set_fractal_driver,expression);