Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / MUON / AliMUONPolygon.h
1 #ifndef ALIMUONPOLYGON_H
2 #define ALIMUONPOLYGON_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice                               */
6
7 // $Id$
8
9 /// \ingroup geometry
10 /// \class AliMUONPolygon
11 /// \brief A planar polygon
12 /// 
13 // author Laurent Aphecetche
14
15 #ifndef ROOT_TObject
16 #  include "TObject.h"
17 #endif
18
19 class AliMUONPolygon : public TObject
20 {
21 public:
22   AliMUONPolygon(Int_t nvertices=5);
23   AliMUONPolygon(Double_t xpos, Double_t ypos, Double_t halfsizex, Double_t halfsizey);
24   AliMUONPolygon(const AliMUONPolygon& rhs);
25   AliMUONPolygon& operator=(const AliMUONPolygon& rhs);
26   virtual ~AliMUONPolygon();
27
28   /// Create a full copy of this object
29   virtual TObject* Clone(const char* /*newname*/="") const { return new AliMUONPolygon(*this); }
30   
31   Bool_t Contains(Double_t x, Double_t y) const;
32   
33   Double_t SignedArea() const;
34   
35   /// Whether this polygon is oriented counter clockwise
36   Bool_t IsCounterClockwiseOriented() const { return SignedArea() > 0.0; }
37   
38   void ReverseOrientation();
39   
40   void SetVertex(Int_t i, Double_t x, Double_t y);
41
42   /// Return the x-coordinate of the i-th vertex
43   Double_t X(Int_t i) const { return fX[i]; }
44
45   /// Return the y-coordinate of the i-th vertex
46   Double_t Y(Int_t i) const { return fY[i]; }
47
48   /// Get the number of vertices of this polygon
49   Int_t NumberOfVertices() const { return fN; }
50   
51   void Print(Option_t* opt="") const;
52   
53   void Close();
54   
55 private:
56   Int_t fN; ///< Number of vertices 
57   
58   /// Vertices x coordinates
59   Double_t* fX; //[fN]
60   
61   /// Vertices y coordinates
62   Double_t* fY; //[fN]
63   
64   ClassDef(AliMUONPolygon,1) // A simple polygon
65 };
66
67 #endif