|
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 |