transform into rotation basis
This commit is contained in:
55
draw.c
55
draw.c
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user