SyFi  0.3
SyFi::Rectangle Class Reference

#include <Polygon.h>

Inheritance diagram for SyFi::Rectangle:
SyFi::Polygon SyFi::ReferenceRectangle

List of all members.

Public Member Functions

 Rectangle (GiNaC::ex p0, GiNaC::ex p1, const std::string &subscript="")
 Rectangle (GiNaC::ex p0, GiNaC::ex p1, GiNaC::ex p2, GiNaC::ex p3, const std::string &subscript="")
 Rectangle (const Rectangle &rectangle)
virtual ~Rectangle ()
virtual unsigned int no_space_dim () const
virtual Line line (unsigned int i) const
virtual GiNaC::ex repr (Repr_format format=SUBS_PERFORMED) const
virtual const std::string str () const
virtual GiNaC::ex integrate (GiNaC::ex f, Repr_format format=SUBS_PERFORMED)
virtual Rectanglecopy () const

Protected Member Functions

 Rectangle (const std::string &subscript="")

Detailed Description

Definition at line 144 of file Polygon.h.


Constructor & Destructor Documentation

SyFi::Rectangle::Rectangle ( const std::string &  subscript = "") [protected]

Referenced by copy().

SyFi::Rectangle::Rectangle ( GiNaC::ex  p0,
GiNaC::ex  p1,
const std::string &  subscript = "" 
)
SyFi::Rectangle::Rectangle ( GiNaC::ex  p0,
GiNaC::ex  p1,
GiNaC::ex  p2,
GiNaC::ex  p3,
const std::string &  subscript = "" 
)
SyFi::Rectangle::Rectangle ( const Rectangle rectangle)

Definition at line 730 of file Polygon.cpp.

virtual SyFi::Rectangle::~Rectangle ( ) [inline, virtual]

Definition at line 152 of file Polygon.h.

{}

Member Function Documentation

Rectangle * SyFi::Rectangle::copy ( ) const [virtual]

Implements SyFi::Polygon.

Reimplemented in SyFi::ReferenceRectangle.

Definition at line 732 of file Polygon.cpp.

References Rectangle().

        {
                return new Rectangle(*this);
        }
ex SyFi::Rectangle::integrate ( GiNaC::ex  f,
Repr_format  format = SUBS_PERFORMED 
) [virtual]

Implements SyFi::Polygon.

Definition at line 783 of file Polygon.cpp.

References SyFi::Polygon::p, repr(), and SyFi::sub().

Referenced by main().

        {

                unsigned int counter = 0;
                ex s_repr = repr();

                lst sub;
                // perform substitution
                if ( p[0].nops() == 3)
                {
                        sub = lst(s_repr.op(0), s_repr.op(1), s_repr.op(2));
                        counter = 3;
                }
                else if ( p[0].nops() == 2)
                {
                        sub = lst(s_repr.op(0), s_repr.op(1));
                        counter = 2;
                }

                ex D;
                if      ( p[0].nops() == 2)
                {
                        D =   ( p[2].op(0) - p[0].op(0))
                                *( p[2].op(1) - p[0].op(1));
                }
                else if ( p[0].nops() == 3 )
                {

                        if      ( p[2].op(0) == p[0].op(0) )
                        {
                                D =   ( p[2].op(1) - p[0].op(1))
                                        *( p[2].op(2) - p[0].op(2));
                        }
                        else if ( p[2].op(1) == p[0].op(1) )
                        {
                                D =   ( p[2].op(0) - p[0].op(0))
                                        *( p[2].op(2) - p[0].op(2));
                        }
                        else if ( p[2].op(2) == p[0].op(2) )
                        {
                                D =   ( p[2].op(0) - p[0].op(0))
                                        *( p[2].op(1) - p[0].op(1));
                        }
                }

                ex intf = func.subs(sub);

                intf = intf*D;

                intf = GiNaC::integral(s_repr.op(counter).op(0), s_repr.op(counter).op(1), s_repr.op(counter).op(2), intf);
                intf = eval_integ(intf);

                counter++;
                intf = GiNaC::integral(s_repr.op(counter).op(0), s_repr.op(counter).op(1), s_repr.op(counter).op(2), intf);
                intf = eval_integ(intf);

                counter++;
                if ( counter <  s_repr.nops() )
                {
                        intf = GiNaC::integral(s_repr.op(counter).op(0), s_repr.op(counter).op(1), s_repr.op(counter).op(2), intf);
                        intf = eval_integ(intf);
                }

                return intf;
        }
Line SyFi::Rectangle::line ( unsigned int  i) const [virtual]

Reimplemented from SyFi::Polygon.

Definition at line 742 of file Polygon.cpp.

References SyFi::istr(), SyFi::Polygon::p, and SyFi::Polygon::subscript.

        {
                if      ( i == 0) return Line(p[0],p[1], istr(subscript,i));
                else if ( i == 1) return Line(p[1],p[2], istr(subscript,i));
                else if ( i == 2) return Line(p[2],p[3], istr(subscript,i));
                else if ( i == 3) return Line(p[3],p[0], istr(subscript,i));

                throw std::out_of_range("Line index is out of range!");
        }
unsigned int SyFi::Rectangle::no_space_dim ( ) const [virtual]

Implements SyFi::Polygon.

Definition at line 737 of file Polygon.cpp.

        {
                return 2;
        }
ex SyFi::Rectangle::repr ( Repr_format  format = SUBS_PERFORMED) const [virtual]

Implements SyFi::Polygon.

Definition at line 752 of file Polygon.cpp.

References SyFi::Polygon::p, SyFi::t, and SyFi::x.

Referenced by integrate(), and main().

        {
                lst ret;
                GiNaC::symbol r("r"), s("s"), t("t");
                if ( p[0].nops() == 2 )
                {
                        ret.append( x == p[0].op(0) + r*( p[2].op(0) - p[0].op(0)));
                        ret.append( y == p[0].op(1) + s*( p[2].op(1) - p[0].op(1)));
                        ret.append( lst(r,0,1) );
                        ret.append( lst(s,0,1) );
                }
                else if ( p[0].nops() == 3 )
                {
                        ret.append( x == p[0].op(0) + r*( p[2].op(0) - p[0].op(0)));
                        ret.append( y == p[0].op(1) + s*( p[2].op(1) - p[0].op(1)));
                        ret.append( z == p[0].op(2) + t*( p[2].op(2) - p[0].op(2)));
                        ret.append( lst(r,0,1) );
                        ret.append( lst(s,0,1) );
                        ret.append( lst(t,0,1) );
                }
                return ret;
        }
const string SyFi::Rectangle::str ( ) const [virtual]

Implements SyFi::Polygon.

Reimplemented in SyFi::ReferenceRectangle.

Definition at line 775 of file Polygon.cpp.

        {
                std::ostringstream s;
                //    s <<"Rectangle("<<p[0]<<","<<p[1]<<","<<p[2]<<","<<p[3]<<")";
                s <<"Rectangle";
                return s.str();
        }

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator