From fefb5de652f3f07eda7bfb79ebb0134b64e5bd19 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Fri, 20 May 2016 23:53:22 +0200 Subject: Implement unit circle example `unit_circle.sh` generates a animated GIF of the circle states between p=1 and p=3. --- unit_circle.cc | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 unit_circle.cc (limited to 'unit_circle.cc') diff --git a/unit_circle.cc b/unit_circle.cc new file mode 100644 index 0000000..283fb53 --- /dev/null +++ b/unit_circle.cc @@ -0,0 +1,39 @@ +#include + +#include +#include +#include + +int p_norm(double p, int x, int y) { + return static_cast(std::nearbyint( + std::pow( + std::pow(std::abs(x), p) + std::pow(std::abs(y), p), + 1.0 / p + ) + )); +} + +void generate_p_unit_circle( + const double lower, + const double upper, + const double epsilon +) { + for ( double p = lower; p < upper + epsilon; p = p + epsilon ) { + imgen::write_ppm( + "unit_circle_" + std::to_string(p) + ".ppm", + 128, + 128, + [p](std::ptrdiff_t x, std::ptrdiff_t y) -> imgen::color { + if ( p_norm(p, x, y) <= 32 ) { + return imgen::black(); + } else { + return imgen::white(); + } + } + ); + } +} + +int main(int, char*[]) { + generate_p_unit_circle(1.0, 3.0, 0.05); +} -- cgit v1.2.3