summaryrefslogtreecommitdiff
path: root/src/construction.c
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2026-07-24 20:19:48 +0200
committerJesper Jensen <jesper@jnsn.dev>2026-07-24 20:19:48 +0200
commit2667aa2806877d6fdd31b6ad34b0440197c14e1f (patch)
tree2c7fc9ded8170e3794c505c3ff50f610dd538c3e /src/construction.c
parent1af2dfbde432af9f13e8fba09b7ca29f5de71863 (diff)
Fix some layout issuesHEADmaster
Diffstat (limited to 'src/construction.c')
-rw-r--r--src/construction.c20
1 files changed, 15 insertions, 5 deletions
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", &current->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", &current->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", &current->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", &current->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", &current->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);