# Changeset 151Tweet

Ignore:
Timestamp:
Nov 11, 2003, 11:22:19 AM (19 years ago)
Message:
• libee/triangle.c: + Wrote ee_draw_triangle() and ee_draw_thin_triangle().
• libee/box.c: + Wrote ee_draw_box(), ee_draw_thin_box() and ee_fill_box().
• libee/conic.c: + Wrote ee_fill_ellipse(). + First attempt at ee_draw_thin_ellipse(), to be reworked.
• test/demo.c: + Merged demo_lines() and demo_thin_lines(). + Merged demo_triangles() and demo_outlined_triangles(). + Wrote demo_box(). + Use ee_fill_ellipse() in demo_all().
Location:
libcaca/trunk
Files:
5 edited

Unmodified
Removed
• ## libcaca/trunk/libee/Makefile.am

 r147 math.c \ line.c \ box.c \ conic.c \ triangle.c \
• ## libcaca/trunk/libee/conic.c

 r147 } void ee_draw_ellipse(int xo, int yo, int a, int b, char c) void ee_fill_ellipse(int xo, int yo, int a, int b, char c) { int d2; int d1 = b*b - (a*a*b) + (a*a/4); while( a*a*y - a*a/2 > b*b*(x+1)) { if(d1 < 0) { d1 += b*b*(2*x+1); /* XXX: "Computer Graphics" has + 3 here. */ } else { d1 += b*b*(2*x*1) + a*a*(-2*y+2); ee_draw_line(xo - x, yo - y, xo + x, yo - y, c); ee_draw_line(xo - x, yo + y, xo + x, yo + y, c); y--; } x++; } ee_draw_line(xo - x, yo - y, xo + x, yo - y, c); ee_draw_line(xo - x, yo + y, xo + x, yo + y, c); d2 = b*b*(x+0.5)*(x+0.5) + a*a*(y-1)*(y-1) - a*a*b*b; while(y > 0) { if(d2 < 0) { d2 += b*b*(2*x+2) + a*a*(-2*y+3); x++; } else { d2 += a*a*(-2*y+3); } y--; ee_draw_line(xo - x, yo - y, xo + x, yo - y, c); ee_draw_line(xo - x, yo + y, xo + x, yo + y, c); } } void ee_draw_ellipse(int xo, int yo, int a, int b, char c) { int d2; int x = 0; int y = b; int d1 = b*b - (a*a*b) + (a*a/4); ellipsepoints(xo, yo, x, y, c); y--; ellipsepoints(xo, yo, x, y, c); } } void ee_draw_thin_ellipse(int xo, int yo, int a, int b) { /* FIXME: this is not correct */ int d2; int x = 0; int y = b; int d1 = b*b - (a*a*b) + (a*a/4); ellipsepoints(xo, yo, x, y, '-'); while( a*a*y - a*a/2 > b*b*(x+1)) { if(d1 < 0) { d1 += b*b*(2*x+1); /* XXX: "Computer Graphics" has + 3 here. */ } else { d1 += b*b*(2*x*1) + a*a*(-2*y+2); y--; } x++; ellipsepoints(xo, yo, x, y, '-'); } d2 = b*b*(x+0.5)*(x+0.5) + a*a*(y-1)*(y-1) - a*a*b*b; while(y > 0) { if(d2 < 0) { d2 += b*b*(2*x+2) + a*a*(-2*y+3); x++; } else { d2 += a*a*(-2*y+3); } y--; ellipsepoints(xo, yo, x, y, '|'); } }
• ## libcaca/trunk/libee/ee.h

 r147 void ee_draw_line(int, int, int, int, char); void ee_draw_thin_line(int, int, int, int); void ee_draw_circle(int, int, int, char); void ee_draw_ellipse(int, int, int, int, char); void ee_draw_thin_ellipse(int, int, int, int); void ee_fill_ellipse(int, int, int, int, char); void ee_draw_box(int, int, int, int, char); void ee_draw_thin_box(int, int, int, int); void ee_fill_box(int, int, int, int, char); void ee_draw_triangle(int, int, int, int, int, int, char); void ee_draw_thin_triangle(int, int, int, int, int, int); void ee_fill_triangle(int, int, int, int, int, int, char);
• ## libcaca/trunk/libee/triangle.c

 r147 #include "ee.h" void ee_draw_triangle(int x1, int y1, int x2, int y2, int x3, int y3, char c) { ee_draw_line(x1, y1, x2, y2, c); ee_draw_line(x2, y2, x3, y3, c); ee_draw_line(x3, y3, x1, y1, c); } void ee_draw_thin_triangle(int x1, int y1, int x2, int y2, int x3, int y3) { ee_draw_thin_line(x1, y1, x2, y2); ee_draw_thin_line(x2, y2, x3, y3); ee_draw_thin_line(x3, y3, x1, y1); } void ee_fill_triangle(int x1, int y1, int x2, int y2, int x3, int y3, char c)
• ## libcaca/trunk/test/demo.c

 r147 static void demo_dots(void); static void demo_lines(void); static void demo_thin_lines(void); static void demo_circles(void); static void demo_boxes(void); static void demo_ellipses(void); static void demo_triangles(void); static void demo_outlined_triangles(void); static void demo_sprites(void); int force_clipping = 0; int outline = 0; int thin = 0; struct ee_sprite *sprite = NULL; ee_clear(); demo = demo_lines; thin = 0; break; case '3': ee_clear(); demo = demo_thin_lines; demo = demo_lines; thin = 1; break; case '4': ee_clear(); demo = demo_circles; demo = demo_boxes; outline = 0; break; case '5': ee_clear(); demo = demo_boxes; outline = 1; break; case '6': ee_clear(); demo = demo_ellipses; break; case '6': case '7': ee_clear(); demo = demo_triangles; break; case '7': ee_clear(); demo = demo_outlined_triangles; outline = 0; break; case '8': ee_clear(); demo = demo_triangles; outline = 1; break; case '9': ee_clear(); demo = demo_sprites; ee_putstr(4, 8, "2: lines demo"); ee_putstr(4, 9, "3: thin lines demo"); ee_putstr(4, 10, "4: circles demo"); ee_putstr(4, 11, "5: ellipses demo"); ee_putstr(4, 12, "6: triangles demo"); ee_putstr(4, 13, "7: outlined triangles demo"); ee_putstr(4, 14, "8: sprites demo"); ee_putstr(4, 10, "4: boxes demo"); ee_putstr(4, 11, "5: outlined boxes demo"); ee_putstr(4, 12, "6: ellipses demo"); ee_putstr(4, 13, "7: triangles demo"); ee_putstr(4, 14, "8: outlined triangles demo"); ee_putstr(4, 15, "9: sprites demo"); ee_putstr(4, yo - 2, "q: quit"); } j = 15 + sin(0.03*i) * 8; ee_color(EE_WHITE); for(j = 15 + sin(0.03*i) * 8; j--;) { ee_draw_circle(xo, yo, j, '#'); } ee_fill_ellipse(xo, yo, j, j / 2, '#'); ee_color(EE_YELLOW); ee_draw_circle(xo, yo, 15 + sin(0.03*i) * 8, '#'); ee_draw_ellipse(xo, yo, j, j / 2, '#'); /* Draw the pyramid */ ee_fill_triangle(xo, yo, x2, y2, x1, y1, '%'); ee_color(EE_YELLOW); ee_draw_thin_line(xo, yo, x2, y2); ee_draw_thin_line(x2, y2, x1, y1); ee_draw_thin_line(x1, y1, xo, yo); ee_draw_thin_triangle(xo, yo, x2, y2, x1, y1); ee_color(EE_RED); ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); ee_color(EE_YELLOW); ee_draw_thin_line(x1, y1, x2, y2); ee_draw_thin_line(x2, y2, x3, y3); ee_draw_thin_line(x3, y3, x1, y1); ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); ee_color(EE_BLUE); ee_fill_triangle(xo, yo, x2, y2, x3, y3, '%'); ee_color(EE_YELLOW); ee_draw_thin_line(xo, yo, x2, y2); ee_draw_thin_line(x2, y2, x3, y3); ee_draw_thin_line(x3, y3, xo, yo); ee_draw_thin_triangle(xo, yo, x2, y2, x3, y3); /* Draw a background triangle */ y3 = ee_get_height() - 3; ee_color(EE_BLUE); //    ee_fill_triangle(x1, y1, x2, y2, x3, y3, '.'); ee_color(EE_CYAN); ee_draw_thin_line(x1, y1, x3, y3); ee_draw_thin_line(x2, y2, x1, y1); ee_draw_thin_line(x3, y3, x2, y2); ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); xo = ee_get_width() / 2 + cos(0.027*i) * ee_get_width() / 3; ee_draw_thin_line(x3, y3, xo, yo); /* Draw a sprite behind the pyramid */ /* Draw a sprite on the pyramid */ ee_draw_sprite(xo, yo, sprite); int w = ee_get_width(); int h = ee_get_height(); /* Draw lines */ int x1, y1, x2, y2; if(force_clipping) { x1 = ee_rand(- w, 2 * w); y1 = ee_rand(- h, 2 * h); x2 = ee_rand(- w, 2 * w); y2 = ee_rand(- h, 2 * h); } else { x1 = ee_rand(0, w - 1); y1 = ee_rand(0, h - 1); x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); } ee_color(ee_rand(1, 10)); if(force_clipping) { ee_draw_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#'); } if(thin) ee_draw_thin_line(x1, y1, x2, y2); else { ee_draw_line(ee_rand(0, w - 1), ee_rand(0, h - 1), ee_rand(0, w - 1), ee_rand(0, h - 1), '#'); } ee_refresh(); } static void demo_thin_lines(void) ee_draw_line(x1, y1, x2, y2, '#'); ee_refresh(); } static void demo_boxes(void) { int w = ee_get_width(); int h = ee_get_height(); /* Draw lines */ int x1, y1, x2, y2; if(force_clipping) { x1 = ee_rand(- w, 2 * w); y1 = ee_rand(- h, 2 * h); x2 = ee_rand(- w, 2 * w); y2 = ee_rand(- h, 2 * h); } else { x1 = ee_rand(0, w - 1); y1 = ee_rand(0, h - 1); x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); } ee_color(ee_rand(1, 10)); if(force_clipping) { ee_draw_thin_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), ee_rand(- w, 2 * w), ee_rand(- h, 2 * h)); } else { ee_draw_thin_line(ee_rand(0, w), ee_rand(0, h), ee_rand(0, w), ee_rand(0, h)); } ee_refresh(); } static void demo_circles(void) ee_fill_box(x1, y1, x2, y2, '#'); if(outline) { ee_color(ee_rand(1, 10)); ee_draw_thin_box(x1, y1, x2, y2); } ee_refresh(); } static void demo_ellipses(void) { int w = ee_get_width(); int h = ee_get_height(); /* Draw circles */ int x, y, a, b; if(force_clipping) { x = ee_rand(- w, 2 * w); y = ee_rand(- h, 2 * h); a = ee_rand(0, w); b = ee_rand(0, h); } else { do { x = ee_rand(0, w); y = ee_rand(0, h); a = ee_rand(0, w); b = ee_rand(0, h); } while(x - a < 0 || x + a >= w || y - b < 0 || y + b >= h); } ee_color(ee_rand(1, 10)); ee_fill_ellipse(x, y, a, b, '#'); if(outline) { ee_color(ee_rand(1, 10)); ee_draw_circle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), ee_rand(0, (w + h) / 2), '#'); } else { int x = ee_rand(0, w); int y = ee_rand(0, h); int r = ee_rand(0, (w + h) / 2); if(x - r < 0 || x + r >= w || y - r < 0 || y + r >= h) { demo_circles(); return; } ee_color(ee_rand(1, 10)); ee_draw_circle(x, y, r, '#'); } ee_refresh(); } static void demo_ellipses(void) { int w = ee_get_width(); int h = ee_get_height(); /* Draw circles */ if(force_clipping) { ee_color(ee_rand(1, 10)); ee_draw_ellipse(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), ee_rand(0, w), ee_rand(0, h), '#'); } else { int x = ee_rand(0, w); int y = ee_rand(0, h); int a = ee_rand(0, w); int b = ee_rand(0, h); if(x - a < 0 || x + a >= w || y - b < 0 || y + b >= h) { demo_ellipses(); return; } ee_color(ee_rand(1, 10)); ee_draw_ellipse(x, y, a, b, '#'); ee_draw_thin_ellipse(x, y, a, b); } static void demo_triangles(void) { int w = ee_get_width(); int h = ee_get_height(); /* Draw lines */ ee_color(ee_rand(1, 10)); if(force_clipping) { ee_fill_triangle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#'); } else { ee_fill_triangle(ee_rand(0, w - 1), ee_rand(0, h - 1), ee_rand(0, w - 1), ee_rand(0, h - 1), ee_rand(0, w - 1), ee_rand(0, h - 1), '#'); } ee_refresh(); } static void demo_outlined_triangles(void) { int w = ee_get_width(); int x1, y1, x2, y2, x3, y3; /* Draw lines */ if(force_clipping) { x1 = ee_rand(- w, 2 * w); y1 = ee_rand(- h, 2 * h); x2 = ee_rand(- w, 2 * w); y2 = ee_rand(- h, 2 * h); x3 = ee_rand(- w, 2 * w); y3 = ee_rand(- h, 2 * h); } else { x1 = ee_rand(0, w - 1); y1 = ee_rand(0, h - 1); x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); x3 = ee_rand(0, w - 1); y3 = ee_rand(0, h - 1); } ee_color(ee_rand(1, 10)); if(force_clipping) { x1 = ee_rand(- w, 2 * w); y1 = ee_rand(- h, 2 * h); x2 = ee_rand(- w, 2 * w); y2 = ee_rand(- h, 2 * h); x3 = ee_rand(- w, 2 * w); y3 = ee_rand(- h, 2 * h); } else { x1 = ee_rand(0, w - 1); y1 = ee_rand(0, h - 1); x2 = ee_rand(0, w - 1); y2 = ee_rand(0, h - 1); x3 = ee_rand(0, w - 1); y3 = ee_rand(0, h - 1); } ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); ee_color(ee_rand(1, 10)); ee_draw_thin_line(x1, y1, x2, y2); ee_draw_thin_line(x2, y2, x3, y3); ee_draw_thin_line(x3, y3, x1, y1); if(outline) { ee_color(ee_rand(1, 10)); ee_draw_thin_triangle(x1, y1, x2, y2, x3, y3); } ee_refresh(); } static void demo_pyramid(void) { static int i = 0; int xo, yo, x1, y1, x2, y2, x3, y3; i++; xo = ee_get_width() * 5 / 8; yo = 2; x1 = ee_get_width() / 8 + sin(0.03*i) * 5; y1 = ee_get_height() / 2 + cos(0.03*i) * 5; x2 = ee_get_width() - 10 - cos(0.02*i) * 10; y2 = ee_get_height() - 5 + sin(0.02*i) * 5; x3 = ee_get_width() / 4 - sin(0.02*i) * 5; y3 = ee_get_height() + cos(0.02*i) * 5; ee_clear(); ee_color(EE_GREEN); ee_fill_triangle(xo, yo, x2, y2, x1, y1, '%'); ee_color(EE_YELLOW); ee_draw_thin_line(xo, yo, x2, y2); ee_draw_thin_line(x2, y2, x1, y1); ee_draw_thin_line(x1, y1, xo, yo); ee_color(EE_RED); ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); ee_color(EE_YELLOW); ee_draw_thin_line(x1, y1, x2, y2); ee_draw_thin_line(x2, y2, x3, y3); ee_draw_thin_line(x3, y3, x1, y1); ee_color(EE_BLUE); ee_fill_triangle(xo, yo, x2, y2, x3, y3, '%'); ee_color(EE_YELLOW); ee_draw_thin_line(xo, yo, x2, y2); ee_draw_thin_line(x2, y2, x3, y3); ee_draw_thin_line(x3, y3, xo, yo); ee_refresh(); }
Note: See TracChangeset for help on using the changeset viewer.