transform into rotation basis

This commit is contained in:
Florian Stecker
2019-02-11 15:20:56 +01:00
parent 8146f0ee60
commit 91bd66f057
3 changed files with 77 additions and 18 deletions

55
draw.c
View File

@@ -151,7 +151,7 @@ void drawSegment(DrawingContext *ctx, vector_t a, vector_t b)
// level 3: boxes and polygons
void drawPolygon(DrawingContext *ctx, int sides, ...)
void drawPolygon(DrawingContext *ctx, int segments, int sides, ...)
{
va_list args;
vector_t first, prev, current;
@@ -163,9 +163,15 @@ void drawPolygon(DrawingContext *ctx, int sides, ...)
for(int i = 0; i < sides-1; i++) {
prev = current;
current = va_arg(args, vector_t);
drawSegment(ctx, prev, current);
if(segments)
drawSegment(ctx, prev, current);
else
drawCovector(ctx, cross(prev, current));
}
drawSegment(ctx, current, first);
if(segments)
drawSegment(ctx, current, first);
else
drawCovector(ctx, cross(current, first));
va_end(args);
}
@@ -175,7 +181,7 @@ void drawTriangle(DrawingContext *ctx, const char *word)
vector_t p[3];
fixedPoints(ctx, word, p);
drawPolygon(ctx, 3, p[0], p[1], p[2]);
drawPolygon(ctx, 1, 3, p[0], p[1], p[2]);
}
void drawBox(DrawingContext *ctx, const char *word1, const char *word2)
@@ -189,7 +195,21 @@ void drawBox(DrawingContext *ctx, const char *word1, const char *word2)
for(int j = 0; j < 2; j++)
i[j] = cross(cross(p[j%2][0],p[j%2][1]),cross(p[(j+1)%2][0],p[(j+1)%2][2]));
drawPolygon(ctx, 4, p[0][0], i[0], p[1][0], i[1]);
drawPolygon(ctx, 1, 4, p[0][0], i[0], p[1][0], i[1]);
}
void drawBoxLines(DrawingContext *ctx, const char *word1, const char *word2)
{
vector_t p[2][3],i[2];
fixedPoints(ctx, word1, p[0]);
fixedPoints(ctx, word2, p[1]);
// intersect attracting line with neutral line of the other element
for(int j = 0; j < 2; j++)
i[j] = cross(cross(p[j%2][0],p[j%2][1]),cross(p[(j+1)%2][0],p[(j+1)%2][2]));
drawPolygon(ctx, 0, 4, p[0][0], i[0], p[1][0], i[1]);
}
void drawBoxStd(DrawingContext *ctx, const char *word, char base)
@@ -366,19 +386,22 @@ void drawBoxes2(DrawingContext *ctx)
// drawBox(ctx, "b bca b", "b abc b");
*/
cairo_set_source_rgb(ctx->cairo, 0, 0, 0);
drawBox(ctx, "abc", "cab");
cairo_set_source_rgb(ctx->cairo, 0, 0.5, 1);
// drawBox(ctx, "cab", "bca");
// drawBox(ctx, "ac cab ca", "ac bca ca");
// drawBox(ctx, "acac cab caca", "acac bca caca");
drawBox(ctx, "caca cab acac", "caca bca acac");
drawBox(ctx, "ca cab ac", "ca bca ac");
// cairo_set_source_rgb(ctx->cairo, 1, 0, 0);
// drawBoxLines(ctx, "bca", "abc");
cairo_set_source_rgb(ctx->cairo, 1, 0.5, 0);
drawBox(ctx, "a cab a", "a bca a");
drawBox(ctx, "aca cab aca", "aca bca aca");
drawBoxLines(ctx, "ac cab ca", "ac bca ca");
drawBoxLines(ctx, "acac cab caca", "acac bca caca");
drawBoxLines(ctx, "caca cab acac", "caca bca acac");
drawBoxLines(ctx, "ca cab ac", "ca bca ac");
drawBoxLines(ctx, "cab", "bca");
cairo_set_source_rgb(ctx->cairo, 0, 0, 0);
drawBoxLines(ctx, "abc", "cab");
cairo_set_source_rgb(ctx->cairo, 1, 0.5, 0);
// drawBox(ctx, "a cab a", "a bca a");
// drawBox(ctx, "aca cab aca", "aca bca aca");
// drawBox(ctx, "acaca cab acaca", "acaca bca acaca");
// drawBox(ctx, "cac cab cac", "cac bca cac");
// drawBox(ctx, "c cab c", "c bca c");