106 lines
2.3 KiB
C++
106 lines
2.3 KiB
C++
// This code implementation is the intellectual property of
|
|
// the RD44 GEANT4 collaboration.
|
|
//
|
|
// By copying, distributing or modifying the Program (or any work
|
|
// based on the Program) you indicate your acceptance of this statement,
|
|
// and all its terms.
|
|
//
|
|
// $Id: G4ControlPoints.hh,v 2.3 1998/10/20 16:31:16 broglia Exp $
|
|
// GEANT4 tag $Name: geant4-00 $
|
|
//
|
|
//
|
|
// Modif 8 oct 98 : A.Floquet
|
|
// G4PointRat datas are made of
|
|
// . a point 3D
|
|
// . a additional value : the scale factor which is set to 1 by default
|
|
//
|
|
// G4ControlPoints includes only G4PointRat which in turn are made
|
|
// of G4Point3D
|
|
|
|
#ifndef __G4ControlPoints_h
|
|
#define __G4ControlPoints_h 1
|
|
|
|
#include "G4PointRat.hh"
|
|
|
|
class G4ControlPoints
|
|
{
|
|
public:
|
|
|
|
// Constructors
|
|
G4ControlPoints();
|
|
|
|
G4ControlPoints(const STEPaggregate& Aggr, const int Rational);
|
|
|
|
G4ControlPoints( int, int);
|
|
|
|
G4ControlPoints( int , int , int );
|
|
|
|
G4ControlPoints(const G4ControlPoints&);
|
|
|
|
// Destructor
|
|
~G4ControlPoints();
|
|
|
|
void SetWeights(G4double*);
|
|
|
|
void CalcValues(G4double k1, G4double param, G4Point3D& pts1,
|
|
G4double k2, G4Point3D& pts2);
|
|
void CalcValues(G4double k1, G4double param, G4PointRat& pts1,
|
|
G4double k2, G4PointRat& pts2);
|
|
|
|
inline int GetRows() const {return nr;}
|
|
inline int GetCols() const {return nc;}
|
|
|
|
// Puts control point into matrix location (i,j)
|
|
inline void put(const int i, const int j, const G4Point3D &tmp)
|
|
{
|
|
*data[i*nc+j]=tmp; // tmp is converted to a PointRat
|
|
// by the member affectation function
|
|
// of the G4PointRat class
|
|
}
|
|
|
|
|
|
inline void put(const int i, const int j, const G4PointRat& tmp)
|
|
{
|
|
*data[i*nc+j]=tmp;
|
|
}
|
|
|
|
|
|
// Retrieves control point from matrix location (i,j)
|
|
inline G4Point3D Get3D(const int i, const int j) const
|
|
{
|
|
return (data[i*nc+j])->pt();
|
|
}
|
|
|
|
inline G4PointRat& GetRat(const int i, const int j) const
|
|
{
|
|
return *data[i*nc+j];
|
|
}
|
|
|
|
G4double ClosestDistanceToPoint(const G4Point3D&);
|
|
|
|
|
|
private:
|
|
|
|
inline G4double Calc(const G4double k1, const G4double par,
|
|
const G4double old_val, const G4double k2,
|
|
const G4double new_val )
|
|
{
|
|
return (((k1 - par) * old_val +(par - k2) * new_val) / (k1-k2));
|
|
}
|
|
|
|
G4PointRat** data;
|
|
int nr, nc;
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|