/* See steiner.h */ /* Last edited on 2012-07-22 11:34:52 by stolfilocal */ #include #include #include #include #include #include /* STEINER AND NON-STENIER TREES */ void steiner_draw(PSStream *ps); void steiner_draw(PSStream *ps) { Point sites[3]; Point c; double s = 0.35; double r = s * sqrt(3.0)/3.0; int t; for (t=0; t<4; t++) { c = (Point){{((float) t)/2.0 - 0.75, 0.0}}; sites[0] = (Point){{c.c[0] + 0.0 * s, r}}; sites[1] = (Point){{c.c[0] - 0.5 * s, -0.5 * r}}; sites[2] = (Point){{c.c[0] + 0.5 * s, -0.5 * r}}; pswr_set_pen(ps, 0,0,0, 0.15, 0.0, 0.0); if (t == 0) { pswr_segment(ps, sites[0].c[0], sites[0].c[1], c.c[0], c.c[1]); pswr_segment(ps, sites[1].c[0], sites[1].c[1], c.c[0], c.c[1]); pswr_segment(ps, sites[2].c[0], sites[2].c[1], c.c[0], c.c[1]); pswr_set_pen(ps, 0,0,0, 0.15, 1.0, 1.0); pswr_set_fill_color(ps, 0.50, 0.50, 0.50); pswr_dot(ps, c.c[0], c.c[1], 0.5, TRUE, FALSE); } else { int i = t - 1; int j = (i >= 2 ? i-2 : i+1); int k = (i >= 1 ? i-1 : i+2); pswr_segment(ps, sites[i].c[0], sites[i].c[1], sites[j].c[0], sites[j].c[1]); pswr_segment(ps, sites[j].c[0], sites[j].c[1], sites[k].c[0], sites[k].c[1]); } plot_points(ps, 0.5, 3, sites); } } /* MAIN PROGRAM */ void steiner_draw_all(void) { int eps_format; for (eps_format=0; eps_format < 2; eps_format++) { gen_figure("del-steiner", -1.0, +1.0, -0.45, +0.45, steiner_draw, eps_format); } }