From 193aaad305df21e45fa67a5aec238ddfd954623c Mon Sep 17 00:00:00 2001 From: Maddie Busig Date: Wed, 7 May 2025 02:47:40 -0700 Subject: [PATCH] Change demo to flower output --- src/main.cpp | 70 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index d2daaf5..f3e6035 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,14 +21,26 @@ int main(void) { mlog::debug << "Hello world!" << mtl::flush; constexpr float cos_PI_2 = std::cos(M_PI_2); + constexpr float cos_PI_3 = std::cos(M_PI / 3); constexpr float cos_PI_4 = std::cos(M_PI_4); + constexpr float cos_PI_8 = std::cos(M_PI_4 / 2); + constexpr float cos_PI_16 = std::cos(M_PI_4 / 4); constexpr float sin_PI_2 = std::sin(M_PI_2); + constexpr float sin_PI_3 = std::sin(M_PI / 3); constexpr float sin_PI_4 = std::sin(M_PI_4); + constexpr float sin_PI_8 = std::sin(M_PI_4 / 2); + constexpr float sin_PI_16 = std::sin(M_PI_4 / 4); fixed cos_PI_2_fx = cos_PI_2; + fixed cos_PI_3_fx = cos_PI_3; fixed cos_PI_4_fx = cos_PI_4; + fixed cos_PI_8_fx = cos_PI_8; + fixed cos_PI_16_fx = cos_PI_16; fixed sin_PI_2_fx = sin_PI_2; + fixed sin_PI_3_fx = sin_PI_3; fixed sin_PI_4_fx = sin_PI_4; + fixed sin_PI_8_fx = sin_PI_8; + fixed sin_PI_16_fx = sin_PI_16; try { fixed branch_angle = M_PI_4; @@ -36,10 +48,10 @@ int main(void) { token_id_t walk_petal_length = rules.add_token(token_type_e::walk, 8); token_id_t walk_petal_side = rules.add_token(token_type_e::walk, 2); - token_id_t rotate_axiom = rules.add_token(token_type_e::rotate, cos_PI_2_fx, sin_PI_2_fx); - token_id_t rotate_petal = rules.add_token(token_type_e::rotate, cos_PI_2_fx, -sin_PI_2_fx); - token_id_t rotate_branchr = rules.add_token(token_type_e::rotate, cos_PI_4_fx, -sin_PI_4_fx); - token_id_t rotate_branchl = rules.add_token(token_type_e::rotate, cos_PI_2_fx, sin_PI_2_fx); + token_id_t rotate_axiom = rules.add_token(token_type_e::rotate, cos_PI_3_fx, sin_PI_3_fx); + token_id_t rotate_petal = rules.add_token(token_type_e::rotate, cos_PI_3_fx, -sin_PI_3_fx); + token_id_t rotate_branchr = rules.add_token(token_type_e::rotate, cos_PI_8_fx, -sin_PI_8_fx); + token_id_t rotate_branchl = rules.add_token(token_type_e::rotate, cos_PI_4_fx, sin_PI_4_fx); token_id_t branch = rules.add_token(token_type_e::empty); token_id_t petal = rules.add_token(token_type_e::empty); @@ -47,7 +59,7 @@ int main(void) { mlog::info << "Added tokens" << endl; - uint32_t axiom_factor = 4; + uint32_t axiom_factor = 6; etl::vector axiom_chr{ branch, rotate_axiom }; group_id_t axiom_grp = rules.add_group_characteristic(axiom_chr, axiom_factor); @@ -73,11 +85,11 @@ int main(void) { size_t gen_num = 0; try { - constexpr fixed scale = 0.5; + constexpr fixed scale = 0.8; gen.parse_ruleset(rules); gen.set_scale(scale); - while (gen.step_generation(output) && gen.generation_num() < 4) { + while (gen.step_generation(output) && gen.generation_num() < 6) { mlog::debug << "Stepped generation" << gen.generation_num() << endl; gen_num = gen.generation_num(); } @@ -96,6 +108,50 @@ int main(void) { mlog::info << " " << marker.m_pos << endl; } + vec2 origin(120, 80); + int imgscale = 8; + + uint8_t r = 0; + uint8_t g = 0; + uint8_t b = 0; + uint8_t a = 0; + COLOR color[3] = { CLR_FUCHSIA, CLR_CREAM, CLR_MAROON }; + + for (size_t i = 2; i < output.size(); i += 3) { + const marker_t& m1 = output[i-2]; + const marker_t& m2 = output[i-1]; + const marker_t& m3 = output[i-0]; + + r = 0xFF * 2 / i; + g = 0xFF * 2 / i; + b = 0x33; + a = 0xFF; + //color = (a << 24) | (r << 16) | (g << 8) | b; + clr_rotate(color, 3, 1); + + vec2 v1 = origin + imgscale * m1.m_pos; + vec2 v2 = origin + imgscale * m2.m_pos; + vec2 v3 = origin + imgscale * m3.m_pos; + + mlog::debug << "Vertices: " << v1 << ", " << v2 << ", " << v3 << endl; + + int32_t iv1_x = v1.x.raw() / 256; + int32_t iv1_y = v1.y.raw() / 256; + int32_t iv2_x = v2.x.raw() / 256; + int32_t iv2_y = v2.y.raw() / 256; + int32_t iv3_x = v3.x.raw() / 256; + int32_t iv3_y = v3.y.raw() / 256; + + mlog::debug << " (" << iv1_x << ", " << iv1_y << ")" << endl; + mlog::debug << " (" << iv2_x << ", " << iv2_y << ")" << endl; + mlog::debug << " (" << iv3_x << ", " << iv3_y << ")" << endl; + + bmp16_line(iv1_x, iv1_y, iv2_x, iv2_y, color[0], vid_mem, 480); + bmp16_line(iv1_x, iv1_y, iv3_x, iv3_y, color[0], vid_mem, 480); + bmp16_line(iv2_x, iv2_y, iv3_x, iv3_y, color[0], vid_mem, 480); + + } + while (true) { vid_vsync(); }