X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=libctgraphics%2Fcircle.cpp;fp=libctgraphics%2Fcircle.cpp;h=373edae463bacb178d98ec8cb9739655c9b5238a;hb=bf7295a63667dcca309389ee6dd5328a3a25f22b;hp=0000000000000000000000000000000000000000;hpb=1eb1fcf291b39a016864d78a4060e83cd9046437;p=ctsim.git diff --git a/libctgraphics/circle.cpp b/libctgraphics/circle.cpp new file mode 100644 index 0000000..373edae --- /dev/null +++ b/libctgraphics/circle.cpp @@ -0,0 +1,90 @@ +/***************************************************************************** +** This is part of the CTSim program +** Copyright (C) 1983-2000 Kevin Rosenberg +** +** $Id: circle.cpp,v 1.1 2000/06/19 18:05:03 kevin Exp $ +** $Log: circle.cpp,v $ +** Revision 1.1 2000/06/19 18:05:03 kevin +** initial cvs import +** +** Revision 1.1 2000/06/13 16:20:31 kevin +** finished c++ conversions +** +** Revision 1.2 2000/05/24 22:49:01 kevin +** Updated SGP: first function X-windows version +** +** Revision 1.1.1.1 2000/04/28 13:02:44 kevin +** Initial CVS import for first public release +** +** +** +** 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. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +******************************************************************************/ + +/* FUNCTION + * sgp2_circle - draw circle of radius r at current center + */ + +#include "math.h" +#include "kmath.h" +#include "sgp.h" + +void +sgp2_draw_circle (const double r) +{ + sgp2_draw_arc (0.0, 7.0, r); +} + +/*==============================================================*/ +/* draw arc around current center. pass angles and radius */ +/*==============================================================*/ + +void +sgp2_draw_arc (double start, double stop, const double r) +{ + double c, s, theta, angle; + float x, y, xp, yp; + + if ((stop-start) > 2 * PI) + stop = start + 2 * PI; + if ((start-stop) > 2 * PI) + stop = start + 2 * PI; + while (start >= stop) + stop += 2*PI; + + x = r * cos ((double) start); + y = r * sin ((double) start); + sgp2_move_rel (x, y); /* move from center to start of arc */ + + theta = 5 * PI / 180; + c = cos(theta); + s = sin(theta); + + for (angle = start; angle < stop - theta; angle += theta) { + xp = c * x - s * y; + yp = s * x + c * y; + sgp2_line_rel (xp - x, yp - y); + x = xp; y = yp; + } + + c = cos (stop - angle); + s = sin (stop - angle); + xp = c * x - s * y; + yp = s * x + c * y; + sgp2_line_rel (xp - x, yp - y); + + x = r * cos ((double) stop); + y = r * sin ((double) stop); + sgp2_move_rel (-x, -y); /* move back to center of circle */ +}