ROBAST logo
// Author: Akira Okumura <mailto:oxon@mac.com>
/******************************************************************************
 * Copyright (C) 2006-, Akira Okumura                                         *
 * All rights reserved.                                                       *
 *****************************************************************************/

#ifndef A_GEO_BEZIER_PGON_H
#define A_GEO_BEZIER_PGON_H

#include "TGeoPgon.h"
#include "TVector2.h"

///////////////////////////////////////////////////////////////////////////////
//
// AGeoBezierPgon
//
// Geometry class for Pgon-like volume, but the side surfaces are defined by
// a Bezier curve (https://en.wikipedia.org/wiki/B%C3%A9zier_curve)
//
///////////////////////////////////////////////////////////////////////////////

class AGeoBezierPgon : public TGeoPgon {
 protected:
  Double_t fLength;  // fDZ will be fLength/2
  Double_t fR1;      // Half of the upper aperture
  Double_t fR2;      // Half of the lower aperture
  TVector2 fP1;      // Relative coordinates of the control point 1
  TVector2 fP2;      // Relative coordinates of the control point 2
  Int_t fNcontrol;   // Number of control points (0, 1, or 2)

 public:
  AGeoBezierPgon();
  AGeoBezierPgon(Double_t phi, Double_t dphi, Int_t nedges, Int_t nz,
                 Double_t r1, Double_t r2, Double_t dz);
  AGeoBezierPgon(const char* name, Double_t phi, Double_t dphi, Int_t nedges,
                 Int_t nz, Double_t r1, Double_t r2, Double_t dz);
  virtual ~AGeoBezierPgon();

  virtual void Bezier(Double_t t, Double_t& r, Double_t& z);
  virtual void SetControlPoints(Double_t r1, Double_t z1);
  virtual void SetControlPoints(Double_t r1, Double_t z1, Double_t r2,
                                Double_t z2);
  virtual void SetSections();

  ClassDef(AGeoBezierPgon, 1)
};

#endif  // A_GEO_BEZIER_PGON_H
 AGeoBezierPgon.h:1
 AGeoBezierPgon.h:2
 AGeoBezierPgon.h:3
 AGeoBezierPgon.h:4
 AGeoBezierPgon.h:5
 AGeoBezierPgon.h:6
 AGeoBezierPgon.h:7
 AGeoBezierPgon.h:8
 AGeoBezierPgon.h:9
 AGeoBezierPgon.h:10
 AGeoBezierPgon.h:11
 AGeoBezierPgon.h:12
 AGeoBezierPgon.h:13
 AGeoBezierPgon.h:14
 AGeoBezierPgon.h:15
 AGeoBezierPgon.h:16
 AGeoBezierPgon.h:17
 AGeoBezierPgon.h:18
 AGeoBezierPgon.h:19
 AGeoBezierPgon.h:20
 AGeoBezierPgon.h:21
 AGeoBezierPgon.h:22
 AGeoBezierPgon.h:23
 AGeoBezierPgon.h:24
 AGeoBezierPgon.h:25
 AGeoBezierPgon.h:26
 AGeoBezierPgon.h:27
 AGeoBezierPgon.h:28
 AGeoBezierPgon.h:29
 AGeoBezierPgon.h:30
 AGeoBezierPgon.h:31
 AGeoBezierPgon.h:32
 AGeoBezierPgon.h:33
 AGeoBezierPgon.h:34
 AGeoBezierPgon.h:35
 AGeoBezierPgon.h:36
 AGeoBezierPgon.h:37
 AGeoBezierPgon.h:38
 AGeoBezierPgon.h:39
 AGeoBezierPgon.h:40
 AGeoBezierPgon.h:41
 AGeoBezierPgon.h:42
 AGeoBezierPgon.h:43
 AGeoBezierPgon.h:44
 AGeoBezierPgon.h:45
 AGeoBezierPgon.h:46
 AGeoBezierPgon.h:47
 AGeoBezierPgon.h:48