start drawing rotation orbits
This commit is contained in:
128
draw.c
128
draw.c
@@ -2,6 +2,12 @@
|
||||
|
||||
// level 0: helper functions
|
||||
|
||||
int isInsideBB(DrawingContext *ctx, point_t p)
|
||||
{
|
||||
cairo_user_to_device(ctx->cairo, &x, &y);
|
||||
return -p.x < ctx->dim->width && p.x < 3*ctx->dim->width && -p.y < ctx->dim->height && p.y < 3*ctx->dim->height;
|
||||
}
|
||||
|
||||
vector_t cross(vector_t a, vector_t b)
|
||||
{
|
||||
vector_t result;
|
||||
@@ -47,26 +53,6 @@ int fixedPoints(DrawingContext *ctx, const char *word, vector_t *out)
|
||||
return count;
|
||||
}
|
||||
|
||||
void transformFrameStd(DrawingContext *ctx, vector_t *x, gsl_matrix *out)
|
||||
{
|
||||
gsl_matrix *tmp = getTempMatrix(ctx->ws);
|
||||
gsl_vector *fourth = getTempVector(ctx->ws);
|
||||
gsl_vector *lambda = getTempVector(ctx->ws);
|
||||
int s;
|
||||
|
||||
LOOP(i) LOOP(j) gsl_matrix_set(out, j, i, x[i].x[j]);
|
||||
gsl_matrix_memcpy(tmp, out);
|
||||
gsl_linalg_LU_decomp(tmp, ctx->ws->permutation, &s);
|
||||
gsl_linalg_LU_solve(tmp, ctx->ws->permutation, fourth, lambda);
|
||||
|
||||
LOOP(i) LOOP(j) *gsl_matrix_ptr(out, i, j) *= gsl_vector_get(lambda, j);
|
||||
|
||||
gsl_matrix_fprintf(stdout, out, "%f");
|
||||
|
||||
releaseTempMatrices(ctx->ws, 1);
|
||||
releaseTempVectors(ctx->ws, 2);
|
||||
}
|
||||
|
||||
// level 1: the elementary drawing functions, drawPoint, drawSegment2d
|
||||
|
||||
void drawPoint(DrawingContext *ctx, point_t p)
|
||||
@@ -257,8 +243,8 @@ void drawAttractors(DrawingContext *ctx)
|
||||
vector_t l[3][3];
|
||||
|
||||
fixedPoints(ctx, "abc", p[0]);
|
||||
fixedPoints(ctx, "bca", p[1]);
|
||||
fixedPoints(ctx, "cab", p[2]);
|
||||
fixedPoints(ctx, "bca", p[1]); // (bca, cab) -> (cab, cacabac) -> (cacabac, acacbacac) ->
|
||||
fixedPoints(ctx, "cab", p[2]); // ac cab ca = bca, ac bac ca = acb
|
||||
|
||||
double color[3][3] = {{1,0,0},{0,0.7,0},{0,0,1}};
|
||||
|
||||
@@ -341,71 +327,55 @@ void drawBoxes(DrawingContext *ctx)
|
||||
|
||||
void drawBoxes2(DrawingContext *ctx)
|
||||
{
|
||||
/*
|
||||
cairo_set_source_rgb(ctx->cairo, 1, 0.5, 0);
|
||||
drawBoxStd(ctx, "a", 'A');
|
||||
drawBoxStd(ctx, "ca", 'A');
|
||||
drawBoxStd(ctx, "aca", 'A');
|
||||
drawBoxStd(ctx, "caca", 'A');
|
||||
drawBoxStd(ctx, "acaca", 'A');
|
||||
cairo_set_source_rgb(ctx->cairo, 0, 0.5, 1);
|
||||
drawBoxStd(ctx, "acac", 'A');
|
||||
drawBoxStd(ctx, "cac", 'A');
|
||||
drawBoxStd(ctx, "ac", 'A');
|
||||
drawBoxStd(ctx, "c", 'A');
|
||||
drawBoxStd(ctx, "", 'A');
|
||||
*/
|
||||
|
||||
/*
|
||||
cairo_set_source_rgb(ctx->cairo, 0, 0.5, 1);
|
||||
drawBox(ctx, "abc", "cab");
|
||||
// drawBox(ctx, "ba abc ab", "ba cab ab");
|
||||
drawBox(ctx, "baba abc abab", "baba cab abab");
|
||||
drawBox(ctx, "abab abc baba", "abab cab baba");
|
||||
drawBox(ctx, "ab abc ba", "ab cab ba");
|
||||
gsl_matrix *tmp = getTempMatrix(ctx->ws);
|
||||
|
||||
cairo_set_source_rgb(ctx->cairo, 1, 0.5, 0);
|
||||
drawBox(ctx, "b abc b", "b cab b");
|
||||
drawBox(ctx, "bab abc bab", "bab cab bab");
|
||||
drawBox(ctx, "babab abc babab", "babab cab babab");
|
||||
drawBox(ctx, "aba abc aba", "aba cab aba");
|
||||
// drawBox(ctx, "a abc a", "a cab a");
|
||||
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"); // cacabac, cab
|
||||
|
||||
cairo_set_source_rgb(ctx->cairo, 0, 0.5, 1);
|
||||
drawBox(ctx, "bca", "abc");
|
||||
// drawBox(ctx, "cb bca bc", "cb abc bc");
|
||||
drawBox(ctx, "cbcb bca bcbc", "cbcb abc bcbc");
|
||||
drawBox(ctx, "bcbc bca cbcb", "bcbc abc cbcb");
|
||||
drawBox(ctx, "bc bca cb", "bc abc cb");
|
||||
|
||||
cairo_set_source_rgb(ctx->cairo, 1, 0.5, 0);
|
||||
drawBox(ctx, "c bca c", "c abc c");
|
||||
drawBox(ctx, "cbc bca cbc", "cbc abc cbc");
|
||||
drawBox(ctx, "cbcbc bca cbcbc", "cbcbc abc cbcbc");
|
||||
drawBox(ctx, "bcb bca bcb", "bcb abc bcb");
|
||||
// drawBox(ctx, "b bca b", "b abc b");
|
||||
*/
|
||||
|
||||
// cairo_set_source_rgb(ctx->cairo, 1, 0, 0);
|
||||
// drawBoxLines(ctx, "bca", "abc");
|
||||
|
||||
cairo_set_source_rgb(ctx->cairo, 1, 0.5, 0);
|
||||
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");
|
||||
cairo_set_source_rgb(ctx->cairo, 1, 0, 0.5);
|
||||
drawBoxLines(ctx, "cab", "bca");
|
||||
|
||||
cairo_set_source_rgb(ctx->cairo, 0, 0, 0);
|
||||
drawBoxLines(ctx, "abc", "cab");
|
||||
drawBox(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");
|
||||
vector_t w = {0, 1, 0};
|
||||
drawCovector(ctx, w);
|
||||
|
||||
vector_t v[3];
|
||||
point_t p;
|
||||
cairo_set_source_rgb(ctx->cairo, 1, 0, 0);
|
||||
computeRotationMatrix(ctx, tmp, "ac");
|
||||
LOOP(i) LOOP(j) v[i].x[j] = gsl_matrix_get(tmp, j, i);
|
||||
|
||||
for(int k = 0; k < 50; k++) {
|
||||
LOOP(i) w.x[i] = 1.8 * v[2].x[i] + cos(2*k*M_PI/50) * v[0].x[i] + sin(2*k*M_PI/50) * v[1].x[i];
|
||||
p = vectorToPoint(ctx, w);
|
||||
|
||||
if(k == 0)
|
||||
cairo_move_to(ctx->cairo, p.x, p.y);
|
||||
else
|
||||
cairo_line_to(ctx->cairo, p.x, p.y);
|
||||
}
|
||||
|
||||
cairo_set_source_rgb(ctx->cairo, 1, 0, 0);
|
||||
cairo_stroke(ctx->cairo);
|
||||
|
||||
/* vector_t p[3]; */
|
||||
/* fixedPoints(ctx, "cab", p); */
|
||||
/* drawVector(ctx, p[0]); */
|
||||
/* fixedPoints(ctx, "ca cab ac", p); */
|
||||
/* drawVector(ctx, p[0]); */
|
||||
/* fixedPoints(ctx, "caca cab acac", p); */
|
||||
/* drawVector(ctx, p[0]); */
|
||||
/* fixedPoints(ctx, "acac cab caca", p); */
|
||||
/* drawVector(ctx, p[0]); */
|
||||
/* fixedPoints(ctx, "ac cab ca", p); */
|
||||
/* drawVector(ctx, p[0]); */
|
||||
|
||||
releaseTempMatrices(ctx->ws, 1);
|
||||
}
|
||||
|
||||
void drawLimitCurve(DrawingContext *ctx)
|
||||
|
||||
Reference in New Issue
Block a user