diff --git a/src/c/triangles.c b/src/c/triangles.c index 5246404..138d801 100644 --- a/src/c/triangles.c +++ b/src/c/triangles.c @@ -10,23 +10,10 @@ static void triangle_layer_update_proc(Layer *layer, GContext *ctx) { GRect bounds = layer_get_bounds(layer); graphics_context_set_stroke_color(ctx, tri->color); - // pick the longest side as the horizontal base - uint16_t base_side, left_side; - uint8_t left_angle; - - if (tri->side_a >= tri->side_b && tri->side_a >= tri->side_c) { - base_side = tri->side_a; - left_side = tri->side_c; // C → A - left_angle = tri->angle_B; // at vertex B - } else if (tri->side_b >= tri->side_a && tri->side_b >= tri->side_c) { - base_side = tri->side_b; - left_side = tri->side_c; // C → B - left_angle = tri->angle_A; // at vertex A - } else { - base_side = tri->side_c; - left_side = tri->side_b; // B → C - left_angle = tri->angle_A; // at vertex A - } + // side_a is always the longest side (horizontal base) + uint16_t base_side = tri->side_a; + uint16_t left_side = tri->side_c; // C → A (side c connects vertices B and A) + uint8_t left_angle = tri->angle_B; // at vertex B // calculate height and horizontal apex offset first int32_t sin_left = sin_lookup(((int32_t)left_angle * TRIG_MAX_ANGLE) / 360); @@ -93,6 +80,24 @@ TriangleLayer *triangle_layer_create(GRect frame, GColor color) { *(TriangleLayer **)layer_get_data(tri->layer) = tri; layer_set_update_proc(tri->layer, triangle_layer_update_proc); + // ensure side_a is always longest + if (tri->side_b > tri->side_a) { + uint16_t tmp_s = tri->side_a; + tri->side_a = tri->side_b; + tri->side_b = tmp_s; + uint8_t tmp_a = tri->angle_A; + tri->angle_A = tri->angle_B; + tri->angle_B = tmp_a; + } + if (tri->side_c > tri->side_a) { + uint16_t tmp_s = tri->side_a; + tri->side_a = tri->side_c; + tri->side_c = tmp_s; + uint8_t tmp_a = tri->angle_A; + tri->angle_A = tri->angle_C; + tri->angle_C = tmp_a; + } + return tri; }