X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=polygon.cc;h=9e55d80e179396cce8b7fa084c4938f37c15f022;hb=6fccc7a7c7b24476bafed5449150600a37c49b14;hp=75163cbe4ec6f60bb318d7c8098a87192e2082cd;hpb=ba46b057f3e2613a86f2dea7fa8022990482c735;p=universe.git diff --git a/polygon.cc b/polygon.cc index 75163cb..9e55d80 100644 --- a/polygon.cc +++ b/polygon.cc @@ -1,17 +1,6 @@ -//////////////////////////////////////////////////////////////////////////////// -// This program is free software; you can redistribute it and/or // -// modify it under the terms of the GNU General Public License // -// version 2 as published by the Free Software Foundation. // -// // -// This program is distributed in the hope that it will be useful, but // -// WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // -// General Public License for more details. // -// // -// Written and (C) by François Fleuret // -// Contact for comments & bug reports // -//////////////////////////////////////////////////////////////////////////////// +// Written and (C) by Francois Fleuret +// Contact for comments & bug reports #include #include "polygon.h" @@ -58,14 +47,18 @@ Polygon *Polygon::clone() { return new Polygon(_mass, _red, _green, _blue, _relative_x, _relative_y, _nb_vertices); } -void Polygon::print_fig(ostream &os) { - os << "2 2 0 1 0 7 50 -1 20 0.000 0 0 -1 0 0 " << _nb_vertices + 1 << endl; - os << " "; - for(int n = 0; n < _nb_vertices; n++) os << " " << int(_x[n]*10) << " " << int(_y[n]*10); - os << " " << int(_x[0]*10) << " " << int(_y[0]*10); - os << endl; +#ifdef XFIG_SUPPORT +void Polygon::color_xfig(XFigTracer *tracer) { + tracer->add_color(int(255 * _red), int(255 * _green), int(255 * _blue)); } +void Polygon::print_xfig(XFigTracer *tracer) { + tracer->draw_polygon(int(255 * _red), int(255 * _green), int(255 * _blue), + _nb_vertices, _x, _y); +} +#endif + +#ifdef X11_SUPPORT void Polygon::draw(SimpleWindow *window) { window->color(_red, _green, _blue); int x[_nb_vertices], y[_nb_vertices]; @@ -83,8 +76,21 @@ void Polygon::draw_contours(SimpleWindow *window) { y[n] = int(_y[n]); } window->color(0.0, 0.0, 0.0); - for(int n = 0; n < _nb_vertices; n++) + // window->color(1.0, 1.0, 1.0); + for(int n = 0; n < _nb_vertices; n++) { window->draw_line(x[n], y[n], x[(n+1)%_nb_vertices], y[(n+1)%_nb_vertices]); + } +} +#endif + +void Polygon::draw(Canvas *canvas) { + canvas->set_drawing_color(_red, _green, _blue); + canvas->draw_polygon(1, _nb_vertices, _x, _y); +} + +void Polygon::draw_contours(Canvas *canvas) { + canvas->set_drawing_color(0.0, 0.0, 0.0); + canvas->draw_polygon(0, _nb_vertices, _x, _y); } void Polygon::set_vertex(int k, scalar_t x, scalar_t y) { @@ -157,7 +163,7 @@ void Polygon::triangularize(int &nt, int nb, int *index) { _relative_x[index[(k+1)%nb]] - _relative_x[index[m]], _relative_y[index[(k+1)%nb]] - _relative_y[index[m]]); - if(a1 * a2 > 0 && best_split < 0 || (abs(a1 - a2) < best_split)) { + if((a1 * a2 > 0 && best_split < 0) || (abs(a1 - a2) < best_split)) { best_n = n; best_m = m; best_split = abs(a1 - a2); } @@ -189,7 +195,9 @@ void Polygon::initialize(int nb_polygons) { _nb_polygons = nb_polygons; - a = _relative_x[_nb_vertices - 1] * _relative_y[0] - _relative_x[0] * _relative_y[_nb_vertices - 1]; + a = _relative_x[_nb_vertices - 1] * _relative_y[0] + - _relative_x[0] * _relative_y[_nb_vertices - 1]; + for(int n = 0; n < _nb_vertices - 1; n++) a += _relative_x[n] * _relative_y[n+1] - _relative_x[n+1] * _relative_y[n]; a *= 0.5; @@ -499,4 +507,3 @@ bool Polygon::collide(Polygon *p) { return false; } -