#include #include "studio/geometry.h" #include "studio/random.h" #include "triangles.h" struct vertices triangle(const struct triangle angle) { const struct triangle side = { .a = 1.0, .b = sine(angle.a) / sine(angle.c), .c = cosine(angle.a) + ((sine(angle.a) / sine(angle.c)) * cosine(angle.c)) }; const struct vertices triangle = { .A = (vector){.x = 0.0, .y = 0.0}, .B = (vector){.x = cosine(angle.a), .y = sine(angle.a)}, .C = (vector){.x = side.c, .y = 0.0} }; const double magic = 0.65; const matrix orientation = translate( divide(add(triangle.A, add(triangle.B, triangle.C)), scalar(-3.0)), rotate(any(360), scale( scalar(magic / max(side.a, max(side.b, side.c))), translate(scalar(side.a / 2.0), identity()) )) ); return (struct vertices){ .A = transform(triangle.A, orientation), .B = transform(triangle.B, orientation), .C = transform(triangle.C, orientation) }; }