13namespace layer1_foundations {
17static void projective_plane_make_affine_point(
int q,
int x1,
int x2,
int x3,
18 double &a,
double &b);
19static int compute_dd(
int dx);
42 f_min_max_set =
FALSE;
72 std::string &file_name,
76 int f_v = (verbose_level >= 1);
80 cout <<
"mp_graphics::init" << endl;
81 cout <<
"mp_graphics::init file_name=" << file_name << endl;
83 mp_graphics::Draw_options = Draw_options;
85 fname_mp.assign(file_name);
86 fname_log.assign(file_name);
87 fname_tikz.assign(file_name);
94 fp_log.open(fname_log);
95 fp_tikz.open(fname_tikz);
100 user[2] = Draw_options->
xin;
101 user[3] = Draw_options->
yin;
107 dev[2] = Draw_options->
xout;
108 dev[3] = Draw_options->
yout;
110 cout <<
"mp_graphics::init done" << endl;
116 int f_v = (verbose_level >= 1);
120 cout <<
"mp_graphics::exit" << endl;
127 ost <<
"mp_graphics::exit "
128 "written file " << fname_mp
129 <<
" of size " << Fio.
file_size(fname_mp) << endl;
130 ost <<
"written file " << fname_log
131 <<
" of size " << Fio.
file_size(fname_log) << endl;
132 ost <<
"written file " << fname_tikz
133 <<
" of size " << Fio.
file_size(fname_tikz) << endl;
139 cout <<
"mp_graphics::exit f_file_open is FALSE" << endl;
143 cout <<
"mp_graphics::exit done" << endl;
149 int verbose_level = 0;
150 int f_v = (verbose_level >= 1);
153 int x, y, dx, dy, ox, oy, Ox, Oy;
154 int xmin, ymin, xmax, ymax;
158 cout <<
"mp_graphics::frame" << endl;
165 cout <<
"mp_graphics::frame f_min_max_set" << endl;
166 cout <<
"out_xmin()=" <<
out_xmin() << endl;
167 cout <<
"out_xmax()=" <<
out_xmax() << endl;
168 cout <<
"out_ymin()=" <<
out_ymin() << endl;
169 cout <<
"out_ymax()=" <<
out_ymax() << endl;
170 cout <<
"x_min=" << x_min << endl;
171 cout <<
"x_max=" << x_max << endl;
172 cout <<
"y_min=" << y_min << endl;
173 cout <<
"y_max=" << y_max << endl;
185 cout <<
"xmin_d=" << xmin_d << endl;
186 cout <<
"xmax_d=" << xmax_d << endl;
187 cout <<
"ymin_d=" << ymin_d << endl;
188 cout <<
"ymax_d=" << ymax_d << endl;
209 ox = (int)(dx * .05);
210 oy = (int)(dy * .05);
211 Ox = (int)(dx * move_out);
212 Oy = (int)(dy * move_out);
288 for (
int i = 0; i < 12; i++) {
289 cout <<
"Px[" << i <<
"]=" << Px[i] <<
" ";
290 cout <<
"Py[" << i <<
"]=" << Py[i] <<
" ";
305 int x, y, dx, dy, ox, oy, Ox, Oy;
306 int xmin, ymin, xmax, ymax;
313 cout <<
"mp_graphics::frame_constant_aspect_ratio:" << endl;
314 cout << xmin <<
"," << xmax <<
"," << ymin <<
"," << ymax << endl;
322 adjust_y = (dx - dy) >> 1;
323 cout <<
"mp_graphics::frame_constant_aspect_ratio "
324 "adjust_y=" << adjust_y << endl;
327 adjust_x = (dy - dx) >> 1;
328 cout <<
"mp_graphics::frame_constant_aspect_ratio "
329 "adjust_x=" << adjust_x << endl;
335 cout <<
"mp_graphics::frame_constant_aspect_ratio after "
336 "adjustment:" << endl;
337 cout << xmin <<
"," << xmax <<
"," << ymin <<
"," << ymax << endl;
341 ox = (int)(dx * .05);
342 oy = (int)(dy * .05);
343 Ox = (int)(dx * move_out);
344 Oy = (int)(dy * move_out);
428 exit(cout, verbose_level - 1);
500 int nb_circles,
int nb_rays,
double x_stretch)
514 dr = r_max / nb_circles;
528 for (i = 1; i <= nb_circles; i++) {
529 circle(Px[0], Py[0], (
int)dx * dr * i * x_stretch);
533 for (i = 0; i < number; i++) {
536 for (i = 0; i < number; i++) {
537 Px[i] = Dx[i] * dx * x_stretch;
538 Py[i] = Dy[i] * dy * x_stretch;
542 for (i = 0; i < number; i++) {
550 double x_min,
double x_max,
551 double y_min,
double y_max,
552 double dx,
double dy,
553 int f_x_axis_at_y_min,
int f_y_axis_at_x_min,
554 int x_mod,
int y_mod,
int x_tick_mod,
int y_tick_mod,
555 double x_labels_offset,
double y_labels_offset,
556 double x_tick_half_width,
double y_tick_half_width,
557 int f_v_lines,
int subdivide_v,
int f_h_lines,
int subdivide_h,
571 int f_v = (verbose_level >= 1);
574 cout <<
"mp_graphics::draw_axes_and_grid" << endl;
575 cout <<
"mp_graphics::draw_axes_and_grid dx=" << dx <<
" dy=" << dy << endl;
576 cout <<
"mp_graphics::draw_axes_and_grid x_min=" << x_min <<
" x_max=" << x_max << endl;
577 cout <<
"mp_graphics::draw_axes_and_grid y_min=" << y_min <<
" y_max=" << y_max << endl;
594 if (f_x_axis_at_y_min) {
600 if (f_y_axis_at_x_min) {
609 Dx[1] = x_max - y_labels_offset;
615 Dy[3] = y_max - x_labels_offset;
618 for (i = 0; i < 4; i++) {
621 cout <<
"mp_graphics::draw_axes_and_grid "
622 "Dx[i]=" << Dx[i] <<
" dx=" << dx <<
" Px[i]=" << Px[i] << endl;
635 for (i = (
int)x_min; i <= (int)x_max; i++) {
636 if ((i % x_tick_mod) && (i != (int)x_min) && (i != (int)x_max)) {
640 Dy[j] = y0 + (-1) * x_tick_half_width;
643 Dy[j] = y0 + 1 * x_tick_half_width;
647 for (i = 0; i < n; i++) {
652 for (i = (
int)x_min; i <= (int)x_max; i++) {
653 if ((i % x_tick_mod) && (i != (int)x_min) && (i != (int)x_max)) {
663 for (i = (
int)y_min; i <= (int)y_max; i++) {
664 if ((i % y_tick_mod) && (i != (int)y_min) && (i != (int)y_max)) {
667 Dx[j] = x0 + (-1) * y_tick_half_width;
670 Dx[j] = x0 + 1 * y_tick_half_width;
675 for (i = 0; i < n; i++) {
680 for (i = (
int)y_min; i <= (int)y_max; i++) {
681 if ((i % y_tick_mod) && (i != (int)y_min) && (i != (int)y_max)) {
690 for (i = (
int)x_min; i <= (int)x_max; i++) {
691 if ((i % x_tick_mod) && (i != (int)x_min) && (i != (int)x_max)) {
695 Dy[j] = y_min + x_labels_offset;
699 for (i = 0; i < n; i++) {
704 for (i = (
int)x_min; i <= (int)x_max; i++) {
705 if ((i % x_tick_mod) && (i != (int)x_min) && (i != (int)x_max)) {
709 sprintf(str,
"%d", i);
717 for (i = (
int)y_min; i <= (int)y_max; i++) {
718 if ((i % y_tick_mod) && (i != (int)y_min) && (i != (int)y_max)) {
722 Dx[j] = x_min + y_labels_offset;
726 for (i = 0; i < n; i++) {
731 for (i = (
int)y_min; i <= (int)y_max; i++) {
732 if ((i % y_tick_mod) && (i != (int)y_min) && (i != (int)y_max)) {
736 sprintf(str,
"%d", i);
746 double ddx = (double) 1 / subdivide_v;
750 for (i = (
int)x_min; i <= (int)x_max; i++) {
751 if ((i % x_mod) && (i != (int)x_min) && (i != (int)x_max)) {
754 for (j = 0; j <= subdivide_v; j++) {
755 if (j && i == (
int)x_max) {
758 Dx[h] = i + (double) j * ddx;
761 Dx[h] = i + (double) j * ddx;
767 for (i = 0; i < n; i++) {
772 for (i = (
int)x_min; i <= (int)x_max; i++) {
773 if ((i % x_mod) && (i != (int)x_min) && (i != (int)x_max)) {
776 for (j = 0; j <= subdivide_v; j++) {
777 if (j && i == (
int)x_max) {
790 double ddy = (double) 1 / subdivide_h;
794 for (i = (
int)y_min; i <= (int)y_max; i++) {
795 if ((i % y_mod) && (i != (int)y_min) && (i != (int)y_max)) {
798 for (j = 0; j <= subdivide_h; j++) {
799 if (j && i == (
int)y_max) {
802 Dy[h] = i + (double) j * ddy;
805 Dy[h] = i + (double) j * ddy;
811 for (i = 0; i < n; i++) {
816 for (i = (
int)y_min; i <= (int)y_max; i++) {
817 if ((i % y_mod) && (i != (int)y_min) && (i != (int)y_max)) {
820 for (j = 0; j <= subdivide_h; j++) {
821 if (j && i == (
int)y_max) {
841 double *Dx,
double *Dy,
double dx,
double dy)
851 for (i = 0; i < N; i++) {
852 if (f_DNE[i] ==
FALSE) {
860 if (i > 2 && f_DNE[i - 1] ==
FALSE && f_DNE[i - 2] ==
FALSE) {
861 Dx1 = Px[i - 1] - Px[i - 2];
862 Dy1 = Py[i - 1] - Py[i - 2];
863 L1 = Dx1 * Dx1 + Dy1 * Dy1;
864 Dx2 = Px[i] - Px[i - 1];
865 Dy2 = Py[i] - Py[i - 1];
866 L2 = Dx2 * Dx2 + Dy2 * Dy2;
877 for (i = 0; i < N; i += 5) {
878 for (j = 0; j < 6; j++) {
879 if (i + j == N || f_DNE[i + j]) {
885 polygon6(Px, Py, i + 0, i + 1, i + 2, i + 3, i + 4, i + 5);
888 polygon5(Px, Py, i + 0, i + 1, i + 2, i + 3, i + 4);
891 polygon4(Px, Py, i + 0, i + 1, i + 2, i + 3);
894 polygon3(Px, Py, i + 0, i + 1, i + 2);
901 for (i = 0; i < N - 1; i++) {
903 if (f_DNE[i] || f_DNE[i + 1]) {
930 int x0,
int y0,
int x1,
int y1)
939 for (i = 0; i < 2; i++) {
961 int x0,
int y0,
int x1,
int y1,
962 int x2,
int y2,
int x3,
int y3)
971 for (i = 0; i < 4; i++) {
1001 int x0,
int y0,
int x1,
int y1,
1002 int x2,
int y2,
int x3,
int y3,
1012 for (i = 0; i < 5; i++) {
1051 for (i = 0; i < n; i++) {
1067 int i1,
int i2,
int i3)
1077 int i1,
int i2,
int i3,
int i4)
1088 int i1,
int i2,
int i3,
int i4,
int i5)
1101 int i1,
int i2,
int i3,
int i4,
int i5,
int i6)
1114 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1129 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1145 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1146 int i7,
int i8,
int i9)
1162 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1163 int i7,
int i8,
int i9,
int i10)
1180 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1181 int i7,
int i8,
int i9,
int i10,
int i11)
1209 for (i = 0; i < n; i++) {
1226 int i1,
int i2,
int i3)
1236 int i1,
int i2,
int i3,
int i4)
1247 int i1,
int i2,
int i3,
int i4,
int i5)
1259 int i1,
int i2,
int i3,
int i4,
int i5,
int i6)
1272 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
int i7)
1292 int x0,
int y0,
int x1,
int y1,
1293 int x2,
int y2,
int x3,
int y3)
1302 for (i = 0; i < 4; i++) {
1332 int x0,
int y0,
int x1,
int y1,
int x2,
int y2,
1333 int x3,
int y3,
int x4,
int y4)
1342 for (i = 0; i < 5; i++) {
1376 int i1,
int i2,
int i3)
1386 int i1,
int i2,
int i3,
int i4)
1397 int i1,
int i2,
int i3,
int i4,
int i5)
1409 int i1,
int i2,
int i3,
int i4,
int i5,
int i6)
1422 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1437 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1453 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1454 int i7,
int i8,
int i9)
1470 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1471 int i7,
int i8,
int i9,
int i10)
1488 int i1,
int i2,
int i3,
int i4,
int i5,
int i6,
1489 int i7,
int i8,
int i9,
int i10,
int i11)
1514 X[2] = (Px[i1] + Px[i2]) >> 1;
1517 Y[2] = (Py[i1] + Py[i2]) >> 1;
1536 const char *alignment,
const char *txt)
1543 X[2] = (Px[i1] + Px[i2]) >> 1;
1546 Y[2] = (Py[i1] + Py[i2]) >> 1;
1566 int x,
int y,
const char *alignment,
const char *p)
1587 const char *alignment,
const char *p)
1595 const char *alignment,
const char *p)
1601 int xoffset,
int yoffset,
1602 const char *alignment,
const char *p)
1604 int h_align = 1, v_align = 1;
1610 l = strlen(alignment);
1611 for (i = 0; i < l; i++) {
1622 cout <<
"mp_graphics::aligned_text: "
1623 "unknown alignment character " << c << endl;
1630 text(x + xoffset, y + yoffset, p);
1641 mp_graphics::txt_halign = txt_halign;
1642 mp_graphics::txt_valign = txt_valign;
1648 mp_graphics::line_dashing = line_dashing;
1654 mp_graphics::line_beg_style = line_beg_style;
1655 mp_graphics::line_end_style = line_end_style;
1661 mp_graphics::line_thickness = line_thickness;
1668 mp_graphics::line_color = line_color;
1674 mp_graphics::fill_interior = fill_interior;
1680 mp_graphics::fill_color = fill_color;
1686 mp_graphics::fill_outline = fill_outline;
1692 mp_graphics::fill_shape = fill_shape;
1698 mp_graphics::fill_nofill = fill_nofill;
1704 mp_graphics::txt_boxed = txt_boxed;
1710 mp_graphics::txt_overwrite = txt_overwrite;
1716 mp_graphics::txt_rotate = txt_rotate;
1725 if (!f_min_max_set) {
1735 f_min_max_set =
TRUE;
1746 f_min_max_set =
FALSE;
1811 if (rad <= 0) rad = 1;
1835void mp_graphics::polygon_or_bezier_idx(
int *Px,
int *Py,
int *Idx,
int n,
1836 const char *symbol,
int f_cycle)
1838 polygon_or_bezier_idx_mp(Px, Py, Idx, n, symbol, f_cycle);
1839 polygon_or_bezier_idx_tikz(Px, Py, Idx, n, symbol, f_cycle);
1858 const char *symbol,
int f_cycle)
1872 fp_log <<
"% file: " << fname_log << endl;
1873 fp_log <<
"% created by Orbiter graphics interface" << endl;
1874 fp_log <<
"% creation date: " << str_date << endl << endl;
1875 fp_log <<
"DeviceCoordinates " << dev[0] <<
" " << dev[1] <<
" " << dev[2] <<
" " << dev[3] << endl;
1876 fp_log <<
"UserCoordinates " << user[0] <<
" " << user[1] <<
" " << user[2] <<
" " << user[3] << endl;
1882 fp_log <<
"END_OF_FILE" << endl << endl;
1887 fp_log <<
"Comment " << p << endl;
1892 fp_log <<
"st_alignment " << txt_halign <<
", " << txt_valign << endl;
1897 fp_log <<
"sl_udsty " << line_dashing << endl;
1902 fp_log <<
"sl_ends " << line_beg_style <<
", " << line_end_style << endl;
1907 fp_log <<
"sl_thickness " << line_thickness << endl;
1912 fp_log <<
"sl_color " << line_color << endl;
1917 fp_log <<
"sf_interior " << fill_interior << endl;
1922 fp_log <<
"sf_color " << fill_color << endl;
1927 fp_log <<
"sf_shape " << fill_shape << endl;
1932 fp_log <<
"sf_outline " << fill_outline << endl;
1937 fp_log <<
"sf_nofill " << fill_nofill << endl;
1942 fp_log <<
"st_boxed " << txt_boxed << endl;
1947 fp_log <<
"st_overwrite " << txt_overwrite << endl;
1952 fp_log <<
"st_rotate " << txt_rotate << endl;
1959 fp_log <<
"Bezier " << n;
1960 for (i = 0; i < n; i++) {
1961 fp_log <<
" " << Px[Idx[i]] <<
" " << Py[Idx[i]];
1970 fp_log <<
"Polygon " << n;
1971 for (i = 0; i < n; i++) {
1972 fp_log <<
" " << Px[i] <<
" " << Py[i];
1981 fp_log <<
"Polygon " << n;
1982 for (i = 0; i < n; i++) {
1983 fp_log <<
" " << Px[Idx[i]] <<
" " << Py[Idx[i]];
1990 fp_log <<
"Text " << x1 <<
", " << y1 <<
", \"" << p <<
"\"" << endl;
1995 fp_log <<
"Circle " << x1 <<
", " << y1 <<
", " << rad << endl;
2006 fp_mp <<
"% file: " << fname_mp << endl;
2007 fp_mp <<
"% created by Orbiter metapost interface" << endl;
2008 fp_mp <<
"% creation date: " << str_date << endl << endl;
2009 fp_mp <<
"input boxes" << endl << endl;
2011 fp_mp <<
"verbatimtex" << endl;
2012 fp_mp <<
"\\documentclass[10pt]{article}" << endl;
2013 fp_mp <<
"\\usepackage[noBBpl]{mathpazo}" << endl;
2014 fp_mp <<
"\\usepackage{amsmath}" << endl;
2015 fp_mp <<
"\\usepackage{amssymb}" << endl;
2016 fp_mp <<
"\\begin{document}" << endl;
2017 fp_mp <<
"\\scriptsize" << endl;
2018 fp_mp <<
"etex;" << endl;
2023 fp_mp <<
"end" << endl << endl;
2032 d = (double) factor_1000 * 0.001 * 0.1;
2036 sprintf(str,
"%lf", d);
2038 for (i = 0; i < l; i++) {
2042 fp_mp <<
"u=" << str <<
"mm;\n";
2043 fp_mp <<
"beginfig(1);" << endl;
2044 fp_mp <<
"path p[];" << endl;
2049 fp_mp <<
"endfig;" << endl << endl;
2054 fp_mp <<
"% " << p << endl;
2065 fp_mp <<
"boxit.l" << lab <<
"(btex " << p <<
" etex);" << endl;
2066 fp_mp << lab <<
".c=";
2069 if (txt_overwrite) {
2070 fp_mp <<
"unfill bpath " << lab <<
";" << endl;
2072 fp_mp <<
"drawboxed(" << lab <<
");" << endl;
2076 fp_mp <<
"label" << align <<
"(btex " << p <<
" etex";
2078 fp_mp <<
" rotated " << txt_rotate;
2082 fp_mp <<
");" << endl;
2088 int X[10], Y[10], i;
2100 fp_mp <<
"path pp;" << endl;
2103 for (i = 0; i < 5; i++) {
2109 fp_mp <<
" .. cycle;" << endl;
2110 if (fill_interior > 0) {
2111 fp_mp <<
"fill pp withcolor ";
2112 if (fill_interior > 99) {
2116 fp_mp <<
"." << fill_interior <<
" ";
2119 if (fill_color == 1)
2123 fp_mp <<
";" << endl;
2128 fp_mp <<
" dashed evenly";
2129 if (line_dashing != 100) {
2130 fp_mp <<
" scaled " << (double) line_dashing / 100.;
2133 fp_mp <<
";" << endl;
2138 int idx,
const char *text)
2140 fp_mp <<
"circleit.l" << idx <<
"(btex " <<
text <<
" etex);" << endl;
2141 fp_mp <<
"l" << idx <<
".c = ";
2144 fp_mp <<
"unfill bpath l" << idx <<
";" << endl;
2145 fp_mp <<
"drawboxed(l" << idx <<
");" << endl;
2149 int *Idx,
int n,
int f_cycle)
2154 if (line_end_style == 1)
2155 fp_mp <<
"drawarrow ";
2158 for (i = 0; i < n; i++) {
2169 if (((i + 1) % 30) == 0)
2173 fp_mp <<
" " <<
"--" <<
" cycle ";
2177 fp_mp <<
" dashed evenly";
2178 if (line_dashing != 100) {
2179 fp_mp <<
" scaled " << (double) line_dashing / 100.;
2182 fp_mp <<
";" << endl;
2186 int *Idx,
int n,
int f_cycle)
2191 if (line_end_style == 1)
2192 fp_mp <<
"drawarrow ";
2195 for (i = 0; i < n; i++) {
2206 if (((i + 1) % 30) == 0)
2210 fp_mp <<
" " <<
".." <<
" cycle ";
2214 fp_mp <<
" dashed evenly";
2215 if (line_dashing != 100) {
2216 fp_mp <<
" scaled " << (double) line_dashing / 100.;
2219 fp_mp <<
";" << endl;
2223 int *Idx,
int n,
const char *symbol,
int f_cycle)
2227 fp_mp <<
"fill buildcycle(";
2229 for (i = 0; i < n; i++) {
2239 if (((i + 1) % 30) == 0)
2243 fp_mp <<
" " << symbol <<
" cycle ";
2248 fp_mp <<
" withcolor ";
2249 fp_mp << ((double)fill_interior / (
double) 100);
2250 if (fill_color == 0) {
2251 fp_mp <<
" white;" << endl;
2253 else if (fill_color == 1) {
2254 fp_mp <<
" black;" << endl;
2296 if (txt_halign == 2) {
2299 if (txt_valign == 2)
2300 strcpy(align,
".llft");
2301 else if (txt_valign == 1)
2302 strcpy(align,
".lft");
2303 else if (txt_valign == 0)
2304 strcpy(align,
".ulft");
2306 else if (txt_halign == 1) {
2307 if (txt_valign == 2)
2308 strcpy(align,
".bot");
2309 else if (txt_valign == 1)
2311 else if (txt_valign == 0)
2312 strcpy(align,
".top");
2314 else if (txt_halign == 0) {
2315 if (txt_valign == 2)
2316 strcpy(align,
".lrt");
2317 else if (txt_valign == 1)
2318 strcpy(align,
".rt");
2319 else if (txt_valign == 0)
2320 strcpy(align,
".urt");
2328 d = line_thickness * 0.01;
2329 fp_mp <<
"pickup pencircle scaled " << d <<
"pt;" << endl;
2344 fp_tikz <<
"% file: " << fname_tikz << endl;
2345 fp_tikz <<
"% created by Orbiter tikz interface" << endl;
2347 fp_tikz <<
"% creation date: " << str_date << endl;
2351 fp_tikz <<
"% DeviceCoordinates " << dev[0] <<
" " << dev[1]
2352 <<
" " << dev[2] <<
" " << dev[3] << endl;
2353 fp_tikz <<
"% UserCoordinates " << user[0] <<
" " << user[1]
2354 <<
" " << user[2] <<
" " << user[3] << endl;
2357 fp_tikz <<
"\\documentclass[12pt]{article}" << endl;
2358 fp_tikz <<
"\\usepackage{amsmath, amssymb, amsthm}" << endl;
2359 fp_tikz <<
"\\usepackage{tikz} " << endl;
2361 fp_tikz <<
"\\usepackage{rotating} " << endl;
2363 fp_tikz <<
"%\\usepackage{anysize}" << endl;
2367 fp_tikz <<
"\\paperheight=" << (double) Draw_options->
paperheight * 0.1 <<
"in" << endl;
2370 fp_tikz <<
"\\paperwidth=" << (double) Draw_options->
paperwidth * 0.1 <<
"in" << endl;
2373 fp_tikz <<
"\\begin{document}" << endl;
2374 fp_tikz <<
"%\\bibliographystyle{plain}" << endl;
2375 fp_tikz <<
"\\pagestyle{empty}" << endl;
2379 fp_tikz <<
"\\begin{sideways}" << endl;
2381 fp_tikz <<
"\\begin{tikzpicture}[scale=" << Draw_options->
scale
2382 <<
",line width = " << Draw_options->
line_width <<
"pt]" << endl;
2388 fp_tikz <<
"\\end{tikzpicture}" << endl;
2390 fp_tikz <<
"\\end{sideways}" << endl;
2393 fp_tikz <<
"\\end{document}" << endl;
2399 fp_tikz <<
"% " << p << endl;
2405 if (txt_overwrite) {
2406 fp_tikz <<
"\\draw ";
2408 fp_tikz <<
" node[fill=white] {";
2410 fp_tikz <<
"};" << endl;
2413 fp_tikz <<
"\\draw ";
2415 fp_tikz <<
" node{";
2417 fp_tikz <<
"};" << endl;
2425 if (fill_interior > 0) {
2426 fp_tikz <<
"\\filldraw[color=";
2430 fp_tikz <<
" circle [radius = ";
2432 fp_tikz <<
"cm];" << endl;
2435 fp_tikz <<
"\\draw ";
2437 fp_tikz <<
" circle [radius = ";
2439 fp_tikz <<
"cm];" << endl;
2445 int idx,
int rad,
const char *text)
2451 fp_tikz <<
"\\draw ";
2453 fp_tikz <<
" circle [fill=white,radius = ";
2455 fp_tikz <<
"cm];" << endl;
2457 fp_tikz <<
"\\draw ";
2459 fp_tikz <<
" node{" <<
text;
2461 fp_tikz <<
"};" << endl;
2467 int *Idx,
int n,
int f_cycle)
2469 int f_need_comma =
FALSE;
2470 int verbose_level = 0;
2471 int f_v = (verbose_level >= 1);
2474 fp_tikz <<
"\\draw [";
2475 if (line_end_style == 1 && line_beg_style == 0) {
2477 f_need_comma =
TRUE;
2479 else if (line_end_style == 0 && line_beg_style == 1) {
2481 f_need_comma =
TRUE;
2483 else if (line_end_style == 1 && line_beg_style == 0) {
2485 f_need_comma =
TRUE;
2487 if (line_thickness != 100) {
2491 fp_tikz <<
"line width=" << ((double)line_thickness * 0.01) <<
"mm";
2492 f_need_comma =
TRUE;
2494 if (line_color != 1) {
2498 fp_tikz <<
"color=";
2500 f_need_comma =
TRUE;
2504 for (i = 0; i < n; i++) {
2508 cout <<
"mp_graphics::polygon_idx_tikz x=" << x <<
" y=" << y << endl;
2513 cout <<
"mp_graphics::polygon_idx_tikz x'=" << x <<
" y'=" << y << endl;
2521 fp_tikz <<
";" << endl;
2525 int *Idx,
int n,
int f_cycle)
2527 int f_need_comma =
FALSE;
2530 fp_tikz <<
"\\draw [";
2531 if (line_end_style == 1 && line_beg_style == 0) {
2533 f_need_comma =
TRUE;
2535 else if (line_end_style == 0 && line_beg_style == 1) {
2537 f_need_comma =
TRUE;
2539 else if (line_end_style == 1 && line_beg_style == 0) {
2541 f_need_comma =
TRUE;
2543 if (line_thickness != 100) {
2547 fp_tikz <<
"line width=" << ((double)line_thickness * 0.01) <<
"mm";
2548 f_need_comma =
TRUE;
2550 if (line_color != 1) {
2554 fp_tikz <<
"color=";
2556 f_need_comma =
TRUE;
2560 for (i = 0; i < n; i++) {
2571 fp_tikz <<
" .. controls ";
2573 else if (i == n - 1) {
2582 fp_tikz <<
";" << endl;
2589 else if (color == 1)
2591 else if (color == 2)
2593 else if (color == 3)
2595 else if (color == 4)
2597 else if (color == 5)
2599 else if (color == 6)
2601 else if (color == 7)
2603 else if (color == 8)
2605 else if (color == 9)
2607 else if (color == 10)
2609 else if (color == 11)
2611 else if (color == 12)
2613 else if (color == 13)
2615 else if (color == 14)
2617 else if (color == 15)
2619 else if (color == 16)
2621 else if (color == 17)
2623 else if (color == 18)
2625 else if (color == 19)
2627 else if (color == 20)
2628 fp <<
"green!50!red";
2629 else if (color == 21)
2630 fp <<
"violet!50!red";
2631 else if (color == 22)
2632 fp <<
"cyan!50!red";
2633 else if (color == 23)
2634 fp <<
"green!50!blue";
2635 else if (color == 24)
2636 fp <<
"brown!50!red";
2637 else if (color == 25)
2638 fp <<
"purple!50!red";
2640 cout <<
"mp_graphics::color_tikz color = " << color
2641 <<
", we don't have a color for this" << endl;
2651 int *Idx,
int n,
const char *symbol,
int f_cycle)
2656 fp <<
"\\fill [color=";
2660 if (fill_color == 0)
2662 else if (fill_color == 1)
2664 else if (fill_color == 2)
2666 else if (fill_color == 3)
2670 if (fill_interior < 100) {
2671 fp <<
"!" << fill_interior;
2673 f_need_comma =
TRUE;
2674 if (line_end_style == 1 && line_beg_style == 0) {
2680 else if (line_end_style == 0 && line_beg_style == 1) {
2686 else if (line_end_style == 1 && line_beg_style == 0) {
2692 if (line_thickness != 100) {
2696 fp <<
"line width=" << ((double)line_thickness * 0.01) <<
"mm";
2699 for (i = 0; i < n; i++) {
2728 double dx, dy, x2, y2, f;
2730 dx = (double) x / 30000;
2731 dy = (double) y / 30000;
2732 f = 1. / sqrt(3. * 3. + dx * dx + dy * dy);
2736 if (
ABS(x2) < 0.0001) {
2744 if (
ABS(y2) < 0.0001) {
2761 if (
ABS(d) < 0.0001) {
2775 if (
ABS(d) < 0.0001) {
2786 int dim,
int x0,
int y0,
int z0,
int x1,
int y1,
int z1)
2789 idx0 = x0 * 9 + y0 * 3 + z0;
2790 idx1 = x1 * 9 + y1 * 3 + z1;
2795 int p1,
int p2,
int p3,
int p4,
2796 const char *align,
int a)
2800 sprintf(str,
"%d", a);
2801 text_4pts(Px, Py, p1, p2, p3, p4, align, str);
2805 int p1,
int p2,
int p3,
int p4,
2806 const char *align,
const char *str)
2808 int x = Px[p1] + Px[p2] + Px[p3] + Px[p4];
2809 int y = Py[p1] + Py[p2] + Py[p3] + Py[p4];
2817 int dx,
int dy,
int nb_V,
long int *Edges,
int nb_E,
int radius,
2820 int f_v = (verbose_level >= 1);
2823 cout <<
"mp_graphics::draw_graph nb_V=" << nb_V <<
" nb_E=" << nb_E << endl;
2829 double phi =
M_PI * 2. / nb_V;
2839 cout <<
"mp_graphics::draw_graph edges=";
2847 X =
new double [nb_V];
2848 Y =
new double [nb_V];
2849 for (i = 0; i < nb_V; i++) {
2850 X[i] = cos(i * phi) * w;
2851 Y[i] = sin(i * phi) * h;
2853 for (i = 0; i < nb_E; i++) {
2855 Combi.
k2ij(e, u, v, nb_V);
2856 Px[0] = x + (int) X[u];
2857 Py[0] = y + (int) Y[u];
2858 Px[1] = x + (int) X[v];
2859 Py[1] = y + (int) Y[v];
2862 for (i = 0; i < nb_V; i++) {
2863 Px[0] = x + (int) X[i];
2864 Py[0] = y + (int) Y[i];
2870 cout <<
"mp_graphics::draw_graph done" << endl;
2876 int dx,
int dy,
int nb_V,
long int *Edges,
int nb_E,
2877 int distinguished_edge,
int verbose_level)
2879 int f_v = (verbose_level >= 1);
2884 double phi =
M_PI * 2. / nb_V;
2887 int rad = (int)(dx * .05);
2891 cout <<
"mp_graphics::draw_graph_with_distinguished_edge "
2892 "nb_V=" << nb_V << endl;
2894 X =
new double [nb_V];
2895 Y =
new double [nb_V];
2896 for (i = 0; i < nb_V; i++) {
2897 X[i] = cos(i * phi) * w;
2898 Y[i] = sin(i * phi) * h;
2903 for (i = 0; i < nb_E; i++) {
2905 Combi.
k2ij(e, u, v, nb_V);
2906 Px[0] = x + (int) X[u];
2907 Py[0] = y + (int) Y[u];
2908 Px[1] = x + (int) X[v];
2909 Py[1] = y + (int) Y[v];
2910 if (distinguished_edge == i) {
2914 if (distinguished_edge == i) {
2918 for (i = 0; i < nb_V; i++) {
2919 Px[0] = x + (int) X[i];
2920 Py[0] = y + (int) Y[i];
2928 int dx,
int dy,
int nb_V,
int *Edges,
int nb_E,
int nb_circles)
2937 int rad = (int)(dx * .05);
2941 cout <<
"mp_graphics::draw_graph_on_multiple_circles "
2942 "nb_V=" << nb_V << endl;
2943 nb_per_circle = nb_V / nb_circles;
2944 cout <<
"nb_per_circle = " << nb_per_circle << endl;
2945 phi =
M_PI * 2. / nb_per_circle;
2946 X =
new double [nb_V];
2947 Y =
new double [nb_V];
2948 for (j = 0; j < nb_circles; j++) {
2949 for (i = 0; i < nb_per_circle; i++) {
2950 X[j * nb_per_circle + i] = cos(i * phi) * w;
2951 Y[j * nb_per_circle + i] = sin(i * phi) * h;
2956 for (i = 0; i < nb_E; i++) {
2958 Combi.
k2ij(e, u, v, nb_V);
2959 Px[0] = x + (int) X[u];
2960 Py[0] = y + (int) Y[u];
2961 Px[1] = x + (int) X[v];
2962 Py[1] = y + (int) Y[v];
2965 for (i = 0; i < nb_V; i++) {
2966 Px[0] = x + (int) X[i];
2967 Py[0] = y + (int) Y[i];
2975 int x,
int y,
int dx,
int dy,
int rad,
int nb_V,
2976 int *Edges,
int nb_E,
int *coords_2D,
int *Base,
2977 int f_point_labels,
int point_label_offset,
int f_directed)
2987 cout <<
"mp_graphics::draw_graph_on_2D_grid "
2988 "nb_V=" << nb_V << endl;
2989 X =
new double [nb_V];
2990 Y =
new double [nb_V];
2991 for (i = 0; i < nb_V; i++) {
2992 u = coords_2D[2 * i + 0];
2993 v = coords_2D[2 * i + 1];
2994 X[i] = u * Base[0] + v * Base[2];
2995 Y[i] = u * Base[1] + v * Base[3];
3001 for (i = 0; i < nb_E; i++) {
3002 u = Edges[2 * i + 0];
3003 v = Edges[2 * i + 1];
3005 Px[0] = x + (int) X[u];
3006 Py[0] = y + (int) Y[u];
3007 Px[1] = x + (int) X[v];
3008 Py[1] = y + (int) Y[v];
3011 for (i = 0; i < nb_V; i++) {
3012 Px[0] = x + (int) X[i];
3013 Py[0] = y + (int) Y[i];
3017 if (f_point_labels) {
3020 for (i = 0; i < nb_V; i++) {
3021 sprintf(str,
"%d", i+ point_label_offset);
3022 Px[0] = x + (int) X[i];
3023 Py[0] = y + (int) Y[i];
3035 int dx,
int dy,
int nb_V,
long int *Edges,
int nb_E,
3039 int f_v = (verbose_level >= 1);
3043 int i, a, a2, swap, u, v;
3044 double phi =
M_PI * 2. / nb_V;
3052 cout <<
"mp_graphics::draw_tournament nb_V=" << nb_V << endl;
3054 X =
new double [nb_V];
3055 Y =
new double [nb_V];
3056 for (i = 0; i < nb_V; i++) {
3057 X[i] = cos(i * phi) * w;
3058 Y[i] = sin(i * phi) * h;
3062 for (i = 0; i < nb_E; i++) {
3069 Combi.
k2ij(a2, u, v, nb_V);
3073 Px[0] = x + (int) X[u];
3074 Py[0] = y + (int) Y[u];
3075 Px[1] = x + (int) X[v];
3076 Py[1] = y + (int) Y[v];
3078 Px[2] = (3 * Px[0] + Px[1]) >> 2;
3079 Py[2] = (3 * Py[0] + Py[1]) >> 2;
3084 Px[2] = (Px[0] + 3 * Px[1]) >> 2;
3085 Py[2] = (Py[0] + 3 * Py[1]) >> 2;
3093 for (i = 0; i < nb_V; i++) {
3094 Px[0] = x + (int) X[i];
3095 Py[0] = y + (int) Y[i];
3103 int f_partition,
int nb_row_parts,
int *row_part_first,
3104 int nb_col_parts,
int *col_part_first,
3105 int f_row_grid,
int f_col_grid,
3107 int *M,
int m,
int n,
3108 int f_has_labels,
int *labels)
3112 int i, j, ii, jj, ij, a, cnt, mn, mtn, mtn1;
3124 cout <<
"draw_it2" << endl;
3125 cout <<
"dx=" << F.
dx << endl;
3126 cout <<
"dy=" << F.
dy << endl;
3130 sprintf(str,
"box outline");
3145 sprintf(str,
"row partition");
3147 for (i = 0; i < nb_row_parts + 1; i++) {
3148 sprintf(str,
"part_%d", i);
3150 ii = row_part_first[i];
3154 sprintf(str,
"column partition");
3156 for (j = 0; j < nb_col_parts + 1; j++) {
3157 sprintf(str,
"part_%d", j);
3159 jj = col_part_first[j];
3174 for (i = 0; i < m; i++) {
3175 sprintf(str,
"row_%d", i);
3177 sprintf(str + strlen(str),
" label %d", labels[i]);
3182 10 * i + indent, 10 * j + indent,
3183 10 * (i + 1) - indent, 10 * j + indent,
3184 10 * (i + 1) - indent, 10 * n - indent,
3185 10 * i + indent, 10 * n - indent,
3186 10 * i + indent, 10 * j + indent);
3191 for (j = 0; j < n; j++) {
3192 sprintf(str,
"col_%d", j);
3194 sprintf(str + strlen(str),
" label %d", labels[j]);
3199 10 * i + indent, 10 * j + indent,
3200 10 * m - indent, 10 * j + indent,
3201 10 * m - indent, 10 * (j + 1) - indent,
3202 10 * i + indent, 10 * (j + 1) - indent,
3203 10 * i + indent, 10 * j + indent);
3208 for (i = 0; i < m; i++) {
3209 sprintf(str,
"%d", labels[i]);
3212 for (j = 0; j < n; j++) {
3213 sprintf(str,
"%d", labels[m + j] - m);
3229 for (i = 0; i < m; i++) {
3231 if (i && (i % 1000) == 0) {
3232 cout <<
"draw_it2 " << i <<
" / " << m << endl;
3235 for (j = 0; j < n; j++) {
3238 if ((ij % mtn1) == 0) {
3239 cout <<
"draw_bitmatrix2 " << ij <<
" / " << mtn << endl;
3245 a = Bitmatrix->
s_ij(i, j);
3261 sprintf(str,
"%d_%d", i, j);
3273 10 * i + 1, 10 * j + 1,
3274 10 * (i + 1) - 1, 10 * j + 1,
3275 10 * (i + 1) - 1, 10 * (j + 1) - 1,
3276 10 * i + 1, 10 * (j + 1) - 1);
3279 10 * i + indent, 10 * j + indent,
3280 10 * (i + 1) - indent, 10 * j + indent,
3281 10 * (i + 1) - indent, 10 * (j + 1) - indent,
3282 10 * i + indent, 10 * (j + 1) - indent,
3283 10 * i + indent, 10 * j + indent);
3292 cout <<
"mp_graphics::draw_bitmatrix2 "
3293 "# of non-zero coefficients = " << cnt << endl;
3299 int *outline_value,
int *outline_number,
int outline_sz,
3300 int min_value,
int max_value,
int offset_x,
int f_switch_x,
3301 int f_title,
const char *title,
3302 const char *label_x,
3303 int f_circle,
int circle_at,
int circle_rad,
3304 int f_mu,
int f_sigma,
int nb_standard_deviations,
3305 int f_v_grid,
int v_grid,
int f_h_grid,
int h_grid)
3308 int Px[1000], Py[1000];
3314 int min_x, max_x, min_y, max_y;
3322 if (outline_value[0] == 0) {
3324 mini_x = outline_number[0];
3331 max_x = outline_number[outline_sz - 1];
3337 for (i = outline_sz - 1; i >= i0; i--) {
3339 a = outline_number[i] - outline_number[i - 1];
3342 a = outline_number[i];
3344 sum += outline_value[i] * a;
3348 average = sum /
MAXIMUM((max_x - mini_x), 1);
3352 for (i = outline_sz - 1; i >= 0; i--) {
3354 a = outline_number[i] - outline_number[i - 1];
3357 a = outline_number[i];
3359 f = ((double) outline_value[i]) - average;
3363 sigma = sqrt(sum1 / max_x);
3366 Pt.
get_coord(Px, Py, 0, min_x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3367 for (i = 0; i < outline_sz; i++) {
3368 Pt.
get_coord(Px, Py, 2, outline_number[i], outline_value[i],
3369 min_x, min_y, max_x, max_y,
FALSE);
3376 Pt.
get_coord(Px, Py, 2, max_x, max_value,
3377 min_x, min_y, max_x, max_y,
FALSE);
3379 Pt.
get_coord(Px, Py, 0, min_x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3380 Pt.
get_coord(Px, Py, 1, max_x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3381 Pt.
get_coord(Px, Py, 2, max_x, max_y, min_x, min_y, max_x, max_y,
FALSE);
3382 Pt.
get_coord(Px, Py, 3, min_x, max_y, min_x, min_y, max_x, max_y,
FALSE);
3387 sprintf(str,
"{\\bf {\\large %d}}", max_x + offset_x);
3389 sprintf(str,
"{\\bf {\\large %d}}", min_x + offset_x);
3393 sprintf(str,
"{\\bf {\\large %d}}", min_x + offset_x);
3395 sprintf(str,
"{\\bf {\\large %d}}", max_x + offset_x);
3398 sprintf(str,
"{\\bf {\\large %d}}", min_y);
3400 sprintf(str,
"{\\bf {\\large %d}}", max_y);
3407 sprintf(str,
"{\\bf {\\large %s}}", label_x);
3412 sprintf(str,
"{\\bf {\\large $");
3414 sprintf(str + strlen(str),
"\\overline{x}=%.1lf", average);
3418 sprintf(str + strlen(str),
"\\, ");
3420 sprintf(str + strlen(str),
"\\sigma=%.1lf", sigma);
3422 if (f_mu || f_sigma) {
3423 sprintf(str + strlen(str),
"$}}");
3429 y_in = (int) average;
3431 outline_value, outline_number, outline_sz);
3432 Pt.
get_coord(Px, Py, 0, x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3433 Pt.
get_coord(Px, Py, 1, x, y, min_x, min_y, max_x, max_y,
FALSE);
3434 Pt.
get_coord(Px, Py, 2, min_x, y, min_x, min_y, max_x, max_y,
FALSE);
3443 outline_value, outline_number, outline_sz);
3444 Pt.
get_coord(Px, Py, 0, x, y, min_x, min_y, max_x, max_y,
FALSE);
3445 circle(Px[0], Py[0], circle_rad);
3449 for (k = 1; k < nb_standard_deviations; k++) {
3450 y_in = (int) (average + k * sigma);
3452 outline_value, outline_number, outline_sz);
3453 Pt.
get_coord(Px, Py, 0, x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3454 Pt.
get_coord(Px, Py, 1, x, y, min_x, min_y, max_x, max_y,
FALSE);
3455 Pt.
get_coord(Px, Py, 2, min_x, y, min_x, min_y, max_x, max_y,
FALSE);
3459 sprintf(str,
"$\\overline{x}+%d \\sigma$", k);
3462 sprintf(str,
"$\\overline{x}+\\sigma$");
3466 y_in = (int) (average - k * sigma);
3468 outline_value, outline_number, outline_sz);
3469 Pt.
get_coord(Px, Py, 0, x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3470 Pt.
get_coord(Px, Py, 1, x, y, min_x, min_y, max_x, max_y,
FALSE);
3471 Pt.
get_coord(Px, Py, 2, min_x, y, min_x, min_y, max_x, max_y,
FALSE);
3475 sprintf(str,
"{\\bf {\\large $\\overline{x}-%d \\sigma$}}", k);
3478 sprintf(str,
"{\\bf {\\large $\\overline{x}-\\sigma$}}");
3484 y_in = (int) (average + 2 * sigma);
3485 y_to_pt_on_curve(y_in, x, y,
3486 outline_value, outline_number, outline_sz);
3487 get_coord(Px, Py, 0, x, min_y, min_x, min_y, max_x, max_y);
3488 get_coord(Px, Py, 1, x, y, min_x, min_y, max_x, max_y);
3489 get_coord(Px, Py, 2, min_x, y, min_x, min_y, max_x, max_y);
3491 G.polygon3(Px, Py, 0, 1, 2);
3492 G.aligned_text(Px[2], Py[2],
"r",
"$\\overline{x}+2\\sigma$");
3494 y_in = (int) (average - 2 * sigma);
3495 y_to_pt_on_curve(y_in, x, y,
3496 outline_value, outline_number, outline_sz);
3497 get_coord(Px, Py, 0, x, min_y, min_x, min_y, max_x, max_y);
3498 get_coord(Px, Py, 1, x, y, min_x, min_y, max_x, max_y);
3499 get_coord(Px, Py, 2, min_x, y, min_x, min_y, max_x, max_y);
3501 G.polygon3(Px, Py, 0, 1, 2);
3502 G.aligned_text(Px[2], Py[2],
"r",
"$\\overline{x}-2\\sigma$");
3508 int line_dashing = 50;
3514 delta = 1000 / v_grid;
3515 for (i = 1; i <= v_grid - 1; i++) {
3526 delta = 1000 / h_grid;
3527 for (i = 1; i <= h_grid - 1; i++) {
3540 sprintf(str,
"{\\bf {\\large %s}}", title);
3547 int **outline_value,
int **outline_number,
int *outline_sz,
int nb_curves,
3548 int min_x,
int max_x,
int min_y,
int max_y,
3549 int offset_x,
int f_switch_x,
3550 int f_title,
const char *title,
3551 const char *label_x,
3552 int f_v_grid,
int v_grid,
int f_h_grid,
int h_grid,
3553 int f_v_logarithmic,
double log_base)
3556 int Px[1000], Py[1000];
3564 int min_x, max_x, min_y, max_y;
3568 for (curve = 0; curve < nb_curves; curve++) {
3569 min_x =
MINIMUM(min_x, outline_number[curve][0]);
3570 min_x =
MINIMUM(min_x, outline_number[curve][outline_sz[curve] - 1]);
3571 max_x =
MAXIMUM(max_x, outline_number[curve][0]);
3572 max_x =
MAXIMUM(max_x, outline_number[curve][outline_sz[curve] - 1]);
3575 cout <<
"min_x=" << min_x << endl;
3576 cout <<
"max_x=" << max_x << endl;
3583 for (curve = 0; curve < nb_curves; curve++) {
3584 if (f_v_logarithmic) {
3586 min_x, min_y, min_x, min_y, max_x, max_y,
3587 log_base, f_switch_x);
3591 min_x, min_y, min_x, min_y, max_x, max_y, f_switch_x);
3593 for (i = 0; i < outline_sz[curve]; i++) {
3594 if (f_v_logarithmic) {
3596 outline_number[curve][i], outline_value[curve][i],
3597 min_x, min_y, max_x, max_y, log_base, f_switch_x);
3601 outline_number[curve][i], outline_value[curve][i],
3602 min_x, min_y, max_x, max_y, f_switch_x);
3610 if (f_v_logarithmic) {
3612 min_x, min_y, max_x, max_y, log_base, f_switch_x);
3616 min_x, min_y, max_x, max_y, f_switch_x);
3622 if (f_v_logarithmic) {
3624 min_x, min_y, min_x, min_y, max_x, max_y, log_base,
FALSE);
3626 max_x, min_y, min_x, min_y, max_x, max_y, log_base,
FALSE);
3628 max_x, max_y, min_x, min_y, max_x, max_y, log_base,
FALSE);
3630 min_x, max_y, min_x, min_y, max_x, max_y, log_base,
FALSE);
3633 Pt.
get_coord(Px, Py, 0, min_x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3634 Pt.
get_coord(Px, Py, 1, max_x, min_y, min_x, min_y, max_x, max_y,
FALSE);
3635 Pt.
get_coord(Px, Py, 2, max_x, max_y, min_x, min_y, max_x, max_y,
FALSE);
3636 Pt.
get_coord(Px, Py, 3, min_x, max_y, min_x, min_y, max_x, max_y,
FALSE);
3643 sprintf(str,
"{\\bf {\\large %d}}", max_x + offset_x);
3645 sprintf(str,
"{\\bf {\\large %d}}", min_x + offset_x);
3649 sprintf(str,
"{\\bf {\\large %d}}", min_x + offset_x);
3651 sprintf(str,
"{\\bf {\\large %d}}", max_x + offset_x);
3655 sprintf(str,
"{\\bf {\\large %d}}", min_y);
3657 sprintf(str,
"{\\bf {\\large %d}}", max_y);
3664 sprintf(str,
"{\\bf {\\large %s}}", label_x);
3671 int line_dashing = 50;
3672 int line_thickness = 15;
3680 delta = log10(max_x - min_x) / v_grid;
3681 for (i = 1; i <= v_grid - 1; i++) {
3682 a = min_x + pow(10, i * delta);
3692 delta = 1000 / v_grid;
3693 for (i = 1; i <= v_grid - 1; i++) {
3703 if (f_v_logarithmic) {
3706 delta = (log(max_y - min_y + 1) / log(log_base))/ h_grid;
3707 for (i = 1; i <= h_grid - 1; i++) {
3708 a = min_y + pow(log_base, i * delta);
3710 min_x, min_y, max_x, max_y, log_base,
3717 sprintf(str,
"{%d}", (
int)a);
3724 delta = 1000 / h_grid;
3725 for (i = 1; i <= h_grid - 1; i++) {
3739 sprintf(str,
"{\\bf {\\large %s}}", title);
3749 int f_point_labels,
char **Point_labels,
int verbose_level)
3751 int f_v = (verbose_level >= 1);
3764 double dx = O->
xin * 0.5 / (double) (q + 1);
3765 double dy = O->
yin * 0.5 / (double) (q + 1);
3770 cout <<
"projective_plane_draw_grid2" << endl;
3771 cout <<
"projective_plane_draw_grid2 q=" << q << endl;
3773 cout <<
"projective_plane_draw_grid2 dx=" << dx <<
" dy=" << dy << endl;
3788 cout <<
"projective_plane_draw_grid2 "
3789 "before G.draw_axes_and_grid" << endl;
3794 0., (
double)(q - 1), 0., (
double)(q - 1), dx, dy,
3806 cout <<
"projective_plane_draw_grid2 "
3807 "after G.draw_axes_and_grid" << endl;
3814 for (i = 0; i < 2; i++) {
3818 text(Px[0], Py[0],
"$x$");
3819 text(Px[1], Py[1],
"$y$");
3823 projective_plane_make_affine_point(q, 0, 1, 0, a, b);
3826 projective_plane_make_affine_point(q, 1, 0, 0, a, b);
3830 projective_plane_make_affine_point(q, q / 2, 1, 0, a, b);
3837 projective_plane_make_affine_point(q, q / 2, 1, 0, a, b);
3840 projective_plane_make_affine_point(q, (q + 1) / 2, 1, 0, a, b);
3845 for (i = 0; i < 4; i++) {
3854 cout <<
"projective_plane_draw_grid2 "
3855 "drawing points, nb=" << nb << endl;
3865 for (h = 0; h < nb; h++) {
3866 x1 = Table[3 * h + 0];
3867 x2 = Table[3 * h + 1];
3868 x3 = Table[3 * h + 2];
3870 projective_plane_make_affine_point(q, x1, x2, x3, a, b);
3873 cout <<
"projective_plane_draw_grid2 "
3874 "point " << h <<
" : " << x1 <<
", " << x2
3875 <<
", " << x3 <<
" : " << a <<
", " << b << endl;
3881 for (i = 0; i < 1; i++) {
3888 if (f_point_labels) {
3889 text(Px[0], Py[0], Point_labels[h]);
3896 cout <<
"projective_plane_draw_grid2 not drawing any points" << endl;
3911 cout <<
"projective_plane_draw_grid2 done" << endl;
3917 int f_row_grid,
int f_col_grid,
3918 int *Table,
int nb_colors,
3920 int *color_scale,
int nb_colors_in_scale,
3921 int f_has_labels,
int *labels)
3925 int i, j, a, cnt, mn;
3937 cout <<
"mp_graphics::draw_matrix_in_color" << endl;
3938 cout <<
"dx=" << F.
dx << endl;
3939 cout <<
"dy=" << F.
dy << endl;
3943 sprintf(str,
"box outline");
3965 for (i = 0; i < m; i++) {
3966 sprintf(str,
"row_%d", i);
3968 sprintf(str + strlen(str),
" label %d", labels[i]);
3973 10 * i + indent, 10 * j + indent,
3974 10 * (i + 1) - indent, 10 * j + indent,
3975 10 * (i + 1) - indent, 10 * n - indent,
3976 10 * i + indent, 10 * n - indent,
3977 10 * i + indent, 10 * j + indent);
3982 for (j = 0; j < n; j++) {
3983 sprintf(str,
"col_%d", j);
3985 sprintf(str + strlen(str),
" label %d", labels[j]);
3990 10 * i + indent, 10 * j + indent,
3991 10 * m - indent, 10 * j + indent,
3992 10 * m - indent, 10 * (j + 1) - indent,
3993 10 * i + indent, 10 * (j + 1) - indent,
3994 10 * i + indent, 10 * j + indent);
3999 for (i = 0; i < m; i++) {
4000 sprintf(str,
"%d", labels[i]);
4003 for (j = 0; j < n; j++) {
4004 sprintf(str,
"%d", labels[m + j] - m);
4017 double color_step = (double) nb_colors / (
double) (nb_colors_in_scale);
4019 double f_sufficiently_many_colors;
4022 cout <<
"color_step=" << color_step << endl;
4025 if (nb_colors_in_scale > nb_colors) {
4026 f_sufficiently_many_colors =
TRUE;
4029 f_sufficiently_many_colors =
FALSE;
4032 for (i = 0; i < m; i++) {
4033 for (j = 0; j < n; j++) {
4036 a = Table[i * n + j];
4048 sprintf(str,
"%d_%d", i, j);
4051 c = (int)((
double) a / (double) color_step) + 1;
4052 if (f_sufficiently_many_colors) {
4057 a1 = a - c * color_step;
4058 c1 = a1 / color_step * 40 + 60;
4064 10 * i + indent, 10 * j + indent,
4065 10 * (i + 1) - indent, 10 * j + indent,
4066 10 * (i + 1) - indent, 10 * (j + 1) - indent,
4067 10 * i + indent, 10 * (j + 1) - indent,
4068 10 * i + indent, 10 * j + indent);
4077 cout <<
"mp_graphics::draw_matrix_in_color done" << endl;
4083static void projective_plane_make_affine_point(
4084 int q,
int x1,
int x2,
int x3,
double &a,
double &b)
4117 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4119 int Px[100], Py[100];
4121 Px[0] = j * dx + (dx >> 1);
4122 Py[0] = (M - i) * dy - (dy >> 1);
4124 circle(Px[0], Py[0], rad);
4129 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4131 int Px[100], Py[100];
4132 int ddx = compute_dd(dx);
4133 int ddy = compute_dd(dy);
4135 Px[0] = j * dx + (dx >> 1);
4136 Py[0] = (M - i) * dy - (dy >> 1);
4138 Px[1] = Px[0] - ddx;
4139 Py[1] = Py[0] + ddy;
4140 Px[2] = Px[0] + ddx;
4141 Py[2] = Py[0] - ddy;
4144 Px[1] = Px[0] + ddx;
4145 Py[1] = Py[0] + ddy;
4146 Px[2] = Px[0] - ddx;
4147 Py[2] = Py[0] - ddy;
4150 circle(Px[1], Py[1], rad);
4151 circle(Px[2], Py[2], rad);
4155 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4157 int Px[100], Py[100];
4158 int ddx = compute_dd(dx);
4159 int ddy = compute_dd(dy);
4161 Px[0] = j * dx + (dx >> 1);
4162 Py[0] = (M - i) * dy - (dy >> 1);
4164 Px[1] = Px[0] - ddx;
4165 Py[1] = Py[0] + ddy;
4166 Px[2] = Px[0] + ddx;
4167 Py[2] = Py[0] - ddy;
4170 Px[1] = Px[0] + ddx;
4171 Py[1] = Py[0] + ddy;
4172 Px[2] = Px[0] - ddx;
4173 Py[2] = Py[0] - ddy;
4176 circle(Px[0], Py[0], rad);
4177 circle(Px[1], Py[1], rad);
4178 circle(Px[2], Py[2], rad);
4182 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4184 int Px[100], Py[100];
4185 int ddx = compute_dd(dx);
4186 int ddy = compute_dd(dy);
4188 Px[0] = j * dx + (dx >> 1);
4189 Py[0] = (M - i) * dy - (dy >> 1);
4191 Px[1] = Px[0] - ddx;
4192 Py[1] = Py[0] + ddy;
4193 Px[2] = Px[0] + ddx;
4194 Py[2] = Py[0] + ddy;
4195 Px[3] = Px[0] + ddx;
4196 Py[3] = Py[0] - ddy;
4197 Px[4] = Px[0] - ddx;
4198 Py[4] = Py[0] - ddy;
4200 circle(Px[1], Py[1], rad);
4201 circle(Px[2], Py[2], rad);
4202 circle(Px[3], Py[3], rad);
4203 circle(Px[4], Py[4], rad);
4207 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4209 int Px[100], Py[100];
4210 int ddx = compute_dd(dx);
4211 int ddy = compute_dd(dy);
4213 Px[0] = j * dx + (dx >> 1);
4214 Py[0] = (M - i) * dy - (dy >> 1);
4216 Px[1] = Px[0] - ddx;
4217 Py[1] = Py[0] + ddy;
4218 Px[2] = Px[0] + ddx;
4219 Py[2] = Py[0] + ddy;
4220 Px[3] = Px[0] + ddx;
4221 Py[3] = Py[0] - ddy;
4222 Px[4] = Px[0] - ddx;
4223 Py[4] = Py[0] - ddy;
4225 circle(Px[0], Py[0], rad);
4226 circle(Px[1], Py[1], rad);
4227 circle(Px[2], Py[2], rad);
4228 circle(Px[3], Py[3], rad);
4229 circle(Px[4], Py[4], rad);
4233 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4235 int Px[100], Py[100];
4236 int ddx = compute_dd(dx);
4237 int ddy = compute_dd(dy);
4239 Px[0] = j * dx + (dx >> 1);
4240 Py[0] = (M - i) * dy - (dy >> 1);
4242 Px[1] = Px[0] - ddx;
4243 Py[1] = Py[0] + ddy;
4244 Px[2] = Px[0] + ddx;
4245 Py[2] = Py[0] + ddy;
4246 Px[3] = Px[0] + ddx;
4247 Py[3] = Py[0] - ddy;
4248 Px[4] = Px[0] - ddx;
4249 Py[4] = Py[0] - ddy;
4253 Py[5] = Py[0] + ddy;
4255 Py[6] = Py[0] - ddy;
4258 Px[5] = Px[0] - ddx;
4260 Px[6] = Px[0] + ddx;
4264 circle(Px[1], Py[1], rad);
4265 circle(Px[2], Py[2], rad);
4266 circle(Px[3], Py[3], rad);
4267 circle(Px[4], Py[4], rad);
4268 circle(Px[5], Py[5], rad);
4269 circle(Px[6], Py[6], rad);
4273 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4275 int Px[100], Py[100];
4276 int ddx = compute_dd(dx);
4277 int ddy = compute_dd(dy);
4279 Px[0] = j * dx + (dx >> 1);
4280 Py[0] = (M - i) * dy - (dy >> 1);
4282 Px[1] = Px[0] - ddx;
4283 Py[1] = Py[0] + ddy;
4284 Px[2] = Px[0] + ddx;
4285 Py[2] = Py[0] + ddy;
4286 Px[3] = Px[0] + ddx;
4287 Py[3] = Py[0] - ddy;
4288 Px[4] = Px[0] - ddx;
4289 Py[4] = Py[0] - ddy;
4293 Py[5] = Py[0] + ddy;
4295 Py[6] = Py[0] - ddy;
4300 Px[5] = Px[0] - ddx;
4302 Px[6] = Px[0] + ddx;
4308 circle(Px[1], Py[1], rad);
4309 circle(Px[2], Py[2], rad);
4310 circle(Px[3], Py[3], rad);
4311 circle(Px[4], Py[4], rad);
4312 circle(Px[5], Py[5], rad);
4313 circle(Px[6], Py[6], rad);
4314 circle(Px[7], Py[7], rad);
4318 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4320 int Px[100], Py[100];
4321 int ddx = compute_dd(dx);
4322 int ddy = compute_dd(dy);
4324 Px[0] = j * dx + (dx >> 1);
4325 Py[0] = (M - i) * dy - (dy >> 1);
4327 Px[1] = Px[0] - ddx;
4328 Py[1] = Py[0] + ddy;
4329 Px[2] = Px[0] + ddx;
4330 Py[2] = Py[0] + ddy;
4331 Px[3] = Px[0] + ddx;
4332 Py[3] = Py[0] - ddy;
4333 Px[4] = Px[0] - ddx;
4334 Py[4] = Py[0] - ddy;
4338 Py[5] = Py[0] + ddy;
4340 Py[6] = Py[0] - ddy;
4343 Px[8] = Px[0] - ddx;
4345 Px[9] = Px[0] + ddx;
4349 Px[5] = Px[0] - ddx;
4351 Px[6] = Px[0] + ddx;
4356 Py[8] = Py[0] + ddy;
4358 Py[9] = Py[0] - ddy;
4361 circle(Px[1], Py[1], rad);
4362 circle(Px[2], Py[2], rad);
4363 circle(Px[3], Py[3], rad);
4364 circle(Px[4], Py[4], rad);
4365 circle(Px[5], Py[5], rad);
4366 circle(Px[6], Py[6], rad);
4368 circle(Px[8], Py[8], rad);
4369 circle(Px[9], Py[9], rad);
4373 int i,
int j,
int dx,
int dy,
int rad,
int f_horizontal)
4375 int Px[100], Py[100];
4376 int ddx = compute_dd(dx);
4377 int ddy = compute_dd(dy);
4379 Px[0] = j * dx + (dx >> 1);
4380 Py[0] = (M - i) * dy - (dy >> 1);
4382 Px[1] = Px[0] - ddx;
4383 Py[1] = Py[0] + ddy;
4384 Px[2] = Px[0] + ddx;
4385 Py[2] = Py[0] + ddy;
4386 Px[3] = Px[0] + ddx;
4387 Py[3] = Py[0] - ddy;
4388 Px[4] = Px[0] - ddx;
4389 Py[4] = Py[0] - ddy;
4393 Py[5] = Py[0] + ddy;
4395 Py[6] = Py[0] - ddy;
4398 Px[8] = Px[0] - ddx;
4400 Px[9] = Px[0] + ddx;
4404 Px[5] = Px[0] - ddx;
4406 Px[6] = Px[0] + ddx;
4411 Py[8] = Py[0] + ddy;
4413 Py[9] = Py[0] - ddy;
4416 circle(Px[1], Py[1], rad);
4417 circle(Px[2], Py[2], rad);
4418 circle(Px[3], Py[3], rad);
4419 circle(Px[4], Py[4], rad);
4420 circle(Px[5], Py[5], rad);
4421 circle(Px[6], Py[6], rad);
4422 circle(Px[7], Py[7], rad);
4423 circle(Px[8], Py[8], rad);
4424 circle(Px[9], Py[9], rad);
4428#define DD_MULTIPLIER 8.5
4431static int compute_dd(
int dx)
4437 int i,
int j,
int dx,
int dy,
int rad)
4478 int i,
int j,
int dx,
int dy,
int rad)
4523 int f_grid,
int f_gray,
int f_numbers,
int f_frame,
4524 int f_cost,
int cost)
4526 int Px[100], Py[100];
4531 Px[0] = (N * dx) / 2;
4532 Py[0] = (M + 1) * dy;
4533 sprintf(str,
"${%d}$", cost);
4538 for (i = 0; i < M; i++) {
4539 for (j = 0; j < N; j++) {
4541 Py[0] = (M - i) * dy;
4542 Px[1] = (j + 1) * dx;
4543 Py[1] = (M - i) * dy;
4544 Px[2] = (j + 1) * dx;
4545 Py[2] = (M - i - 1) * dy;
4547 Py[3] = (M - i - 1) * dy;
4562 sprintf(str,
"$%d$", B[i * N + j]);
4572 for (i = 0; i < M; i++) {
4573 for (j = 0; j < N; j++) {
4576 if (matching[p] == 3) {
4579 Py[0] = (M - i) * dy;
4580 Px[1] = (j + 2) * dx;
4581 Py[1] = (M - i) * dy;
4582 Px[2] = (j + 2) * dx;
4583 Py[2] = (M - i - 1) * dy;
4585 Py[3] = (M - i - 1) * dy;
4587 Px[4] = Px[0] + edge;
4588 Py[4] = Py[0] - edge;
4589 Px[5] = Px[1] - edge;
4590 Py[5] = Py[1] - edge;
4591 Px[6] = Px[2] - edge;
4592 Py[6] = Py[2] + edge;
4593 Px[7] = Px[3] + edge;
4594 Py[7] = Py[3] + edge;
4603 else if (matching[p] == 6) {
4606 Py[0] = (M - i) * dy;
4607 Px[1] = (j + 1) * dx;
4608 Py[1] = (M - i) * dy;
4609 Px[2] = (j + 1) * dx;
4610 Py[2] = (M - i - 2) * dy;
4612 Py[3] = (M - i - 2) * dy;
4615 Px[4] = Px[0] + edge;
4616 Py[4] = Py[0] - edge;
4617 Px[5] = Px[1] - edge;
4618 Py[5] = Py[1] - edge;
4619 Px[6] = Px[2] - edge;
4620 Py[6] = Py[2] + edge;
4621 Px[7] = Px[3] + edge;
4622 Py[7] = Py[3] + edge;
4626 q = (i + 1) * N + j;
a collection of combinatorial functions
void k2ij(int k, int &i, int &j, int n)
matrices over GF(2) stored as bitvectors
options for drawing an object of type layered_graph
void st_rotate(int txt_rotate)
void circle_log(int x1, int y1, int rad)
void bezier4(int *Px, int *Py, int i1, int i2, int i3, int i4)
void bezier(int *Px, int *Py, int n)
void domino_draw2(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void domino_draw1(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void begin_figure_mp(int factor_1000)
void fill_polygon7(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7)
void polygon_idx_mp(int *Px, int *Py, int *Idx, int n, int f_cycle)
void comment_log(const char *p)
void sl_udsty(int line_dashing)
void polygon_idx(int *Px, int *Py, int *Idx, int n)
void domino_draw_assignment_South(int Ap, int Aq, int M, int i, int j, int dx, int dy, int rad)
void polygon10(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10)
void draw_density2(int no, int *outline_value, int *outline_number, int outline_sz, int min_value, int max_value, int offset_x, int f_switch_x, int f_title, const char *title, const char *label_x, int f_circle, int circle_at, int circle_rad, int f_mu, int f_sigma, int nb_standard_deviations, int f_v_grid, int v_grid, int f_h_grid, int h_grid)
void output_circle_text_tikz(int x, int y, int idx, int rad, const char *text)
void circle_tikz(int x, int y, int rad)
void comment_mp(const char *p)
void header_mp(std::string &str_date)
void fill_idx(int *Px, int *Py, int *Idx, int n, const char *symbol, int f_cycle)
void domino_draw_assignment_East(int Ap, int Aq, int M, int i, int j, int dx, int dy, int rad)
void text_mp(int x1, int y1, const char *p)
void domino_draw4(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void draw_polar_grid(double r_max, int nb_circles, int nb_rays, double x_stretch)
void aligned_text(int x, int y, const char *alignment, const char *p)
void polygon2(int *Px, int *Py, int i1, int i2)
void plot_curve(int N, int *f_DNE, double *Dx, double *Dy, double dx, double dy)
void coords_min_max(int x, int y)
void dev2user(int &x, int &y)
void frame(double move_out)
void sf_outline(int fill_outline)
void grid_fill_polygon5(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
void sl_thickness(int line_thickness)
void domino_draw8(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void grid_polygon5(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
void bezier_idx2(int *Px, int *Py, int *Idx, int n, int f_cycle)
void output_circle_text_mp(int x, int y, int idx, const char *text)
void polygon6(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6)
void bezier_idx_log(int *Px, int *Py, int *Idx, int n)
void init(std::string &file_name, layered_graph_draw_options *Draw_options, int verbose_level)
void output_xy_metapost(int x, int y)
void fill_polygon3(int *Px, int *Py, int i1, int i2, int i3)
void fill_polygon11(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11)
void draw_bitmatrix2(int f_dots, int f_partition, int nb_row_parts, int *row_part_first, int nb_col_parts, int *col_part_first, int f_row_grid, int f_col_grid, int f_bitmatrix, data_structures::bitmatrix *Bitmatrix, int *M, int m, int n, int f_has_labels, int *labels)
void polygon9(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9)
void polygon2_arrow_halfway(int *Px, int *Py, int i1, int i2)
void polygon8(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
void polygon11(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10, int i11)
void draw_tournament(int x, int y, int dx, int dy, int nb_V, long int *Edges, int nb_E, int radius, int verbose_level)
void integer_4pts(int *Px, int *Py, int p1, int p2, int p3, int p4, const char *align, int a)
void fill_idx_tikz(std::ofstream &fp, int *Px, int *Py, int *Idx, int n, const char *symbol, int f_cycle)
void bezier_idx(int *Px, int *Py, int *Idx, int n)
void draw_axes_and_grid(layered_graph_draw_options *O, double x_min, double x_max, double y_min, double y_max, double dx, double dy, int f_x_axis_at_y_min, int f_y_axis_at_x_min, int x_mod, int y_mod, int x_tick_mod, int y_tick_mod, double x_labels_offset, double y_labels_offset, double x_tick_half_width, double y_tick_half_width, int f_v_lines, int subdivide_v, int f_h_lines, int subdivide_h, int verbose_level)
void polygon2_arrow_halfway_and_label(int *Px, int *Py, int i1, int i2, const char *alignment, const char *txt)
void text_log(int x1, int y1, const char *p)
void domino_draw3(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void polygon7(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7)
void projective_plane_draw_grid2(layered_graph_draw_options *O, int q, int *Table, int nb, int f_point_labels, char **Point_labels, int verbose_level)
void circle_text(int x, int y, int rad, const char *text)
void draw_matrix_in_color(int f_row_grid, int f_col_grid, int *Table, int nb_colors, int m, int n, int *color_scale, int nb_colors_in_scale, int f_has_labels, int *labels)
void polygon(int *Px, int *Py, int n)
void get_alignment_mp(char *align)
void output_x_metapost(int x)
void exit(std::ostream &ost, int verbose_level)
void aligned_text_array(int *Px, int *Py, int idx, const char *alignment, const char *p)
void output_x_tikz(int x)
void sl_ends(int line_beg_style, int line_end_style)
void sf_nofill(int fill_nofill)
void comment(const char *p)
void nice_circle(int x, int y, int rad)
void st_boxed(int txt_boxed)
void domino_draw6(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void st_overwrite(int txt_overwrite)
void sf_color(int fill_color)
void comment_tikz(const char *p)
void text_tikz(int x1, int y1, const char *p)
void bezier2(int *Px, int *Py, int i1, int i2)
void draw_density2_multiple_curves(int no, int **outline_value, int **outline_number, int *outline_sz, int nb_curves, int min_x, int max_x, int min_y, int max_y, int offset_x, int f_switch_x, int f_title, const char *title, const char *label_x, int f_v_grid, int v_grid, int f_h_grid, int h_grid, int f_v_logarithmic, double log_base)
void bezier6(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6)
void grid_polygon2(grid_frame *F, int x0, int y0, int x1, int y1)
void domino_draw5(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void grid_aligned_text(grid_frame *F, int x, int y, const char *alignment, const char *p)
void polygon5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5)
void draw_graph_on_2D_grid(int x, int y, int dx, int dy, int rad, int nb_V, int *Edges, int nb_E, int *coords_2D, int *Base, int f_point_labels, int point_label_offset, int f_directed)
void user2dev_dist_y(int &y)
void bezier_idx_tikz(int *Px, int *Py, int *Idx, int n, int f_cycle)
void polygon_log(int *Px, int *Py, int n)
void draw_graph_with_distinguished_edge(int x, int y, int dx, int dy, int nb_V, long int *Edges, int nb_E, int distinguished_edge, int verbose_level)
void bezier3(int *Px, int *Py, int i1, int i2, int i3)
void fill_polygon6(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6)
void polygon_idx_tikz(int *Px, int *Py, int *Idx, int n, int f_cycle)
void circle_mp(int x, int y, int rad)
void domino_draw9(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void aligned_text_with_offset(int x, int y, int xoffset, int yoffset, const char *alignment, const char *p)
void color_tikz(std::ofstream &fp, int color)
void output_y_tikz(int y)
void output_xy_tikz(int x, int y)
int get_label(int x, int y)
void polygon_idx_log(int *Px, int *Py, int *Idx, int n)
void fill_polygon9(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9)
void user2dev_dist_x(int &x)
void sf_shape(int fill_shape)
void bezier7(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7)
void grid_polygon4(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
void grid_fill_polygon4(grid_frame *F, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
void output_y_metapost(int y)
void polygon4(int *Px, int *Py, int i1, int i2, int i3, int i4)
void header_log(std::string &str_date)
void fill_polygon4(int *Px, int *Py, int i1, int i2, int i3, int i4)
void domino_draw7(int M, int i, int j, int dx, int dy, int rad, int f_horizontal)
void user2dev(int &x, int &y)
void circle(int x, int y, int rad)
void begin_figure(int factor_1000)
void polygon3(int *Px, int *Py, int i1, int i2, int i3)
void draw_graph_on_multiple_circles(int x, int y, int dx, int dy, int nb_V, int *Edges, int nb_E, int nb_circles)
void fill_polygon10(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10)
void domino_draw_assignment(int *A, int *matching, int *B, int M, int N, int dx, int dy, int rad, int edge, int f_grid, int f_gray, int f_numbers, int f_frame, int f_cost, int cost)
void frame_constant_aspect_ratio(double move_out)
void polygon_idx2(int *Px, int *Py, int *Idx, int n, int f_cycle)
void text_4pts(int *Px, int *Py, int p1, int p2, int p3, int p4, const char *align, const char *str)
void draw_graph(int x, int y, int dx, int dy, int nb_V, long int *Edges, int nb_E, int radius, int verbose_level)
void fill_polygon5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5)
void fill_polygon8(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8)
void finish(std::ostream &ost, int verbose_level)
void sl_color(int line_color)
void header_tikz(std::string &str_date)
void polygon3D(int *Px, int *Py, int dim, int x0, int y0, int z0, int x1, int y1, int z1)
void fill_idx_mp(int *Px, int *Py, int *Idx, int n, const char *symbol, int f_cycle)
void st_alignment(int txt_halign, int txt_valign)
void bezier_idx_mp(int *Px, int *Py, int *Idx, int n, int f_cycle)
void text(int x, int y, const char *p)
void bezier5(int *Px, int *Py, int i1, int i2, int i3, int i4, int i5)
void sf_interior(int fill_interior)
numerical functions, mostly concerned with double
void transform_llur(int *in, int *out, int &x, int &y)
void transform_dist_x(int *in, int *out, int &x)
void transform_dist_y(int *in, int *out, int &y)
void on_circle_double(double *Px, double *Py, int idx, double angle_in_degree, double rad)
a collection of functions related to file io
long int file_size(std::string &fname)
interface to system functions
void get_date(std::string &str)
#define Lint_vec_print(A, B, C)
the orbiter library for the classification of combinatorial objects
a class to help with drawing elements in a 2D grid fashion