From 2667aa2806877d6fdd31b6ad34b0440197c14e1f Mon Sep 17 00:00:00 2001 From: Jesper Jensen Date: Fri, 24 Jul 2026 20:19:48 +0200 Subject: Fix some layout issues --- src/construction.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/construction.c') diff --git a/src/construction.c b/src/construction.c index f175f79..f2a473a 100644 --- a/src/construction.c +++ b/src/construction.c @@ -35,6 +35,12 @@ bool circle_line_intersect(struct circle circle, struct line line, uint8_t root, return true; } +void normalize_line(struct line *line) { + double mag = glm_vec2_norm(line->norm); + glm_vec2_scale(line->norm, 1.0f/mag, line->norm); + line->C /= mag; +} + void line_through_points(struct point p1, struct point p2, struct line* l) { l->norm[0] = p1.pos[1] - p2.pos[1]; l->norm[1] = p2.pos[0] - p1.pos[0]; @@ -141,7 +147,9 @@ static void transform_part(struct command *cmd, const struct command *last_cmd, } void dump_program(struct drawing *drawing, double inputs[]) { + size_t i = 0; for(struct command *current = drawing->root; current != NULL; current = current->next) { + fprintf(stderr, "%ld ", i++); switch(current->op) { case CMD_VALUE_INPUT: { fprintf(stderr, "%p -> LIT(%d, %f) = %f\n", ¤t->result, current->dir, inputs[current->index], current->result.value); @@ -171,7 +179,7 @@ void dump_program(struct drawing *drawing, double inputs[]) { fprintf(stderr, "%p -> CCT(%p, %p) = (%fx + %fy + %f = 0)\n", ¤t->result, current->arg1, current->arg2, current->result.line.norm[0], current->result.line.norm[1], current->result.line.C); }break; case CMD_POINT_CIRCLE_LINE: { - fprintf(stderr, "%p -> PCL(%p, %p) = <%f, %f>\n", ¤t->result, current->arg1, current->arg2, current->result.point.pos[0], current->result.point.pos[1]); + fprintf(stderr, "%p -> PCL(%p, %p, %d) = <%f, %f>\n", ¤t->result, current->arg1, current->arg2, current->root, current->result.point.pos[0], current->result.point.pos[1]); }break; case CMD_POINT_CIRCLE_CIRCLE: { fprintf(stderr, "%p -> PCC(%p, %p) = <%f, %f>\n", ¤t->result, current->arg1, current->arg2, current->result.point.pos[0], current->result.point.pos[1]); @@ -201,7 +209,11 @@ void dump_program(struct drawing *drawing, double inputs[]) { void place_points(struct drawing *drawing, double inputs[]) { struct command *outer_object = drawing->root; + uint32_t i = 0; for(struct command *current = drawing->root; current != NULL; current = current->next) { + // if(i++ > 36) break; + current->placed = true; + switch(current->op) { case CMD_VALUE_INPUT: { assert(current->result.type == ETYPE_VALUE); @@ -244,7 +256,7 @@ void place_points(struct drawing *drawing, double inputs[]) { double value = current->arg3->value; value = current->root == 0 ? value : -value; glm_vec2_rotate(current->arg2->line.norm, value, current->result.line.norm); - // printf("%f %f\n", current->result.line.norm[0], current->result.line.norm[1]); + fprintf(stderr, "%f %f\n", current->result.line.norm[0], current->result.line.norm[1]); vec2 offset = {-current->arg1->point.pos[0], -current->arg1->point.pos[1]}; current->result.line.C = glm_vec2_dot(current->result.line.norm, offset); @@ -366,16 +378,14 @@ void place_points(struct drawing *drawing, double inputs[]) { double dot = glm_vec2_dot(current->arg2->line.norm, current->arg1->point.pos); current->result.value = (dot + current->arg2->line.C) / glm_vec2_norm(current->arg2->line.norm); - fprintf(stderr, "Measured Distance %f\n", current->result.value); }break; case CMD_MEASURE_LINE_LINE_ANGLE: { assert(current->arg1->type == ETYPE_LINE); assert(current->arg2->type == ETYPE_LINE); assert(current->result.type == ETYPE_VALUE); - double theta = atan2(current->arg1->line.norm[1], current->arg1->line.norm[0]) - atan2(current->arg2->line.norm[1], current->arg2->line.norm[0]); + double theta = atan2(current->arg2->line.norm[1], current->arg2->line.norm[0]) - atan2(current->arg1->line.norm[1], current->arg1->line.norm[0]); current->result.value = theta; - fprintf(stderr, "Measured Angle %f\n", current->result.value); }break; } // printf("%fx + %fy + %f = 0\n", cmd[2].line.norm[0], cmd[2].line.norm[1], cmd[2].line.C); -- cgit v1.2.3