Ensure side a is always the longest
This commit is contained in:
+22
-17
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user