From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- graphics/epix/pairs.cc | 158 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 graphics/epix/pairs.cc (limited to 'graphics/epix/pairs.cc') diff --git a/graphics/epix/pairs.cc b/graphics/epix/pairs.cc new file mode 100644 index 0000000000..a2cf174825 --- /dev/null +++ b/graphics/epix/pairs.cc @@ -0,0 +1,158 @@ +/* + * pairs.cc -- ePiX pair:: class and mathematical operators + * + * This file is part of ePiX, a C++ library for creating high-quality + * figures in LaTeX + * + * Version 1.1.10 + * Last Change: August 04, 2007 + */ + +/* + * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 + * Andrew D. Hwang + * Department of Mathematics and Computer Science + * College of the Holy Cross + * Worcester, MA, 01610-2395, USA + */ + +/* + * ePiX is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * ePiX 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 ePiX; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include + +#include "constants.h" +#include "triples.h" +#include "pairs.h" + +namespace ePiX { + pair::pair(const P& arg) + { + m_x1 = arg.x1(); + m_x2 = arg.x2(); + } + + // unary increment operators + pair& pair::operator += (const pair& arg) + { + m_x1 += arg.m_x1; + m_x2 += arg.m_x2; + + return *this; + } + + pair& pair::operator -= (const pair& arg) + { + m_x1 -= arg.m_x1; + m_x2 -= arg.m_x2; + + return *this; + } + + pair& pair::operator *= (double c) + { + m_x1 *= c; + m_x2 *= c; + + return *this; + } + + // complex multiplication and division + pair& pair::operator *= (const pair& arg) + { + double temp(m_x1); + m_x1 = temp * arg.m_x1 - m_x2 * arg.m_x2; + m_x2 = temp * arg.m_x2 + m_x2 * arg.m_x1; + + return *this; + } + + pair& pair::operator /= (const pair& arg) + { + double denom = (arg.m_x1)*(arg.m_x1)+(arg.m_x2)*(arg.m_x2); + + double temp(m_x1); + m_x1 = (temp * arg.m_x1 + m_x2 * arg.m_x2)/denom; + m_x2 = (m_x2 * arg.m_x1 - temp * arg.m_x2)/denom; + + return *this; + } + + bool pair::operator== (const pair& u) const + { + return ( fabs(m_x1-u.m_x1) < EPIX_EPSILON + && fabs(m_x2-u.m_x2) < EPIX_EPSILON ); + } + + bool pair::operator!= (const pair& u) const + { + return !((*this) == u); + } + + // non-member functions + pair operator- (pair u) + { + return u *= -1; + } + + pair operator+ (pair u, const pair& v) + { + return u += v; + } + + pair operator- (pair u, const pair& v) + { + return u -= v; + } + + pair operator* (double c, pair u) + { + return u *= c; + } + + // complex arithmetic + pair J(pair p) + { + return p *= pair(0,1); + } + + pair operator* (pair u, const pair& v) + { + return u *= v; + } + + pair operator/ (pair u, const pair& v) + { + return u /= v; + } + + // dot product + double operator| (const pair& u, const pair& v) + { + return u.x1()*v.x1() + u.x2()*v.x2(); + } + + double norm (const pair& u) + { + return sqrt(u|u); + } + + // componentwise product (a,b)&(x,y)=(ax,by) + pair operator& (const pair& u, const pair& v) + { + return pair(u.x1()*v.x1(), u.x2()*v.x2()); + } + +} // end of namespace -- cgit v1.2.3