mbsim
4.0.0
MBSim Kernel
|
A class to represent a NURBS surface. More...
Public Types | |
enum | Method { equallySpaced = 0 , chordLength } |
Public Member Functions | |
NurbsSurface () | |
default constructor | |
NurbsSurface (const NurbsSurface &nS) | |
copy constructor | |
NurbsSurface (int DegU, int DegV, const fmatvec::VecV &Uk, const fmatvec::VecV &Vk, fmatvec::GeneralMatrix< fmatvec::Vec4 > &Q) | |
constructor | |
virtual | ~NurbsSurface ()=default |
Empty desctructor. | |
const fmatvec::VecV & | knotU () const |
A reference to the U knot vector. | |
const fmatvec::VecV & | knotV () const |
A reference to the V knot vector. | |
double | knotU (int i) const |
Returns the i-th knot from U. | |
double | knotV (int i) const |
Returns the i-th knot from V. | |
const fmatvec::GeneralMatrix< fmatvec::Vec4 > & | ctrlPnts () const |
A reference to the control points. | |
const fmatvec::Vec4 | ctrlPnts (int i, int j) const |
A reference to the control point at (i,j) | |
int | degreeU () const |
A reference to the degree in U of the surface. | |
int | degreeV () const |
A reference to the degree in V of the surface. | |
void | setKnotU (const fmatvec::VecV &U_) |
void | setKnotV (const fmatvec::VecV &V_) |
void | setCtrlPnts (const fmatvec::GeneralMatrix< fmatvec::Vec4 > &P_) |
void | setDegreeU (int degU_) |
void | setDegreeV (int degV_) |
virtual NurbsSurface & | operator= (const NurbsSurface &) |
NurbsSurface assignment. More... | |
void | resize (int Pu, int Pv, int DegU, int DegV) |
Resize the surface. More... | |
fmatvec::HPoint< 3 > | operator() (double u, double v) const |
Returns the point on the surface at u,v. More... | |
fmatvec::Point< 3 > | pointAt (double u, double v) const |
rojects the point in the normal space More... | |
void | deriveAt (double u, double v, int d, fmatvec::GeneralMatrix< fmatvec::Vec3 > &skl) const |
Find the non-zero basis functions in the U and V direction. More... | |
void | deriveAtH (double u, double v, int d, fmatvec::GeneralMatrix< fmatvec::Vec4 > &skl) const |
computes the point and the derivatives of degree d and below at (u,v) More... | |
fmatvec::Vec3 | normal (double u, double v) const |
Computes the normal of the surface at (u,v) More... | |
void | globalInterp (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, int DegU, int DegV) |
void | globalInterp (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, const fmatvec::VecV &uk, const fmatvec::VecV &vk, int DegU, int DegV) |
void | globalInterpClosedU (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, int DegU, int DegV) |
void | globalInterpClosedU (const fmatvec::GeneralMatrix< fmatvec::Vec3 > &Q, const fmatvec::VecV &uk, const fmatvec::VecV &vk, int DegU, int DegV) |
void | globalInterpH (const fmatvec::GeneralMatrix< fmatvec::Vec4 > &Q, int DegU, int DegV, Method method=chordLength) |
void | globalInterpClosedUH (const fmatvec::GeneralMatrix< fmatvec::Vec4 > &Q, int DegU, int DegV, Method method=chordLength) |
Protected Member Functions | |
void | findSpan (double u, double v, int spanU, int spanV) const |
Finds the multiplicity of a knot in the U knot. More... | |
int | findSpanU (double u) const |
finds the span in the U direction More... | |
int | findSpanV (double v) const |
finds the span in the V direction More... | |
int | findMultU (int r) const |
int | findMultV (int r) const |
Related Functions | |
(Note that these are not member functions.) | |
int | surfMeshParams (const GeneralMatrix< fmatvec::Vec3 > &Q, VecV &uk, VecV &vl) |
Computes the parameters for global surface interpolation. More... | |
A class to represent a NURBS surface.
The NURBS surface is composed of points in homogenous space. It can have any degree in both the u and the v direction.
void MBSim::NurbsSurface::deriveAt | ( | double | u, |
double | v, | ||
int | d, | ||
fmatvec::GeneralMatrix< fmatvec::Vec3 > & | skl | ||
) | const |
Find the non-zero basis functions in the U and V direction.
u | the u parametric value |
v | the v parametric value |
spanU | the span of u |
spanV | the span of v |
Nu | the vector containing the U non-zero basis functions |
Nv | the vector containing the V non-zero basis functions |
Finds the non-zero basis function in the U direction
u | the u parametric value |
span | the span of u |
N | the vector containing the basis functions |
N.resize(degU+1) ;
N(0] = 1.0 ; for(int j=1; j<= degU ; j++){ left[j] = u-U[span+1-j] ; right[j] = U[span+j]-u ; saved = 0.0 ; for(int r=0 ; r<j; r++){ temp = N[r]/(right[r+1]+left[j-r]) ; N[r] = saved+right[r+1]*temp ; saved = left[j-r]*temp ; } N[j] = saved ; }
}
/*!
Finds the non-zero basis function in the V direction
v | the v parametric value |
span | the span of v |
N | the vector containing the basis functions |
N.resize(degV+1) ;
N[0] = 1.0 ; for(int j=1; j<= degV ; j++){ left[j] = v-V[span+1-j] ; right[j] = V[span+j]-v ; saved = 0.0 ; for(int r=0 ; r<j; r++){ temp = N[r]/(right[r+1]+left[j-r]) ; N[r] = saved+right[r+1]*temp ; saved = left[j-r]*temp ; } N[j] = saved ; }
} /*!
Computes the point and the derivatives of degree d and below at (u,v)
Computes the matrix of derivatives at u,v . The value of skl(k,l) represents the derivative of the surface S(u,v) with respect to u, k times and to v, l times.
u | the u parametric value |
v | the v parametric value |
d | the derivative is computed up to and including to this value |
skl | the matrix containing the derivatives |
void MBSim::NurbsSurface::deriveAtH | ( | double | u, |
double | v, | ||
int | d, | ||
fmatvec::GeneralMatrix< fmatvec::Vec4 > & | skl | ||
) | const |
computes the point and the derivatives of degree d and below at (u,v)
Computes the matrix of derivatives at u,v . The value of skl(k,l) represents the derivative of the surface S(u,v) with respect to u k times and to $v$ $l$ times.
u | the u parametric value |
v | the v parametric value |
d | the derivative is computed up to and including to this value |
skl | the matrix containing the derivatives |
|
protected |
Finds the multiplicity of a knot in the U knot.
r | the knot to observe |
finds the multiplicity of a knot in the V knot
r | the knot to observe |
finds the span in the U and V direction
Finds the span in the U and V direction. The spanU is the index k for which the parameter u is valid in the [u_k,u_{k+1}] range. The spanV is the index k for which the parameter v is valid in the [v_k,v_{k+1}] range.
u | find the U span for this parametric value |
v | find the V span for this parametric value |
spanU | the U span |
spanV | the V span |
|
protected |
finds the span in the U direction
Finds the span in the U direction. The span is the index k for which the parameter u is valid in the [u_k,u_{k+1}] range.
u | --> find the span for this parametric value |
\modified 20 January, 1999 (Alejandro Frangi)
|
protected |
finds the span in the V direction
Finds the span in the V direction. The span is the index k for which the parameter v is valid in the [v_k,v_{k+1}] range.
v | find the span for this parametric value |
Vec3 MBSim::NurbsSurface::normal | ( | double | u, |
double | v | ||
) | const |
Computes the normal of the surface at (u,v)
u | the u parametric value |
v | the v parametric value |
fmatvec::HPoint< 3 > MBSim::NurbsSurface::operator() | ( | double | u, |
double | v | ||
) | const |
Returns the point on the surface at u,v.
Returns the point on the surface at u,v
u | the u parametric value |
v | the v parametric value |
|
virtual |
fmatvec::Point< 3 > MBSim::NurbsSurface::pointAt | ( | double | u, |
double | v | ||
) | const |
rojects the point in the normal space
Projects the point in the normal space.
void MBSim::NurbsSurface::resize | ( | int | Pu, |
int | Pv, | ||
int | DegU, | ||
int | DegV | ||
) |
Resize the surface.
Resize the surface. Proper values must be assigned once this function has been called since the resize operator is destructive.
Pu | the number of control points in the U direction |
Pv | the number of control points in the V direction |
DegU | the degree of the surface in the U direction |
DegV | the degree of the surface in the V direction |
|
related |
Computes the parameters for global surface interpolation.
Computes the parameters for global surface interpolation. For more information, see A9.3 on p377 on the NURBS book.
Q | the matrix of 3D points |
uk | the knot coefficients in the U direction |
vl | the knot coefficients in the V direction |