Ensure side a is always the longest

This commit is contained in:
2026-08-07 19:22:17 -04:00
parent d4f91ab171
commit 99eb9bdbf1
+22 -17
View File
@@ -10,23 +10,10 @@ static void triangle_layer_update_proc(Layer *layer, GContext *ctx) {
GRect bounds = layer_get_bounds(layer); GRect bounds = layer_get_bounds(layer);
graphics_context_set_stroke_color(ctx, tri->color); graphics_context_set_stroke_color(ctx, tri->color);
// pick the longest side as the horizontal base // side_a is always the longest side (horizontal base)
uint16_t base_side, left_side; uint16_t base_side = tri->side_a;
uint8_t left_angle; 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
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
}
// calculate height and horizontal apex offset first // calculate height and horizontal apex offset first
int32_t sin_left = sin_lookup(((int32_t)left_angle * TRIG_MAX_ANGLE) / 360); 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; *(TriangleLayer **)layer_get_data(tri->layer) = tri;
layer_set_update_proc(tri->layer, triangle_layer_update_proc); 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; return tri;
} }