(mvcones.c:895)
Prototype:
int MVHyperConeFromNPoints(MvarNormalConeStruct *MVCone,
MvarVecStruct * const *Vecs,
int n)
Description:
Consturcts a hyper cone in R^n through n vectors specified by Vecs.
Parameters:
| MVCone: | The result is to be placed here.
|
|---|
| Vecs: | Input vectors, prescribing n locations in R^n.
|
|---|
| n: | Size of array Vecs.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
MVHyperPlaneFromNPoints
MVHyperConeFromNPoints2
MVHyperConeFromNPoints3
Keywords:
(mvcones.c:943)
Prototype:
int MVHyperConeFromNPoints2(MvarNormalConeStruct *MVCone,
MvarVecStruct * const *Vecs,
int m)
Description:
Consturcts a hyper cone in R^n through m (m < n) vectors specified by
Vecs.
Parameters:
| MVCone: | The result is to be placed here.
|
|---|
| Vecs: | Input vectors, prescribing m locations in R^n.
|
|---|
| m: | Size of array Vecs, m < n.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
MVHyperPlaneFromNPoints
MVHyperConeFromNPoints
MVHyperConeFromNPoints3
Keywords:
(mvcones.c:1039)
Prototype:
int MVHyperConeFromNPoints3(MvarNormalConeStruct *MVCone,
MvarVecStruct * const *Vecs,
int m)
Description:
Consturcts a hyper cone in R^n through m (m < n) vectors specified by
Vecs. Same functionality of MVHyperConeFromNPoints2 but more efficient,
by solving for A A^T x = e, were e is [1, 1,..., 1], and having x being
the linear combination of A's rows defining the cone axis.
Parameters:
| MVCone: | The result is to be placed here.
|
|---|
| Vecs: | Input vectors, prescribing m locations in R^n.
|
|---|
| m: | Size of array Vecs, m < n.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
MVHyperPlaneFromNPoints
MVHyperConeFromNPoints
MVHyperConeFromNPoints2
Keywords:
(mvcones.c:842)
Prototype:
int MVHyperPlaneFromNPoints(MvarPlaneStruct *MVPlane,
MvarVecStruct * const *Vecs,
int n)
Description:
Consturcts a hyper plane in R^n through n locations specified by Vecs.
Parameters:
| MVPlane: | The result is to be placed here.
|
|---|
| Vecs: | Input vectors, prescribing n locations in R^n.
|
|---|
| n: | Size of array Vecs.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
MVHyperConeFromNPoints
Keywords:
(crv_krnl.c:409)
Prototype:
IPObjectStruct *MVarCrvDiameter(const CagdCrvStruct *Crv,
CagdRType SubEps,
CagdRType NumEps)
Description:
Computes the minimal and maximal diameter of the given curve.
Let the input curve be C(t) and let f(t,r) = < C(t)-C(r), C(t)-C(r) >.
Then, df/dt = df/dr = 0 find all the finite set of line segments that
connects two points on the curve orthogonaly to the curve.
The min/max diameter is part of this set.
Parameters:
| Crv: | Simple closed curve to compute the diameter for.
|
|---|
| SubEps: | Subdivision epsilon.
|
|---|
| NumEps: | Numeric marching tolerance.
|
|---|
Returned Value:
| IPObjectStruct *: List of pair of parameter values between which the
local diameter could be found.
|
|---|
See Also:
MVarCrvKernel
MvarCrvAntipodalPoints
Keywords:
(crv_krnl.c:75)
Prototype:
MvarMVStruct *MVarCrvGammaKernel(const CagdCrvStruct *Crv, CagdRType Gamma)
Description:
Computes the gamma-kernel of the given curve, or the points in the plane
that have a line of sight (rotated gamma degrees) with all the points of
the curve.
The curve is assumed to be closed and simple.
Let the input curve be C(t) and let S(u, v) = (u, v), the XY plane.
Further let D'(t) = Rot(Gamma)[C'(t)].
Then, let F(u, v, t) = (C(t) - S(u, v)) x D'(t) (only the Z component
of crossprod).
The zero set of F projected over the XY plane defines all the domain
that is NOT in the gamma-kernel of C(t).
Parameters:
| Crv: | Simple closed curve to compute its gamma-kernel.
|
|---|
| Gamma: | ngular deviation of the gamma-kernel, in degrees.
|
|---|
Returned Value:
| MvarMVStruct *: The trivariate function F(u, v, t) whose zero set,
projected on the XY plane, is the domain that is not in the
gamma-kernel.
|
|---|
See Also:
MVarCrvKernelSilhouette
MVarCrvKernel
MVarCrvGammaKernelSrf
Keywords:
(crv_krnl.c:187)
Prototype:
MvarMVStruct *MVarCrvGammaKernelSrf(const CagdCrvStruct *Crv,
CagdRType ExtentScale,
CagdRType GammaMax)
Description:
Constructs a gamma-kernel surfaces the given curve and as a function of
gamma.
Let the input curve be C(t).
If C(t) is a linear curve then we compute the surface:
Let P = (Px, Py) be the initial point and (Dx, Dy) the slope of the
line. Then the constructed surface equals (ES == ExtentScale):
X(r, Gamma) = Px + r * Dx * ES + r * Gamma * Dy * ES
Y(r, Gamma) = Py - r * Gamma * Dx * ES + r * Dy * ES
Z(r, Gamma) = Gamma
If C(t) is a higher order, non linear, curve then we compute trivar:
X(t, r, Gamma) = Cx(t) + r * Cx'(t) * ES + r * Gamma * Cy'(t) * ES
Y(t, r, Gamma) = Cy(t) - r * Gamma * Cx'(t) * ES + r * Cy'(t) * ES
Z(t, r, Gamma) = Gamma
Parameters:
| Crv: | Simple curve to compute its gamma-kernel surface.
|
|---|
| ExtentScale: | To scale the constructed surface as function of Gamma.
|
|---|
| GammaMax: | Max gamma deviation of the gamma-kernel, in degrees, for
this curve. If negative, does so to opposite direction.
|
|---|
Returned Value:
| MvarMVStruct *: The surface S(u, v) or trivariate function F(u, v, t)
representing the gamma surface as a function of gamma.
|
|---|
See Also:
MVarCrvKernelSilhouette
MVarCrvKernel
MVarCrvGammaKernel
Keywords:
(crv_krnl.c:41)
Prototype:
MvarMVStruct *MVarCrvKernel(const CagdCrvStruct *Crv)
Description:
Computes the kernel of the given curve, or the points in the plane that
have a line of sight with all the points of the curve.
The curve is assumed to be closed and simple.
Let the input curve be C(t) and let S(u, v) = (u, v), the XY plane.
Then, let F(u, v, t) = (C(t) - S(u, v)) x C'(t) (only the Z component
of crossprod).
The zero set of F projected over the XY plane defines all the domain
that is NOT in the kernel of C(t).
Parameters:
| Crv: | Simple closed curve to compute its kernel.
|
|---|
Returned Value:
| MvarMVStruct *: The trivariate function F(u, v, t) whose zero set,
projected on the XY plane, is the domain that is not in the kernel.
|
|---|
See Also:
MVarCrvKernelSilhouette
MVarCrvGammaKernel
Keywords:
(crv_krnl.c:352)
Prototype:
IPObjectStruct *MVarCrvKernelSilhouette(const CagdCrvStruct *Crv,
CagdRType Gamma,
CagdRType SubEps,
CagdRType NumEps)
Description:
Computes the kernel of the given curve, or the points in the plane that
have a line of sight with all the points of the curve.
The curve is assumed to be closed and simple.
Let the input curve be C(t) and let S(u, v) = (u, v), the XY plane.
Then, let f(u, v, t) = < C(t) - S(u, v), C'(t) >.
The zero set of f projected over the XY plane defines all the domain
that is NOT in the kernel of C(t).
Parameters:
| Crv: | Simple closed curve to compute the silhouette of the kernel.
|
|---|
| Gamma: | Angular deviation of the gamma-kernel, in degrees.
|
|---|
| SubEps: | Subdivision epsilon.
|
|---|
| NumEps: | Numeric marching tolerance.
|
|---|
Returned Value:
| IPObjectStruct *: The silhouette along the third, t, parameter of the
trivariate function f(u, v, t).
|
|---|
See Also:
MVarCrvKernel
MVarCrvGammaKernel
Keywords:
(ms_circ.c:445)
Prototype:
int MVarIsCrvInsideCirc(const CagdCrvStruct *Crv,
CagdRType Center[2],
CagdRType Radius,
CagdRType Tolerance)
Description:
Tests if a circle is contained in the given prescribed curve.
Parameters:
| Crv: | Curve to test for containment in the circle.
|
|---|
| Center: | Center of the circle to test against.
|
|---|
| Radius: | Radius of the circle to test against.
|
|---|
| Tolerance: | Of computation.
|
|---|
Returned Value:
| int: TRUE if Crv is indeed inside the circle, FALSE otherwise.
|
|---|
See Also:
MvarMSCircOfThreeCurves
MvarMSCircOfThreeCurves
MvarMinSpanCirc
Keywords:
(mvcones.c:1149)
Prototype:
MvarNormalConeStruct *MVarMVNormalCone(const MvarMVStruct *MV)
Description:
Constructs a normal cone to a scalar multivariate MV.
Note the normal space of the trivariate is assumed of dimension one, and
the gradient of the multivariate is assumed to span the normal space.
If the input multivariate is not scalar it is assumed to be of point
type E(1+Dim), where Dim is the dimension of the MV. This scalar holds
the gradient already in the Dim locations of the Points array in MV, in
slots Points[2] to Points[Dim + 1], with Points[1] still holding the
scalar field.
Parameters:
| MV: | Multivariate to derive a cone bounding its normal spaace.
|
|---|
Returned Value:
| MvarNormalConeStruct *: A cone bounding the normal space ov MV, or NULL
if failed (i.e. angular span of normal space too large).
|
|---|
See Also:
MvarMVConesOverlap
Keywords:
(mvaccess.c:446)
Prototype:
MvarMVStruct *MVarProjNrmlPrmt2MVScl(const CagdSrfStruct *Srf,
const CagdSrfStruct *NrmlSrf,
const MvarMVStruct *MVScl)
Description:
Performs the following steps in order:
1. Project Srf onto NrmlSrf by computing their inner product.
2. Promote the surface to a 4-variate with the surface the first 2 vars.
3. Scale the new 4-variate by a scalar product with MVScl.
Parameters:
| Srf: | Surface to project promote and scale.
|
|---|
| NrmlSrf: | ormal field to project along.
|
|---|
| MVScl: | Scale field to scale with.
|
|---|
Returned Value:
| MvarMVStruct *: Resulting multivariate. *
|
|---|
Keywords:
(selfintr.c:1678)
Prototype:
MvarPtStruct *MvarAdjacentSrfSrfInter(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdSrfBndryType Srf1Bndry,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
COmputes the intersection locations of two adjacent surfaces, that share
an edge (a boundary curve). No intersections locations along the shared
edge are returned. This case is common for adjacent patches in a B-spline
surface.
Parameters:
| Srf1, Srf2: | The two adjacent surfaces to intersect.
|
|---|
| Srf1Bndry: | Boundary of Srf1 that is shared with Srf2. Srf2 Boundary
Must be the reciprocal boundary. That is, if SrfBndry is
UMin, Srf2's boundary will be UMax.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: List of intersection points, as (u, v) parameter
pairs into the two surfaces' domains. Points in R^4.
|
|---|
See Also:
MvarBspSrfSelfInterDiagFactor
MvarBzrSrfSelfInterDiagFactor
BzrSrfFactorExtremeRowCol
Keywords:
(mvar_aux.c:914)
Prototype:
void MvarBBoxOfCrossProd(const MvarBBoxStruct *BBox1,
const MvarBBoxStruct *BBox2,
MvarBBoxStruct *DCrossBBox)
Description:
Computes the cross product of two bounding boxes in R^3, fetching the
possible values that could result from the cross product of the original
multiariate data these bounding boxes bound. Returned bbox is a vector
bbox with bounds on those possible cross product values.
Computation is done by computing min/max value for each axis of the
pair of bbox's cross product.
Parameters:
| BBox1, BBox2: | Two bounding boxes to compute their cross product.
|
|---|
| DCrossBBox: | Where to place the returned result.
|
|---|
Returned Value:
See Also:
MvarMVBBox
MvarBBoxOfDotProd
Keywords:
(mvar_aux.c:767)
Prototype:
void MvarBBoxOfDotProd(const MvarBBoxStruct *BBox1,
const MvarBBoxStruct *BBox2,
MvarBBoxStruct *DProdBBox)
Description:
Computes the dot product of two bounding boxes in R^n, fetching the
possible values that could result from the dot product of the original
multiariate data these bounding boxes bound. Returned bbox is a scalar
bbox with bounds on those possible dot product values.
Computation is done by computing min/max value for each axis of the
pair of bbox's and summing that up.
Parameters:
| BBox1, BBox2: | Two bounding boxes to compute their inner product.
|
|---|
| DProdBBox: | Where to place the returned result.
|
|---|
Returned Value:
See Also:
MvarMVBBox
MvarBBoxOfCrossProd
MvarBBoxOfDotProd2
Keywords:
(mvar_aux.c:811)
Prototype:
void MvarBBoxOfDotProd2(const MvarBBoxStruct *BBox1,
const MvarBBoxStruct *BBox2,
MvarBBoxStruct *DProdBBox)
Description:
Computes the dot product of two bounding boxes in R^n, fetching the
possible values that could result from the dot product of the original
multiariate data these bounding boxes bound. Returned bbox is a scalar
bbox with bounds on those possible dot product values.
Computation is done by enumerating all 2^n vertices of each bbox and
computing their dot products. Slower than MvarBBoxOfDotProd.
Parameters:
| BBox1, BBox2: | Two bounding boxes to compute their inner product.
|
|---|
| DProdBBox: | Where to place the returned result.
|
|---|
Returned Value:
See Also:
MvarMVBBox
MvarBBoxOfDotProd
Keywords:
(mvbiscon.c:253)
Prototype:
int MvarBsctApplyCC(MvarVoronoiCrvStruct *Cv1,
MvarVoronoiCrvStruct **CCFreeCrvs)
Description:
Given the struct, this function says whether the bisector point satisfies
the the following curvature constraints or not.
Calculating the curvature constraints
1st constraint - 1 < 0
2nd constraint
- 1 < 0
Parameters:
| Cv1: | VoronoiCrvStruct
|
|---|
| CCFreeCrvs: | VoronoiCrvStruct for storing the resultant curves
|
|---|
Returned Value:
See Also:
MvarBsctApplyLL
Keywords:
bisectors
(mvbiscon.c:130)
Prototype:
MvarVoronoiCrvStruct *MvarBsctApplyLL(MvarVoronoiCrvStruct *Cv1)
Description:
Given the struct, this function says whether the bisector point is to
the left of the curve or not.
Compute the constraints as dot products
1st constraint > 0
2nd constraint
> 0
Parameters:
Returned Value:
| MvarVoronoiCrvStruct *: Returns the VoronoiCrvStruct after appying
the LL constaint
|
|---|
See Also:
MvarBsctIsCurveLL
Keywords:
bisectors
(mvtrmpcr.c:741)
Prototype:
CagdBType MvarBsctCheckFootPtEqualsMinDistPt(CagdCrvStruct *Crv1,
CagdRType *Pt,
CagdPType BP)
Description:
Given the Crv1, point Pt and the Bisector point (BP), this function says
BP's footpoint is the minimum distance point to Crv1. Uses the function
SymbDistCrvPoint from symb_lib.
Parameters:
| Crv1: | The input curve - CagdCrvStruct.
|
|---|
| Pt: | The input point - CagdRType.
|
|---|
| BP: | isector point - CagdPType.
|
|---|
Returned Value:
| CagdBType: Returns TRUE or FALSE.
|
|---|
See Also:
SymbDistCrvPoint
Keywords:
(mvtrmpcr.c:226)
Prototype:
CagdPtStruct *MvarBsctComputeCrvPtBis(CagdCrvStruct *Crv,
CagdRType *Pt,
CagdRType t)
Description:
Given a Crv and a Pt, this function computes the point on the bisector
using determinants for a particular parameter t on the curve.
Parameters:
| Crv: | The input curve - CagdCrvStruct.
|
|---|
| Pt: | The input point - CagdRType.
|
|---|
| t: | arameter on the curve Crv - CagdRType.
|
|---|
Returned Value:
| CagdPtStruct *: The identified bisector point.
|
|---|
See Also:
SymbCrvPtBisectorCrv2D
Keywords:
(mvtrmbis.c:56)
Prototype:
void MvarBsctComputeDenomOfP(CagdCrvStruct *Crv1Inp,
CagdCrvStruct *Crv2Inp,
CagdSrfStruct **DenomOut)
Description:
Computes the denominator of the bisector surface F3 of two given curves.
Solve for the normal intersection surface in the plane and then
substitute into (the bisector's correspondance is the zero set then).
C1(s) + C2(t)
< P - -------------, C1(t) - C2(s) > = 0.
2
Parameters:
| Crv1Inp, Crv2Inp: | wo curves to compute bisectors for. Assumes
E2 curves.
|
|---|
| DenomOut: | he resulting denominator surface is stored here.
|
|---|
Returned Value:
See Also:
SymbCrvCnvxHull
SymbCrvDiameter
SymbCrvBisectors
SymbCrvBisectorsSrf2
SymbCrvBisectorsSrf
SymbCrvPtBisectorsSrf3D
SymbCrvCrvBisectorSrf3D.
Keywords:
bisectors
skeleton
(mvtrmbis.c:149)
Prototype:
void MvarBsctComputeF3(CagdCrvStruct *Crv1Inp,
CagdCrvStruct *Crv2Inp,
CagdCrvStruct **Crv1Coerced,
CagdCrvStruct **Crv2Coerced,
CagdSrfStruct **F3,
CagdSrfStruct **L1,
CagdSrfStruct **L2,
CagdSrfStruct **CC1,
CagdSrfStruct **CC2)
Description:
Computes the bisector surface definition of two curves.
The result is a scalar surface whose zero set is the set of
bisector(s) of the curves.
Solve for the normal intersection surface in the plane and then
substitute into (the bisector's correspondance is the zero set then).
C1(s) + C2(t)
< P - -------------, C1(t) - C2(s) > = 0.
2
Parameters:
| Crv1Inp, Crv2Inp: | wo curves to compute bisectors for. Assumes
E2 curves.
|
|---|
| Crv1Coerced: | .S.F.I.
|
|---|
| Crv2Coerced: | .S.F.I.
|
|---|
| F3: | The resulting bisector surface is stored here.
|
|---|
| L1: | N.S.F.I.
|
|---|
| L2: | N.S.F.I.
|
|---|
| CC1: | N.S.F.I.
|
|---|
| CC2: | N.S.F.I.
|
|---|
Returned Value:
See Also:
SymbCrvCnvxHull
SymbCrvDiameter
SymbCrvBisectors
SymbCrvBisectorsSrf2
SymbCrvBisectorsSrf
SymbCrvPtBisectorsSrf3D
SymbCrvCrvBisectorSrf3D
Keywords:
bisectors
skeleton
(mvlowenv.c:1073)
Prototype:
void MvarBsctComputeLowerEnvelope(MvarVoronoiCrvStruct *InputCurves,
MvarVoronoiCrvStruct **LowerEnvelope)
Description:
Given the monotone curves, compute the lower envelope. This is the main
calling function.
The current implementation is an improved version that uses the auxilary
MvarLECrvStruct structure for efficiency and robustness (less solver
calls).
Parameters:
| InputCurves: | A MvarVoronoiCrvStruct of monotone pieces.
|
|---|
| LowerEnvelope: | A MvarVoronoiCrvStruct of lower envelope.
|
|---|
Returned Value:
See Also:
MvarBsctComputeLowerEnvelopeAux
MvarBsctComputeLowerEnvelopeOfOverlap
MvarBsctMergeLowerEnvelopes
MvarBsctSplitEnvelope1AtEnvelope2
Keywords:
(mvtrmbis.c:483)
Prototype:
CagdRType *MvarBsctComputeXYFromBisTR(CagdCrvStruct *Crv1,
CagdRType t,
CagdCrvStruct *Crv2,
CagdRType r)
Description:
Computes the bisector point given tr-values
Parameters:
| Crv1: | First curve.
|
|---|
| t: | Parameter value of first curve.
|
|---|
| Crv2: | Second curve.
|
|---|
| r: | Parameter value of second curve.
|
|---|
Returned Value:
| CagdRType *: Bisector point from given tr.
|
|---|
Keywords:
(mvtrmpcr.c:492)
Prototype:
CagdCrvStruct *MvarBsctCrvPtCurvature(CagdCrvStruct *Crv,
CagdRType *Pt,
CagdRType Alpha)
Description:
Given the struct, this function says whether the bisector point satisfies
the Curvature constraint.
Parameters:
| Crv: | The input curve - CagdCrvStruct.
|
|---|
| Pt: | The input point - CagdRType.
|
|---|
| Alpha: | arameter of the alpha-sector - CagdRType. 0.5 for bisector.
|
|---|
Returned Value:
| CagdCrvStruct *: CagdCrvStruct of the resultant.
|
|---|
See Also:
MvarBsctCrvPtLeft
Keywords:
(mvtrmpcr.c:289)
Prototype:
CagdCrvStruct *MvarBsctCrvPtLeft(CagdCrvStruct *Crv,
CagdRType *Pt,
CagdRType Alpha)
Description:
Given the struct, this function says whether the bisector point satisfies
the Left constraint.
Parameters:
| Crv: | The input curve - CagdCrvStruct.
|
|---|
| Pt: | The input point - CagdRType.
|
|---|
| Alpha: | arameter of the alpha-sector - CagdRType. 0.5 for bisector.
|
|---|
Returned Value:
| CagdCrvStruct *: CagdCrvStruct of the resultant.
|
|---|
See Also:
MvarBsctCrvPtCurvature
Keywords:
(mvvorcrv.c:262)
Prototype:
void MvarBsctCurveLeft(MvarVoronoiCrvStruct *Cv, MvarPtStruct *Res)
Description:
A Geometric Primitive Function that returns the leftmost point of Cv.
Parameters:
| Cv: | Input curve.
|
|---|
| Res: | Output stored here.
|
|---|
Returned Value:
See Also:
MvarBsctCurveRight
Keywords:
(mvvorcrv.c:360)
Prototype:
void MvarBsctCurveRight(MvarVoronoiCrvStruct *Cv, MvarPtStruct *Res)
Description:
A Geometric Primitive Function that returns the rightmost point of Cv.
Parameters:
| Cv: | nput curve
|
|---|
| Res: | uput stored here
|
|---|
Returned Value:
See Also:
MvarBsctCurveLeft
Keywords:
(mvvorcrv.c:480)
Prototype:
int MvarBsctCv1IsYSmallerAt(MvarVoronoiCrvStruct *Cv1,
MvarVoronoiCrvStruct *Cv2,
MvarPtStruct *MidPoint)
Description:
A Geometric Primitive Function that identifies whether Cv1 has Y min.
at given mid-point parameter, assuming both curves are in range.
Parameters:
| Cv1, Cv2: | nput curves.
|
|---|
| MidPoint: | id-point parameter.
|
|---|
Returned Value:
| int: Returns TRUE or FALSE.
|
|---|
Keywords:
(mvtrmpcr.c:85)
Prototype:
CagdCrvStruct *MvarBsctDenomPtCrvBis(CagdCrvStruct *Crv,
CagdPType Pt,
CagdRType Alpha)
Description:
Computes the denominator of the alpha-/bi-sector curve of a planar curve
and a point, all in the XY plane. The result is the denominator of the
solution to the following two linear equations in alpha-/bi-sector's two
unknowns, the x and y coefficients:
=
=
where a is the Alpha of the alpha-sector, 0.5 for a bisector, Pt is the
point entity, C(t) is the curve entity and B(t) is the saught bisector.
Parameters:
| Crv: | Planar curve to compute its bisector curve with Pt.
|
|---|
| Pt: | A point in the plane to compute its bisector with Crv.
|
|---|
| Alpha: | Alpha-sector ratio (0.5 for a bisector).
|
|---|
Returned Value:
| CagdCrvStruct *: The bisector curve, in the XY plane.
|
|---|
See Also:
SymbCrvDiameter
SymbCrvCnvxHull
SymbCrvBisectorsSrf
SymbCrvCrvBisectorSrf3D
SymbSrfPtBisectorSrf3D
SymbCrvPtBisectorSrf3D
Keywords:
bisector
(mvvorcrv.c:899)
Prototype:
void MvarBsctGetAllIntersectionPoints(MvarVoronoiCrvStruct *Cv1,
MvarVoronoiCrvStruct *Cv2,
MvarPtStruct **Points)
Description:
A Geometric Primitive Function that computes the equidistant points of
three curves Cv1, Cv2 and Cv2 (third one also the second curve).
Currently implemented just by calling Skel2DEqPts3Crvs (and purges
away solutions). ToDo: implement a more efficient version, based on
the already calculated F3.
Parameters:
| Cv1, Cv2: | nput curves.
|
|---|
| Points: | The resultant points.
|
|---|
Returned Value:
See Also:
MvarBsctSkel2DEqPts3Crvs
Keywords:
(mvtrmpcr.c:1111)
Prototype:
CagdRType MvarBsctIsCrvLeftToLine(CagdCrvStruct *Crv,
CagdRType *Pt,
CagdPType LeftNormal)
Description:
This function returns the value of the cross product between two vectors.
First vector is between the point Pt and the midpoint of Crv and the
second one is between the point and the LeftNormal.
Parameters:
| Crv: | The input curve - CagdCrvStruct.
|
|---|
| Pt: | The discontinuity point on Crv.
|
|---|
| LeftNormal: | Left normal at the point Pt.
|
|---|
Returned Value:
| CagdRType: Return the value of the expression.
|
|---|
See Also:
MvarBsctTrimCrvPt
Keywords:
(mvbiscon.c:38)
Prototype:
int MvarBsctIsCurveLL(MvarVoronoiCrvStruct *Cv)
Description:
Given the struct, this function says whether the bisector point is to
the left of the curve or not.
Compute the constraints as dot products
1st constraint > 0
2nd constraint
> 0
Parameters:
Returned Value:
See Also:
MvarBsctApplyLL
Keywords:
bisectors
(mvvorcrv.c:179)
Prototype:
int MvarBsctIsXSmaller(MvarPtStruct *P1, MvarPtStruct *P2)
Description:
A Geometric Primitive Function that identifies which x-coord of the
two points P1 and P2 is smaller.
Parameters:
Returned Value:
| int: Returns true or false.
|
|---|
Keywords:
(mvsplmon.c:203)
Prototype:
MvarPtStruct *MvarBsctNewFindZeroSetOfSrfAtParam(CagdSrfStruct *Srf,
CagdRType Param,
CagdSrfDirType Dir,
CagdRType MvarBsctSubdivTol,
CagdRType MvarBsctNumerTol,
CagdBType ShouldCheckEndPoints)
Description:
Find the zeroset value at the given paramter of the given surface
Parameters:
| Srf: | Implicit surface definition.
|
|---|
| Param: | Parametric value for computation.
|
|---|
| Dir: | U or V direction for computation
|
|---|
| MvarBsctSubdivTol: | Subdivision tolerance for the multivariate solver.
|
|---|
| MvarBsctNumerTol: | Numeric tolerance of a possible numeric improvement
stage. The numeric stage is employed if
MvarBsctNumerTol < MvarBsctSubdivTol.
|
|---|
| ShouldCheckEndPoints: | o include end points also for checking.
|
|---|
Returned Value:
| MvarPtStruct *: The computed values
|
|---|
Keywords:
(mvbiscon.c:370)
Prototype:
MvarVoronoiCrvStruct *MvarBsctPurgeAwayLLAndCCConstraints(MvarVoronoiCrvStruct
*InputCrvs)
Description:
Given the struct, this function says whether the bisector point satisfies
the LL and Curvature constraints
Parameters:
| InputCrvs: | A VoronoiCrvStruct of monotone pieces
|
|---|
Returned Value:
| MvarVoronoiCrvStruct *: VoronoiCrvStruct for storing the resultant
|
|---|
See Also:
MvarBsctApplyLL
MvarBsctApplyCC
Keywords:
bisectors
(mvtrmbis.c:566)
Prototype:
MvarPtStruct *MvarBsctSkel2DEqPts3Crvs(CagdCrvStruct *Crv1Inp,
CagdCrvStruct *Crv2Inp,
CagdCrvStruct *Crv3Inp)
Description:
Formulate multivariate constraints for the points that are at equal
distance from the three primitives and solve for them. Assumes that the
three primitives are lines or curves and that they do NOT intersect.
Modified from from skel2d.c in mvar_lib to suit our needs
Parameters:
| Crv1Inp, Crv2Inp, Crv3Inp: | The three input primitives to consider.
|
|---|
Returned Value:
| MvarPtStruct *: A linked list of all equadistant points computed,
or NULL if none found.
|
|---|
Keywords:
(mvvorcrv.c:997)
Prototype:
void MvarBsctSplitCurve(MvarVoronoiCrvStruct *Cv,
MvarPtStruct *SplitPt,
MvarVoronoiCrvStruct **CvLeft,
MvarVoronoiCrvStruct **CvRight)
Description:
A Geometric Primitive Function that splits the given curve into two -
left and right curve of a given parameter t.
Parameters:
| Cv: | Input curve.
|
|---|
| SplitPt: | The parameter at which to split.
|
|---|
| CvLeft, CvRight: | he resultant split curves.
|
|---|
Returned Value:
Keywords:
(mvsplmon.c:1148)
Prototype:
void MvarBsctSplitImplicitCrvToMonotonePieces(CagdSrfStruct *Srf,
CagdSrfStruct **OutLst,
CagdRType MvarBsctSubdivTol,
CagdRType MvarBsctNumerTol)
Description:
Splits the bivariate zero set Srf=0 (implicit form) into uv-monotone
pieces. The recursive algorithm is based on the paper by Keyser et al.
Parameters:
| Srf: | Implicit surface definition.
|
|---|
| OutLst: | Output list of uv-monotone surfaces.
|
|---|
| MvarBsctSubdivTol: | Subdivision tolerance for multivariate solver.
|
|---|
| MvarBsctNumerTol: | Numeric tolerance of a possible numeric improvment
stage. The numeric stage is employed if
MvarBsctNumerTol < MvarBsctSubdivTol.
|
|---|
Returned Value:
Keywords:
(mvtrmpcr.c:1189)
Prototype:
CagdCrvStruct *MvarBsctTrimCrvPt(CagdCrvStruct *Crv,
CagdRType *Pt,
CagdRType Alpha,
CagdCrvStruct *BaseCrv)
Description:
This function returns the radial lower envelope if the input is a (list
of) crv (s) and a point or returns the trimmed bisector if the input is
a pair of crv and a point.
Parameters:
| Crv: | The input curve - CagdCrvStruct.
|
|---|
| Pt: | The input point - CagdRType.
|
|---|
| Alpha: | arameter of the alpha-sector - CagdRType. 0.5 for bisector.
|
|---|
| BaseCrv: | he Crv for which the trimming is sought along its discontinuity
point.
|
|---|
Returned Value:
| CagdCrvStruct *: Return the list of trimmed bisector curves.
|
|---|
See Also:
MvarBsctTrimCrvPtPair
MvarBsctCrvPtLeft
MvarBsctCrvPtCurvature
SymbCrvsLowerEnvelop
Keywords:
bisectors
(mvtrmpcr.c:801)
Prototype:
CagdCrvStruct *MvarBsctTrimCrvPtPair(CagdCrvStruct *Crv,
CagdRType *Pt,
CagdRType Alpha)
Description:
Given the struct, this function says whether the bisector point satisfies
the LL and Curvature constraint for a crv and a point pair and trims it
to the minimum.
Parameters:
| Crv: | The input curve - CagdCrvStruct.
|
|---|
| Pt: | The input point - CagdRType.
|
|---|
| Alpha: | arameter of the alpha-sector - CagdRType. 0.5 for bisector.
|
|---|
Returned Value:
| CagdCrvStruct *: Return the list of trimmed bisector curves.
|
|---|
See Also:
MvarBsctTrimCrvPt
MvarBsctCrvPtLeft
MvarBsctCrvPtCurvature
Keywords:
(mvlowenv.c:122)
Prototype:
void MvarBsctTrimCurveBetween(MvarVoronoiCrvStruct *Cv,
MvarPtStruct *Pt1,
MvarPtStruct *Pt2,
MvarVoronoiCrvStruct **TrimmedCurve)
Description:
Splitting the Cv at the given points Pt1 and Pt2.
Parameters:
| Cv: | Given a MvarVoronoiCrvStruct Cv.
|
|---|
| Pt1: | A MvarPtStruct.
|
|---|
| Pt2: | A MvarPtStruct.
|
|---|
| TrimmedCurve: | MvarVoronoiCrvStruct of the resultant.
|
|---|
Returned Value:
See Also:
MvarBsctComputeLowerEnvelope
MvarBsctMergeLowerEnvelopes
MvarBsctComputeLowerEnvelopeAux
MvarBsctComputeLowerEnvelopeOfOverlap
Keywords:
(mvsplmon.c:370)
Prototype:
CagdSrfStruct *MvarBsctTrimSurfaceByUVBbox(CagdSrfStruct *Srf,
CagdBBoxStruct UVBbox)
Description:
Trims the given surface Srf using the given box dimensions. Uses
CagdSrfRegionFromSrf twice.
Parameters:
| Srf: | Implicit surface definition.
|
|---|
| UVBbox: | Given box dimensions.
|
|---|
Returned Value:
| CagdSrfStruct *: The trimmed surface
|
|---|
Keywords:
(mvar_der.c:123)
Prototype:
MvarMVStruct *MvarBspMVDerive(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Given a Bspline multi-variate, computes its partial derivative
multi-variate in direction Dir.
Let old control polygon be P(i), i = 0 to k-1, and Q(i) be new one.
Then:
Q(i) = (k - 1) * (P(i+1) - P(i)) / (Kv(i + k) - Kv(i + 1)), i = 0 to k-2.
This function computes the derivative of a rational function component-
wise with out taking into consideration the quotient rule.
Parameters:
| MV: | Multi-Variate to differentiate.
|
|---|
| Dir: | Direction of differentiation.
|
|---|
Returned Value:
| MvarMVStruct *: Differentiated multi-variate in direction Dir. A
Bspline multi-variate.
|
|---|
Keywords:
multi-variates
(mvbspsym.c:207)
Prototype:
MvarMVStruct *MvarBspMVDeriveRational(MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Given a rational Bspline multivariates - computes its derivative surface
in direction Dir, using the quotient rule for differentiation.
Parameters:
| MV: | Rational Bspline multivariate to differentiate.
|
|---|
| Dir: | Direction of Differentiation.
|
|---|
Returned Value:
| MvarMVStruct *: Differentiated rational Bspline multivariate.
|
|---|
See Also:
MvarMVDerive
MvarBzrMVDerive
MvarBspMVDerive
MvarBzrMVDeriveRational
Keywords:
derivatives
(mvar_aux.c:1765)
Prototype:
CagdBType MvarBspMVInteriorKnots(const MvarMVStruct *MV, CagdRType *Knot)
Description:
Returns -1 if the given Bspline multivariate has not interior knots in
no direction. Otherwise, return the direction that has an interior knot
and returns the knot velue in Knot.
Parameters:
| MV: | To check for interior knots.
|
|---|
| Knot: | Where to return an interior knot if found one.
|
|---|
Returned Value:
| CagdBType: -1 if MV has no interior knots, Axis of interior knot
otherwise.
|
|---|
See Also:
BspCrvHasOpenEC
MvarBspMVIsOpen
MvarBspMVIsOpenInDir
MvarBspMVIsPeriodicInDir
Keywords:
Internal knots
Bezier
(mvar_aux.c:1671)
Prototype:
CagdBType MvarBspMVIsOpen(const MvarMVStruct *MV)
Description:
Returns TRUE iff the given Bspline multivariate has open end coditions in
all direction directions.
Parameters:
| MV: | To check for open end conditions.
|
|---|
Returned Value:
| CagdBType: TRUE, if MV has open end conditions in all directions, FALSE
otherwise.
|
|---|
See Also:
BspCrvHasOpenEC
MvarBspMVIsOpenInDir
MvarBspMVIsOpenInDir
Keywords:
open end conditions
(mvar_aux.c:1643)
Prototype:
CagdBType MvarBspMVIsOpenInDir(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Returns TRUE iff the given Bspline multivariate has open end coditions in
the specified direction Dir.
Parameters:
| MV: | To check for open end conditions.
|
|---|
| Dir: | Direction to test for open end conditions.
|
|---|
Returned Value:
| CagdBType: TRUE, if MV has open end conditions in Dir, FALSE otherwise.
|
|---|
See Also:
BspCrvHasOpenEC
MvarBspMVIsOpen
MvarBspMVIsPeriodic
MvarBspMVIsPeriodicInDir
Keywords:
open end conditions
(mvar_aux.c:1732)
Prototype:
CagdBType MvarBspMVIsPeriodic(const MvarMVStruct *MV)
Description:
Returns TRUE iff the given Bspline multivariate has periodic end coditions
in at least one direction.
Parameters:
| MV: | To check for periodic end conditions.
|
|---|
Returned Value:
| CagdBType: TRUE, if MV has periodic end conditions in some Dir, FALSE
otherwise.
|
|---|
See Also:
BspCrvHasOpenEC
MvarBspMVIsOpen
MvarBspMVIsOpenInDir
MvarBspMVIsPeriodicInDir
MvarBspMVInteriorKnots
Keywords:
periodic end conditions
(mvar_aux.c:1708)
Prototype:
CagdBType MvarBspMVIsPeriodicInDir(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Returns TRUE iff the given Bspline multivariate has periodic end coditions
in the specified direction Dir.
Parameters:
| MV: | To check for periodic end conditions.
|
|---|
| Dir: | Direction to test for periodic end conditions.
|
|---|
Returned Value:
| CagdBType: TRUE, if MV has periodic end conditions in Dir, FALSE
otherwise.
|
|---|
See Also:
BspCrvHasOpenEC
MvarBspMVIsOpen
MvarBspMVIsOpenInDir
MvarBspMVIsPeriodic
Keywords:
periodic end conditions
(mvar_ref.c:87)
Prototype:
MvarMVStruct *MvarBspMVKnotInsertNDiff(const MvarMVStruct *MV,
MvarMVDirType Dir,
int Replace,
CagdRType *t,
int n)
Description:
Given a Bspline multi-variate, inserts n knots with different values as
defined by t.
If, however, Replace is TRUE, the knot are simply replacing the current
knot vector in the prescribed direction.
Parameters:
| MV: | Multi-variate to refine according to t in direction Dir.
|
|---|
| Dir: | Direction of refinement. Either U or V or W.
|
|---|
| Replace: | If TRUE t is a knot vector exactly in the length of the knot
vector in direction Dir in MV and t simply replaces that knot
vector. If FALSE, the knot vector in direction Dir in MV is
refined by adding all the knots in t.
|
|---|
| t: | Knot vector to refine/replace the knot vector of MV in
direction Dir.
|
|---|
| n: | Length of vector t.
|
|---|
Returned Value:
| MvarMVStruct *: The refined multi-variate. A Bspline multi-variate.
|
|---|
Keywords:
multi-variates
(mvbspsym.c:63)
Prototype:
MvarMVStruct *MvarBspMVMult(const MvarMVStruct *CMV1, const MvarMVStruct *CMV2)
Description:
Given two Bspline multivariates - multiply them coordinatewise.
The two multivariates are promoted to same point type before
multiplication can take place.
See also BspMultComputationMethod.
Parameters:
| CMV1, CMV2: | The two multivariates to multiply.
|
|---|
Returned Value:
| MvarMVStruct *: The product MV1 * MV2 coordinatewise.
|
|---|
Keywords:
product
(mvar_gen.c:171)
Prototype:
MvarMVStruct *MvarBspMVNew(int Dim,
const int *Lengths,
const int *Orders,
MvarPointType PType)
Description:
Allocates the memory required for a new Bspline multi-variate.
Parameters:
| Dim: | Number of dimensions of this multivariate.
|
|---|
| Lengths: | Of control mesh in each of the dimensions. Vector of size Dim.
|
|---|
| Orders: | Of multi variate function in each of the dimensions.
|
|---|
| PType: | Type of control points (E2, P3, etc.).
|
|---|
Returned Value:
| MvarMVStruct *: An uninitialized freeform multi-variate Bspline.
|
|---|
See Also:
MvarMVFree
MvarBzrMVNew
MvarMVNew
MvarPwrMVNew
Keywords:
multi-variates
allocation
(mvar_sub.c:229)
Prototype:
MvarMVStruct *MvarBspMVSubdivAtParam(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir)
Description:
Given a Bspline multi-variate, subdivides it at parameter value t in
direction Dir.
Parameters:
| MV: | BsplineMulti-Variate to subdivide.
|
|---|
| t: | Parameter to subdivide at.
|
|---|
| Dir: | Direction of subdivision.
|
|---|
Returned Value:
| MvarMVStruct *: A list of two multi-variates, result of the subdivision.
|
|---|
See Also:
MvarMVSubdivAtParam
MvarBzrMVSubdivAtParam
Keywords:
multi-variates
(mvbspsym.c:39)
Prototype:
int MvarBspMultComputationMethod(int BspMultUsingInter)
Description:
Sets method of Bspline product computation.
Parameters:
| BspMultUsingInter: | If TRUE, Bspline product is computed by setting an
interpolation problem. Otherwise, by decomposing the
Bspline geometry to Bezier geometry.
|
|---|
Returned Value:
Keywords:
product
(selfintr.c:1927)
Prototype:
MvarPtStruct *MvarBspSrfSelfInterDiagFactor(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a Bspline surface, S, compute its self intersections, if any, by
dividing it at all internal knots and examining all patches against all
other patches. Diagonal patches should also be examined against
themselves with the aid of MvarBzrSrfSelfInterDiagFactor.
Adjacent patches are sharing an edge (a curve) and hence spacial care
is taken in those cases to eliminate and ignore that shared curve, in
MvarAdjacentSrfSrfInter.
Parameters:
| Srf: | The surface to derive its self intersections.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | Tolerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| MvarPtStruct *: List of self intersection points, as (u, v) parameter
pairs into the surfaces' domain. Points in R^4.
|
|---|
See Also:
MvarAdjacentSrfSrfInter
MvarBzrSrfSelfInterDiagFactor
Keywords:
(mvar_aux.c:1804)
Prototype:
MvarMVStruct *MvarBzrLinearInOneDir(int Dim, int Dir, MvarPointType PType)
Description:
Creates a Bezier multivariate that is constant in all directions but one.
Parameters:
| Dim: | DImension f the sought multivariate Bezier.
|
|---|
| Dir: | The direction that is to be linear, between 0 and Dim-1.
|
|---|
| PType: | ype of points of this new multivariate.
|
|---|
Returned Value:
| MvarMVStruct *: The constructed multivariate.
|
|---|
See Also:
Keywords:
(mvar_der.c:63)
Prototype:
MvarMVStruct *MvarBzrMVDerive(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Given a Bezier multi-variate, computes its partial derivative
multi-variate in direction Dir.
Let old control polygon be P(i), i = 0 to k-1, and Q(i) be new one.
Then:
Q(i) = (k - 1) * (P(i+1) - P(i)), i = 0 to k-2.
This function computes the derivative of a rational function component-
wise with out taking into consideration the quotient rule.
Parameters:
| MV: | Multi-Variate to differentiate.
|
|---|
| Dir: | Direction of differentiation.
|
|---|
Returned Value:
| MvarMVStruct *: Differentiated multi-variate in direction Dir. A
Bezier multi-variate.
|
|---|
Keywords:
multi-variates
(mvbzrsym.c:208)
Prototype:
MvarMVStruct *MvarBzrMVDeriveRational(MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Given a rational Bezier multivariates - computes its derivative surface
in direction Dir, using the quotient rule for differentiation.
Parameters:
| MV: | Rational Bezier multivariate to differentiate.
|
|---|
| Dir: | Direction of Differentiation.
|
|---|
Returned Value:
| MvarMVStruct *: Differentiated rational Bezier multivariate.
|
|---|
See Also:
MvarMVDerive
MvarBzrMVDerive
MvarBzrMVDerive
MvarBzrMVDeriveRational
Keywords:
derivatives
(mvbzrsym.c:32)
Prototype:
MvarMVStruct *MvarBzrMVMult(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two Bezier multivariates - multiply them coordinatewise.
The two multivariates are promoted to same point type before
multiplication can take place.
See also BzrMultInterpFlag.
Parameters:
| MV1, MV2: | The two multivariates to multiply.
|
|---|
Returned Value:
| MvarMVStruct *: The product MV1 * MV2 coordinatewise.
|
|---|
Keywords:
product
(mvar_gen.c:212)
Prototype:
MvarMVStruct *MvarBzrMVNew(int Dim, const int *Lengths, MvarPointType PType)
Description:
Allocates the memory required for a new Bezier multi-variate.
Parameters:
| Dim: | Number of dimensions of this multivariate.
|
|---|
| Lengths: | Of control mesh in each of the dimensions. Vector of size Dim.
|
|---|
| PType: | Type of control points (E2, P3, etc.).
|
|---|
Returned Value:
| MvarMVStruct *: An uninitialized freeform multi-variate Bezier.
|
|---|
See Also:
MvarMVFree
MvarMVNew
MvarBspMVNew
MvarPwrMVNew
Keywords:
multi-variates
allocation
(mvar_sub.c:175)
Prototype:
MvarMVStruct *MvarBzrMVSubdivAtParam(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir)
Description:
Given a Bezier multi-variate, subdivides it at parameter value t in
direction Dir.
Parameters:
| MV: | Bezier Multi-Variate to subdivide.
|
|---|
| t: | Parameter to subdivide at.
|
|---|
| Dir: | Direction of subdivision.
|
|---|
Returned Value:
| MvarMVStruct *: A list of two multi-variates, result of the subdivision.
|
|---|
See Also:
MvarBspMVSubdivAtParam
MvarMVSubdivAtParam
Keywords:
multi-variates
(selfintr.c:1269)
Prototype:
void MvarBzrSelfInter4VarDecomp(const CagdSrfStruct *Srf,
MvarMVStruct **U1MinusU3Factor,
MvarMVStruct **U2MinusU4Factor)
Description:
Given a 2-variate Bezier function, Srf, that is to be subtracted from
itself as,
F(u1, u2, u3, u4) = Srf(u1, u2) - Srf(u3, u4),
computes a decomposition for F as
F(u1, u2, u3, u4) = (u1 - u3) G(u1, u2, u3, u4) +
(u2 - u4) H(u1, u2, u3, u4),
that is known to always exist.
Parameters:
| Srf: | The 2-variate to subtract against itself and decompose.
|
|---|
| U1MinusU3Factor: | he G function above.
|
|---|
| U2MinusU4Factor: | he H function above.
|
|---|
Returned Value:
See Also:
Keywords:
(selfintr.c:1542)
Prototype:
MvarPtStruct *MvarBzrSrfSelfInterDiagFactor(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a Bezier surface, S, compute its self intersections, if any, by
computing a (u1 - u3) G(u1, u2, u3, u4) + (u2 - u4) H(u1, u2, u3, u4)
decomposition for the 4-variate function of S(u1, u2)-S(u3, u4).
The self intersection is then derived as the solution of:
Gx Hy - Gy Hx = 0,
Gx Hz - Gz Hx = 0,
(u1 - u3) Gx + (u2 - u4) Hx = 0.
The first two equations ensure the G an H are parallel while the last
guarantee a zero point in X (which is therefore a zero point in Y an Z.)
Due to signularities in these equations, all six equations of the form:
Gx Hy - Gy Hx = 0,
Gx Hz - Gz Hx = 0,
Gy Hz - Gz Hy = 0,
(u1 - u3) Gx + (u2 - u4) Hx = 0,
(u1 - u3) Gy + (u2 - u4) Hy = 0,
(u1 - u3) Gz + (u2 - u4) Hz = 0,
are employed during the subdivision stage.
Parameters:
| Srf: | The surface to derive its self intersections.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | Tolerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| MvarPtStruct *: List of self intersection points, as (u, v) parameter
pairs into the surfaces' domain. Points in R^4.
|
|---|
See Also:
MvarBzrSelfInter4VarDecomp
Keywords:
(mvtangnt.c:575)
Prototype:
MvarPtStruct *MvarCircTanTo2Crvs(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Radius,
CagdRType Tol)
Description:
Computes all circles of prescribed radius that are tangent to given two
curves.
Solves for circles' centers P(x, y), using the following four equations
in four unknowns (x, y, r, t), and R is the desired circle radius:
||C1(t) - P||^2 = R^2,
||C2(r) - P||^2 = R^2,
< C1(t) - P, C1'(t) > = 0,
< C2(t) - P, C2'(t) > = 0.
Parameters:
| Crv1, Crv2: | he two curves to find the circles that is tangent to both.
|
|---|
| Radius: | Of all the circle(s) that is tangent to Crv1/2.
|
|---|
| Tol: | Tolerance of approximation. Subdiv Tol of MV Zeros.
|
|---|
Returned Value:
| MvarPtStruct *: List of the 4-tuples as (r, t, x, y).
|
|---|
See Also:
SymbCircTanTo2Crvs
Keywords:
bi-tangent
(mvar_gen.c:1457)
Prototype:
MvarMVStruct *MvarCnvrtBsp2BzrMV(const MvarMVStruct *MV)
Description:
Converts a Bspline multi-variate into a Bezier multi-variate by splitting
at all interior knots.
Parameters:
| MV: | A Bspline multi-variate to convert to Bezier MVs.
|
|---|
Returned Value:
| MvarMVStruct *: A list of Bezier multi-variate representing the same
geometry as the given Bspline MV.
|
|---|
Keywords:
conversion
multi-variate
(mvar_gen.c:1418)
Prototype:
MvarMVStruct *MvarCnvrtBzr2BspMV(const MvarMVStruct *MV)
Description:
Converts a Bezier multi-variate into a Bspline multi-variate by adding two
open end uniform knot vectors to it.
Parameters:
| MV: | A Bezier multi-variate to convert to a Bspline MV.
|
|---|
Returned Value:
| MvarMVStruct *: A Bspline multi-variate representing the same geometry
as the given Bezier MV.
|
|---|
Keywords:
conversion
multi-variate
(mvbzrpwr.c:62)
Prototype:
MvarMVStruct *MvarCnvrtBzr2PwrMV(const MvarMVStruct *MV)
Description:
Converts the given multivariate from Bezier basis functions to a Power
basis functions. Using:
n
__
n \ p-i n p p
B (t) = / (-1) ( ) ( ) t
i -- p i
p=i
or
n0 n1 nm
B (u0) B (v1) ... B (um) =
i0 i1 im
n0 nm
__ __
\ \ p0-i0 n0 p0 pm-im nm pm p0 pm
/ ... / (-1) ( ) ( ) ... (-1) ( ) ( ) u0 ... um
-- -- p0 i0 pm im
p0=i0 pm=im
This routine simply take the weight of each product of m Bezier basis
functions B0(u0)... Bm(u0) and spread it into the different power basis
u0^p0 ...um^pm functions scaled by:
p0-i0 n0 p0 pm-im nm pm
(-1) ( ) ( ) ... (-1) ( ) ( )
p0 i0 pm im
Parameters:
| MV: | To convert into Power basis function representation.
|
|---|
Returned Value:
| MvarMVStruct *: Same geometry, but in the Power basis.
|
|---|
See Also:
MvarCnvrtPwr2BzrMV
CagdCnvrtBzr2PwrSrf
CagdCnvrtPwr2BzrSrf
Keywords:
power basis
conversion
(mvar_aux.c:1590)
Prototype:
MvarMVStruct *MvarCnvrtFloat2OpenMV(const MvarMVStruct *MV)
Description:
Converts a float Bspline multivariate to a Bspline multivariate with open
end conditions.
Parameters:
| MV: | Bspline multivariate to convert to open end conditions.
|
|---|
Returned Value:
| MvarMVStruct *: A Bspline multivariate with open end conditions,
representing the same geometry as MV.
|
|---|
See Also:
MvarCnvrtPeriodic2FloatMV
CnvrtFloat2OpenMV
Keywords:
conversion
(mvar_pll.c:431)
Prototype:
IPObjectStruct *MvarCnvrtMVPtsToCtlPts(const MvarPtStruct *MVPts,
IrtRType MergeTol)
Description:
Converts a list of multivariate points into a list of control points.
Assumes all points of same dimensions.
Parameters:
| MVPts: | List of multivariate points to convert to list of ctlpts.
|
|---|
| MergeTol: | If non negative, attempt to merge the data into polylines.
|
|---|
Returned Value:
| IPObjectStruct *: A list object of ctlpts.
|
|---|
See Also:
MvarCnvrtMVPtsToPolys
Keywords:
(mvar_pll.c:499)
Prototype:
IPObjectStruct *MvarCnvrtMVPtsToPolys(const MvarPtStruct *MVPts,
const MvarMVStruct *MV,
IrtRType MergeTol)
Description:
Converts a list of multivariate points into a list of polylines.
Assumes all points of same dimensions.
Parameters:
| MVPts: | List of multivariate points to convert to polylines.
|
|---|
| MV: | A multivariate to evaluate through, if not NULL.
|
|---|
| MergeTol: | Tolerance to merge points into polylines.
|
|---|
Returned Value:
| IPObjectStruct *: A list object of polylines.
|
|---|
See Also:
MvarCnvrtMVPtsToCtlPts
MvarCnvrtMVPtsToPolys2
Keywords:
(mvar_pll.c:569)
Prototype:
IPPolygonStruct *MvarCnvrtMVPtsToPolys2(const MvarPtStruct *InPts,
CagdRType FineNess,
int Dim,
IrtRType *ParamDomain)
Description:
Connect a list of discrete points into a polylines.
Parameters:
| InPts: | A list of discrete points.
|
|---|
| FineNess: | Tolerance.
|
|---|
| Dim: | The dimension of discrete points, 1 to 3.
|
|---|
| ParamDomain: | The domain of the mvar points.
|
|---|
Returned Value:
| IPPolygonStruct *: Connected list of polylines.
|
|---|
See Also:
MvarCnvrtMVPtsToCtlPts
MvarCnvrtMVPtsToPolys
Keywords:
(mvar_aux.c:1515)
Prototype:
MvarMVStruct *MvarCnvrtPeriodic2FloatMV(const MvarMVStruct *MV)
Description:
Converts a Bspline multivariate into a Bspline multivariate with floating
end conditions.
Parameters:
| MV: | Bspline multivariate to convert to floating end conditions.
Assume MV is either periodic or has floating end condition.
|
|---|
Returned Value:
| MvarMVStruct *: A Bspline multivariate with floating end conditions,
representing the same geometry as MV.
|
|---|
See Also:
CnvrtPeriodic2FloatMV
MvarCnvrtFloat2OpenMV
Keywords:
conversion
(mvbzrpwr.c:163)
Prototype:
MvarMVStruct *MvarCnvrtPwr2BzrMV(const MvarMVStruct *MV)
Description:
Converts the given multivariate from Power basis functions to Bezier basis
functions. Using:
n0 nm i0 im
__ __ ( ) ... ( )
p0 pm \ \ p0 pm n0 nm
u0 ... um = / ... / -------------- B (u0) ... B (um)
-- -- n0 nm i0 im
i0=p0 im=pm ( ) ... ( )
p0 pm
This routine simply take the weight of each product of m power basis
functions u0^p0 ...um^pm and spread it into the different Bezier basis
B0(u0)... Bm(u0) functions scaled by:
i0 im
( ) ... ( )
p0 pm
--------------
n0 nm
( ) ... ( )
p0 pm
Parameters:
| MV: | To convert into Bezier basis function representation.
|
|---|
Returned Value:
| MvarMVStruct *: Same geometry, but in the Bezier basis.
|
|---|
See Also:
MvarCnvrtBzr2PwrMV
CagdCnvrtBzr2PwrMV
MvarCnvrtPwr2BzrMV
Keywords:
power basis
conversion
(mvarcoer.c:52)
Prototype:
MvarMVStruct *MvarCoerceMVTo(const MvarMVStruct *MV, MvarPointType PType)
Description:
Coerces a multi-variate to point type PType.
Parameters:
| MV: | To coerce to a new point type PType.
|
|---|
| PType: | New point type for MV.
|
|---|
Returned Value:
| MvarMVStruct *: A new multi-variate with PType as its point type.
|
|---|
Keywords:
coercion
(mvarcoer.c:25)
Prototype:
MvarMVStruct *MvarCoerceMVsTo(const MvarMVStruct *MV, MvarPointType PType)
Description:
Coerces a list of multivariates to point type PType.
Parameters:
| MV: | To coerce to a new point type PType.
|
|---|
| PType: | New point type for MV.
|
|---|
Returned Value:
| MvarMVStruct *: New multivariates with PType as their point type.
|
|---|
Keywords:
coercion
(mvtrmbis.c:371)
Prototype:
CagdRType *MvarComputeInterMidPoint(CagdCrvStruct *Crv1,
CagdRType t1,
CagdCrvStruct *Crv2,
CagdRType t2)
Description:
Computes the intersection point of the normals of the given two points
on the given two curves. Taken from crvskel.c - need to modify to avoid
artifacts in near parallel normals.
Parameters:
| Crv1: | First curve of the matching mid point.
|
|---|
| t1: | Parameter value of first curve's mid point.
|
|---|
| Crv2: | Second curve of the matching mid point.
|
|---|
| t2: | Parameter value of second curve's mid point.
|
|---|
Returned Value:
| CagdRType *: Point of intersection, statically allocated.
|
|---|
Keywords:
(ray-trap.c:75)
Prototype:
MvarPtStruct *MvarComputeRayTraps(const CagdCrvStruct *Crvs,
int Orient,
CagdRType SubdivTol,
CagdRType NumerTol,
CagdBType UseExprTree)
Description:
Computes solutions to locations on the given curves that would bounce
rays from one curve to the next in a closed loop.
Parameters:
| Crvs: | List of curves to handle in order (cyclically).
|
|---|
| Orient: | Pick the proper orientation with respect to the normal if
TRUE. May be faster at times.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the curves.
|
|---|
| NumerTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
| UseExprTree: | TRUE to use expression trees in the computation, FALSE to
use regular multivariate expressions.
|
|---|
Returned Value:
| MvarPtStruct *: Linked list of solutions, each holding the parameter
values of the different Crvs.
|
|---|
Keywords:
(raytrp3d.c:79)
Prototype:
MvarPtStruct *MvarComputeRayTraps3D(const CagdSrfStruct *Srfs,
int Orient,
CagdRType SubdivTol,
CagdRType NumerTol,
CagdBType UseExprTree)
Description:
Computes solutions to locations on the given surfaces that would bounce
rays from one surface to the next in a closed loop.
Parameters:
| Srfs: | List of surfaces to handle in order (cyclically).
|
|---|
| Orient: | Pick the proper orientation with respect to the normal if
TRUE. May be faster at times.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumerTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
| UseExprTree: | TRUE to use expression trees in the computation, FALSE to
use regular multivariate expressions.
|
|---|
Returned Value:
| MvarPtStruct *: Linked list of solutions, each holding the parameter
values of the different Srfs.
|
|---|
Keywords:
(mvvorcel.c:153)
Prototype:
IPObjectStruct *MvarComputeVoronoiCell(CagdCrvStruct *Crv)
Description:
Computes the Voronoi cell of the first curve in the given list of
curves. For the details of the algorithm, see the following paper.
*
Precise Voronoi Cell Extraction of Free-form Rational Planar Closed
Curves.
Iddo Hanniel, Ramanathan Muthuganapathy, Gershon Elber, Myung-Soo Kim
ACM Symposium on Solid and Physical Modeling, 2005.
The following are the files used for computing the Voronoi cell
mvvorcel.c - Main function that call other function. It takes the input
curves, process them for discontinuities and calls other functions.
Displaying the output is also done in this function.
mvsplmon.c - The function that creates monotone segments.
mvbiscon.c - The monotone segments obtained from mvsplmon.c are then
subjected to orientation and curvature constraint functions written in
this file.
mvtrmbis.c - Auxillary functions required for trimming are written here.
mvtrmpcr.c - This file does the trimming of point/crv bisector.
mvlowenv.c - Functions in this file compute the lower envelope.
mvvorcrv.c - Operations on the MvarVoronoiCrvStruct are available in
this file.
Dependency of each of the above file is depicted in the following diagram:
vorcel, vorcrv
\ /
--------------
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
splmon biscon trmpcr lowenv
\ /
-------------------------------------------
|
|
|
\ /
trmbis
Parameters:
| Crv: | List of curves to compute the Voronoi cell.
|
|---|
Returned Value:
| IPObjectStruct *: Returns the Voronoi cell.
|
|---|
Keywords:
(selfintr.c:420)
Prototype:
MvarPtStruct *MvarCrvAntipodalPoints(const CagdCrvStruct *CCrv,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes antipodal points in the given curve - pairs of points C(t)
and C(r) such that (t and r are two independent parameters of same curve):
< C(t) - C(r), dC(t)/dt > = 0,
< C(t) - C(r), dC(r)/dr > = 0.
Direct attempt to solve this set of constraints is bound to be slow as
all points in Crv satisfy these equations when t == r. The key is in
adding a third inequality constaint of the form
< C'(t), C'(r) > < 0.
Antipodal points must exists if Crv self intersect in a closed loop and
hence can help in detecting self-intersections. Further, the diameter of
Crv could be easily deduced from the antipodal points.
Note this function also captures the self-intersection locations
C(t) = C(r), for which the dot product of the tangents is negative.
Parameters:
| CCrv: | To detect its antipodal points.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: Antipodal points, as points in E2 (r, t).
|
|---|
See Also:
MVarCrvDiameter
SymbCrvDiameter
MvarSrfAntipodalPoints
MvarHFDistAntipodalCrvCrvC1
Keywords:
(mvarintr.c:84)
Prototype:
MvarPtStruct *MvarCrvCrvInter(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType UseExprTree)
Description:
Computes the intersection locations of two planar curves, possibly with
multivariate expression trees. Expression trees could be beneficial
comptationally when the geometry is complex (i.e. dozens of control points
or more).
Parameters:
| Crv1, Crv2: | Two curves to intersect.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
| UseExprTree: | TRUE to use expression trees in the computation, FALSE to
use regular multivariate expressions.
|
|---|
Returned Value:
| MvarPtStruct *: List of intersection points, as parameter pairs into
the two curves domains.
|
|---|
See Also:
CagdCrvCrvInter
SymbCrvCrvInter
SymbSrfSrfSrfInter
MvarSrfSrfContact
Keywords:
(hasdrf2d.c:1092)
Prototype:
MvarPtStruct *MvarCrvCrvMinimalDist(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType *MinDist,
CagdBType ComputeAntipodals,
CagdRType Eps)
Description:
Computes the minimal distance between two given planar C1 curves.
This minimal distance can occur:
1. At intersection locations, if any.
2. At end points vs. end points.
3. At the end points vs interior locations.
4. At antipodal interior locations.
Parameters:
| Crv1: | To detect its minimal distance to Crv2.
|
|---|
| Crv2: | To detect its minimal distance to Crv1.
|
|---|
| MinDist: | Upon return, is set to the minimal distance detected.
|
|---|
| ComputeAntipodals: | TRUE to compute antipodal locations as well in the
search for minimal distance. If FALSE, samples are made
along both curves and closest locations to other curve
are computed.
|
|---|
| Eps: | Numeric tolerance of the computation.
|
|---|
Returned Value:
| MvarPtStruct *: Pairs of parameters at the minimal distance.
|
|---|
See Also:
MvarCrvCrvAntipodalPoints
SymbDistCrvPoint
CagdCrvCrvInter
Keywords:
(mv_crvtr.c:230)
Prototype:
MvarMVStruct *MvarCrvCrvtrByOneCtlPt(const CagdCrvStruct *Crv,
int CtlPtIdx,
CagdRType Min,
CagdRType Max)
Description:
Given a parametric curve, Crv, and a control point index CtlPtIdx,
compute the curvature sign field of the curve as function of the Euclidean
locations of control point index CtlPtIdx. Returned is a multivariate of
dimension "1 + Dim(Crv)", where Dim(Crv) is the dimension of the curve
(E2, E3, etc.).
Parameters:
| Crv: | To compute its curvature behaviour (convex vs. concave) as a
function of the curve parameter and the Euclidean coordiate
of the CtlPtIdx's control point.
|
|---|
| CtlPtIdx: | Index of control point to make a parameter for the curvature.
|
|---|
| Min, Max: | Domain each coordinate of CtlPtIdx point should vary.
|
|---|
Returned Value:
| MvarMVStruct *: The computed curvature field of Crv.
|
|---|
See Also:
SymbCrv2DCurvatureSign
MvarCrvMakeCtlPtParam
UserCrvCrvtrByOneCtlPt
Keywords:
curvature
(mvar_rev.c:301)
Prototype:
MvarMVStruct *MvarCrvMakeCtlPtParam(const CagdCrvStruct *Crv,
int CtlPtIdx,
CagdRType Min,
CagdRType Max)
Description:
Given a polynomal curve and an index of a control point, CtlPtIdx,
construct a new multiariate where the i'th control points is mapped to 2nd
and above parameters of the returned multivariate. The first parameter of
the multivariate remains the input curves' parameter. For example, if the
input curve is E2 (planar), a trivariate will be returned, M(t, x, y),
where t is the original curve's parameter and x and y parametrize the
Euclidean values of the CtlPtIdx control point.
Parameters:
| Crv: | Curve to make its i'th control point a parameter.
|
|---|
| CtlPtIdx: | Index of control point to make a parameter.
|
|---|
| Min, Max: | Domain each coordinate of CtlPtIdx point should vary.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariate parametrizing both the original curve
and the CtlPtIdx's control points Euclidean values.
|
|---|
Keywords:
(selfintr.c:904)
Prototype:
MvarPtStruct *MvarCrvSelfInterDiagFactor(const CagdCrvStruct *Crv,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes self intersection points for given curve using the following
constraints r and t are two independent params of the same crv:
x(r) - x(t) = 0,
y(r) - y(t) = 0.
Direct attempt to solve this set of constraints is bound to be slow as
all points in Crv satisfy these equations when r == t. The key here is
to remove all (u - v) factors off diagonal Bezier patches of the above.
Parameters:
| Crv: | To detect its self intersection points.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: Self intersection points, as points in E4 (r, t).
|
|---|
See Also:
MvarCrvAntipodalPoints
MvarSrfSelfInterNrmlDev
MvarCrvSelfInterNrmlDev
Keywords:
(selfintr.c:732)
Prototype:
MvarPtStruct *MvarCrvSelfInterNrmlDev(const CagdCrvStruct *CCrv,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType MinNrmlDeviation)
Description:
Computes self intersection points for given curve using the following
constraints r and t are two independent params of the same crv):
x(r) - x(t) = 0,
y(r) - y(t) = 0.
Direct attempt to solve this set of constraints is bound to be slow as
all points in Crv satisfy these equations when r == t. The key is in
adding a third inequality constaint of the form
< N(r), N(t) >
---------------------- < Cos(Angle),
|| N(r) || || N(t) ||
Where Cos(Angle) is a provided constant that prescribes the minimal
angle the curve is expected to intersect at. The closer Cos(Angle) to
one the more work this function will have to do in order to isolate the
self intersection points. The above expression is not rational and so,
we use a logical or of the following two expressions:
< N(r), N(t) >^2
-------------------------- < Cos^2(Angle),
|| N(r) ||^2 || N(t) ||^2
or
< N(r), N(t) > < 0.
Parameters:
| CCrv: | To detect its self intersection points.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
| MinNrmlDeviation: | At the intersection points. Zero for 90 degrees
minimum deviation, positive for smaller minimal deviation and
negative for a larger minimal deviation.
|
|---|
Returned Value:
| MvarPtStruct *: Self intersection points, as points in E4 (r, t).
|
|---|
See Also:
MvarCrvAntipodalPoints
MvarSrfSelfInterNrmlDev
Keywords:
(mvbisect.c:100)
Prototype:
MvarMVStruct *MvarCrvSrfBisector(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2)
Description:
Computes the bisectors of a curve and a surface in R^4.
Parameters:
| CMV1: | The univariate (curve) in R^4.
|
|---|
| CMV2: | The bivariate (surface) in R^4.
|
|---|
Returned Value:
| MvarMVStruct *: The resulting bisector.
|
|---|
See Also:
MvarMVsBisector
MvarSrfSrfBisector
MvarCrvSrfBisectorApprox
Keywords:
bisectors
(mvbisect.c:453)
Prototype:
VoidPtr MvarCrvSrfBisectorApprox(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
int OutputType,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes an approximation to the bisector of a curve and a surface.
Let C(t) be the parametric curve and T(t) its unnormalized tangent field.
Let S(u,v) be the parametric surface and n(u, v) its unnormalized normal.
Then:
< P - C(t), T(t) > = 0 defines the normal plane of T(t),
and the solution of
< S(u, v) + n(u, v) Alpha - C(t), T(t) > = 0
finds the intersection point of of the normal of the surface with the
normal plane of the curve. Then,
< C(t) - S(u, v), T(t) >
Alpha(u, v, t) = ------------------------
< n(u, v), T(t) >
We now can define this intersection point, P, as
P(u, v, t) = S(u, v) + Alpha(u, v, t) n(u, v)
and end up with a single function we must extract its zero set
< C(t) - P(u, v, t), C(t) - P(u, v, t) > -
< S(u, v) - P(u, v, t), S(u, v) - P(u, v, t) > = 0
or
< C(t) - P(u, v, t), C(t) - P(u, v, t) > -
< Alpha(u, v, t) n(u, v), Alpha(u, v, t) n(u, v) > = 0
Finding the zero set of the last equation provides the correspondance
between the (u, v) location and the surface and (t) locations on the curve
that serve as mutual foot point for some bisector point.
Parameters:
| CMV1: | The univariate (curve) in R^3.
|
|---|
| CMV2: | The bivariate (surface) in R^3.
|
|---|
| OutputType: | xpected output type:
1. For the computed multivariate constraints.
2. For the computed point cloud on the bisector.
3. Points in a form of (u, v, x, y, z) where (u, v) are
the parameter space of the surface.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | olerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| VoidPtr: Following OutputType, either a set of multivariates (as a
linked list of MvarMVStruct), or a cloud of points on the
bisector (as a linked list of MvarPtStruct).
|
|---|
See Also:
MvarMVsBisector
MvarSrfSrfBisector
MvarCrvSrfBisector
MvarSrfSrfBisectorApprox
Keywords:
bisectors
(hasdrf3d.c:830)
Prototype:
MvarPtStruct *MvarCrvSrfMinimalDist(const CagdSrfStruct *Srf1,
const CagdCrvStruct *Crv2,
CagdRType *MinDist)
Description:
Computes the minimal distance between a given C1 curve and a C1 surface.
Shapes are assumed to not intersect.
This minimal distance can occur:
1. At end points vs. end points.
2. At the end points vs interior locations.
3. At a boundary curve of the surface vs the other curves.
4. At antipodal interior locations.
Parameters:
| Srf1: | To detect its minimal distance to Crv2.
|
|---|
| Crv2: | To detect its minimal distance to Srf1.
|
|---|
| MinDist: | Upon return, is set to the minimal distance detected.
|
|---|
Returned Value:
| MvarPtStruct *: Pairs of parameters at the minimal distance.
|
|---|
See Also:
MvarSrfSrfAntipodalPoints
SymbDistSrfPoint
MvarSrfSrfMinimalDist
Keywords:
(mvareval.c:973)
Prototype:
MvarMVStruct *MvarCrvToMV(const CagdCrvStruct *Crv)
Description:
Converts a curve into a multivariate function.
Parameters:
| Crv: | Curve to convert into the multi-variate MV.
|
|---|
Returned Value:
| MvarMVStruct *: A multi variate function representation to Crv.
|
|---|
Keywords:
multi-variates
(offset2.c:105)
Prototype:
CagdCrvStruct *MvarCrvTrimGlblOffsetSelfInter(CagdCrvStruct *Crv,
const CagdCrvStruct *OffCrv,
CagdRType TrimAmount,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Trims regions in the offset curve OffCrv that are closer than TrimAmount
to original Crv, bu compute all self intersections in the offset curve,
splitting the offset curve at those intersections, and purges offset curve
segments that are too close to original curve.
Parameters:
| Crv: | Original curve, assumed to be C1 self intersection free.
|
|---|
| OffCrv: | The offset curve approximation.
|
|---|
| TrimAmount: | The trimming distance. A fraction smaller than the offset
amount.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| CagdCrvStruct *: A list of curve segments that are valid, after the
trimming process took place.
|
|---|
See Also:
SymbCrvTrimGlblOffsetSelfInter
Keywords:
(mvar_dbg.c:27)
Prototype:
void MvarDbg(void *Obj)
Description:
Prints multi-variates to stderr. Should be linked to programs for
debugging purposes, so multi-variates may be inspected from a debugger.
Parameters:
| Obj: | A multi-variate - to be printed to stderr.
|
|---|
Returned Value:
Keywords:
debugging
(mvar_err.c:93)
Prototype:
const char *MvarDescribeError(MvarFatalErrorType ErrorNum)
Description:
Returns a string describing a the given error. Errors can be raised by
any member of this mvar library as well as other users. Raised error will
cause an invokation of MvarFatalError function which decides how to handle
this error. MvarFatalError can for example, invoke this routine with the
error type, print the appropriate message and quit the program.
Parameters:
| ErrorNum: | Type of the error that was raised.
|
|---|
Returned Value:
| const char *: A string describing the error type.
|
|---|
Keywords:
error handling
(hasdrf2d.c:56)
Prototype:
CagdRType MvarDistPointCrvC1(CagdPType P,
const CagdCrvStruct *Crv,
MvarHFDistParamStruct *Param,
CagdBType MinDist,
CagdRType Epsilon)
Description:
Computes the min or max distance between a point and a C^1 cont. curve.
The curve and point are assumed to be either in R2 or R3.
The extreme distance between a point and a curve could happen either
at the end points of curve C or when
C'(t) = 0.
Parameters:
| P: | Point to measure its Hausdorff distance to curve Crv.
|
|---|
| Crv: | Crv to measure its hausdorff distance to point Pt.
|
|---|
| Param: | Where to return the parameter value with the maximal distance.
|
|---|
| MinDist: | TRUE for minimal distance, FALSE for maximal.
|
|---|
| Epsilon: | Tolerance of computation.
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
SymbDistCrvPoint
Keywords:
(mvardist.c:212)
Prototype:
CagdRType *MvarDistSrfLine(const CagdSrfStruct *Srf,
const CagdPType LnPt,
const CagdVType LnDir,
CagdBType MinDist,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a surface and a line, finds the nearest point (if MinDist) or the
farthest location (if MinDist FALSE) from the surface to the given line.
This function assumes the surface does not intersect the line.
Returned is the parameter value of the surface. Only internal extrema
are considered.
Let S and N be the surface and its normal field. Then the extrema
points are computed as the simultaneous solution of,
< (S - LnPt) x N, LnDir > = 0,
< N, LnDir > = 0.
Parameters:
| Srf: | The surface to find its nearest (farthest) point to Line.
|
|---|
| LnPt: | A point on the line to consider.
|
|---|
| LnDir: | The direction of the line to consider.
|
|---|
| MinDist: | If TRUE nearest points is needed, if FALSE farthest.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | olerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| CagdRType *: Parameter value in the parameter space of Srf of the
nearest (farthest) point to line Line.
|
|---|
See Also:
MvarLclDistSrfLine
MvarLclDistCrvLine
MvarDistCrvLine
Keywords:
surface line distance
(mvardist.c:41)
Prototype:
CagdRType *MvarDistSrfPoint(const CagdSrfStruct *Srf,
const CagdPType Pt,
CagdBType MinDist,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a surface and a point, finds the nearest point (if MinDist) or the
farthest location (if MinDist FALSE) from the surface to the given point.
Returned is the parameter value of the surface. Both internal as well as
boundary extrema are considered.
Computes the simultaneous zeros of:
(Srf(u, v) - Pt) . dSrf(u, v)/Du = 0,
(Srf(u, v) - Pt) . dSrf(u, v)/Dv = 0,
and also include all extrema on the boundaries.
Parameters:
| Srf: | The surface to find its nearest (farthest) point to Pt.
|
|---|
| Pt: | The point to find the nearest (farthest) point on Srf to it.
|
|---|
| MinDist: | If TRUE nearest points is needed, if FALSE farthest.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | olerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| CagdRType *: UV Parameter values in the parameter space of Srf of the
nearest (farthest) point to point Pt.
|
|---|
Keywords:
surface point distance
(mvar_dbg.c:67)
Prototype:
void MvarETDbg(MvarExprTreeStruct *ET)
Description:
Prints multivariate expression tree to stderr. Should be linked to
programs for debugging purposes, so multi-variates may be inspected from a
debugger.
Parameters:
| ET: | A multivariate exression tree - to be printed to stderr.
|
|---|
Returned Value:
Keywords:
debugging
(mvaredit.c:34)
Prototype:
MvarMVStruct *MvarEditSingleMVPt(MvarMVStruct *MV,
CagdCtlPtStruct *CtlPt,
int *Indices,
CagdBType Write)
Description:
Provides the way to modify/get a single control point into/from a
multi-variate.
Parameters:
| MV: | Multi-variate to be modified/query.
|
|---|
| CtlPt: | New control point to be substituted into MV. Must carry the
same PType as MV if to be written to MV.
|
|---|
| Indices: | In multi-variate MV's control mesh to substitute/query CtlPt.
|
|---|
| Write: | If TRUE CtlPt is copied into MV, if FALSE the point is
copied from MV to CtlPt.
|
|---|
Returned Value:
| MvarMVStruct *: If Write is TRUE, the new modified multi-variate, if
WRITE is FALSE, NULL.
|
|---|
Keywords:
multi-variate editing
(mvarzreq.c:1249)
Prototype:
MvarPtStruct *MvarEqnsZeroNumeric(MvarPtStruct *ZeroSet,
const MvarExprTreeEqnsStruct *Eqns,
MvarMVStruct * const *MVs,
int NumMVs,
CagdRType NumericTol)
Description:
Apply a numerical improvement stage, as a first order minimization
procedure of gradient computation and marching, in place.
Parameters:
| ZeroSet: | Set of approximated solution, derived from a subdivision
process, to improve in place.
|
|---|
| Eqns: | The constraints are given as Equations, if not NULL.
|
|---|
| MVs: | Alternatively, the constraints are given as MVS.
|
|---|
| NumMVs: | If MVs is not NULL, this specifies size of the MVs vector.
|
|---|
| NumericTol: | Tolerance of the numerical process. Tolerance is measured
in the deviation of the scalar multivariates from their
equality. Inequalities are ignored here. If NumericTol is
negative, points that fail to improve numerically are
purged away.
|
|---|
Returned Value:
| MvarPtStruct *: List of points on the solution set. Dimension of the
points will be the same as the dimensions of all MVs.
Points that failed to improve are purged away.
|
|---|
See Also:
MvarMVsZeros
MvarExprTreesZeros
MvarExprTreeEqnsZeros
Keywords:
(mvarextr.c:1133)
Prototype:
void MvarExprAuxDomainReset(MvarExprTreeStruct *ET)
Description:
Reset aux. domains of all bezier multivariates in the expression tree.
Parameters:
| ET: | Expression tree to reset all aux domain of Bezier MVs.
|
|---|
Returned Value:
See Also:
Keywords:
(mvarextr.c:667)
Prototype:
MvarExprTreeStruct *MvarExprTreeAdd(MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right)
Description:
Adds two sub expression tree into one new expression tree.
Parameters:
| Left, Right: | The two expression trees to add. These sub trees are used
in place, so duplicate before calling this function if you
like to keep the original Left/Right.
|
|---|
Returned Value:
| MvarExprTreeStruct *: Added expression tree, "Left + Right".
|
|---|
See Also:
Keywords:
(mvarextr.c:992)
Prototype:
const MvarBBoxStruct *MvarExprTreeBBox(MvarExprTreeStruct *ET)
Description:
Computes the BBox of the given expression tree.
Parameters:
| ET: | Expression Tree to compute the bounding box for.
|
|---|
Returned Value:
| const MvarBBoxStruct *: Computed bounding box, in static memory.
|
|---|
See Also:
Keywords:
(mvarextr.c:1259)
Prototype:
int MvarExprTreeCnvrtBsp2BzrMV(MvarExprTreeStruct *ET,
MvarMinMaxType *Domain)
Description:
Convert, in place, all Bspline MVs in expression tree ET to Beziers.
All MVs are assumed to hold no interior knots. All created Bezier MVs
are updated with their aux domain.
Parameters:
| ET: | Expression tree to convert Bspline MVs to Beziers, in place.
|
|---|
| Domain: | Optional domain to set the bezier ET as aux. domain.
NULL for no setting of the aux. domain.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
Keywords:
(mvarextr.c:1321)
Prototype:
int MvarExprTreeCnvrtBzr2BspMV(MvarExprTreeStruct *ET)
Description:
Convert, in place, all Bezier MVs in expression tree ET to Bspline.
Parameters:
| ET: | Expression tree to convert Bspline MVs to Beziers, in place.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
Keywords:
(mvarextr.c:364)
Prototype:
MvarExprTreeStruct *MvarExprTreeCopy(const MvarExprTreeStruct *ET,
CagdBType ThisNodeOnly,
CagdBType DuplicateMVs)
Description:
A copy function to duplicate a node (ThisNodeOnly TRUE) or entire
expression tree.
Parameters:
| ET: | Expression tree to duplicate.
|
|---|
| ThisNodeOnly: | TRUE to duplicate just this node.
|
|---|
| DuplicateMVs: | If TRUE, Multivariates in leaf nodes are duplicated.
Otherwise, references for them are kept instead.
|
|---|
Returned Value:
| MvarExprTreeStruct *: Duplicated node or tree.
|
|---|
See Also:
Keywords:
(mvarextr.c:804)
Prototype:
MvarExprTreeStruct *MvarExprTreeCrossProd(MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right)
Description:
Cross Prod two sub expression tree into one new expression tree.
Parameters:
| Left, Right: | The two expression trees to multiply. These sub trees
are used in place, so duplicate before calling this
function if you like to keep the original Left/Right.
|
|---|
Returned Value:
| MvarExprTreeStruct *: Multiplied expression tree, "Left * Right".
|
|---|
See Also:
Keywords:
(mvarextr.c:1086)
Prototype:
int MvarExprTreeDomain(const MvarExprTreeStruct *ET,
CagdRType *Min,
CagdRType *Max,
int Axis)
Description:
Computes the domain of the expression tree along direction Axis.
The assumption is that any MV in ET with a non trivial degree in
direction Axis possess the same domain.
Parameters:
| ET: | Expression tree to derive the domain of, in direction Axis.
|
|---|
| Min, Max: | Domain of ET in direction Axis.
|
|---|
| Axis: | The direction along with to compute the domain of ET.
|
|---|
Returned Value:
| int: TRUE for successful computation, FALSE otherwise.
|
|---|
See Also:
Keywords:
(mvarextr.c:769)
Prototype:
MvarExprTreeStruct *MvarExprTreeDotProd(MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right)
Description:
Dot Prod two sub expression tree into one new expression tree.
Parameters:
| Left, Right: | The two expression trees to multiply. These sub trees
are used in place, so duplicate before calling this
function if you like to keep the original Left/Right.
|
|---|
Returned Value:
| MvarExprTreeStruct *: Multiplied expression tree, "Left * Right".
|
|---|
See Also:
Keywords:
(mvarzreq.c:503)
Prototype:
MvarExprTreeEqnsStruct *MvarExprTreeEqnsBuild(MvarExprTreeStruct **MVETs,
const MvarConstraintType
*ConstraintTypes,
int NumOfMVETs)
Description:
Copy the given expression trees and process and fetch common expressions
out to a separated common expressions' vector, all within the returned
expression tree equations structure.
Parameters:
| MVETs: | Input mvar expression tree equations.
|
|---|
| ConstraintTypes: | Type of MVETs constraints. Same length as MVETs vec.
|
|---|
| NumOfMVETs: | umber of input mvar expression tree equations, in MVETs.
|
|---|
Returned Value:
| MvarExprTreeEqnsStruct *: Build set of equations with common exprs.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvarzreq.c:716)
Prototype:
MvarExprTreeEqnsStruct *MvarExprTreeEqnsBuild2(MvarMVStruct * const *MVs,
const MvarConstraintType
*ConstraintTypes,
int NumOfMVs)
Description:
Copy the given expression trees and process and fetch common expressions
out to a separated common expressions' vector, all within the returned
expression tree equations structure.
Parameters:
| MVs: | Input mvar expression tree equations.
|
|---|
| ConstraintTypes: | Type of MVETs constraints. Same length as MVETs vec.
|
|---|
| NumOfMVs: | Number of input mvar expression tree equations, in MVETs.
|
|---|
Returned Value:
| MvarExprTreeEqnsStruct *: Build set of equations with common exprs.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvarzreq.c:195)
Prototype:
void MvarExprTreeEqnsFree(MvarExprTreeEqnsStruct *Eqns)
Description:
Free all data allocated in the expression tree equation's structure.
Parameters:
| Eqns: | Data structure to free.
|
|---|
Returned Value:
See Also:
MvarMVsZeros
MvarExprTreeEqnsMalloc
Keywords:
(mvarzreq.c:151)
Prototype:
MvarExprTreeEqnsStruct *MvarExprTreeEqnsMalloc(int NumEqns,
int MaxNumCommonExprs)
Description:
Allocate a structure to hold NumEqns equations and at most
MaxNumCommonExprs common expressions.
Parameters:
| NumEqns: | Number of equations we have.
|
|---|
| MaxNumCommonExprs: | Maximum number of common expression we can initially
hold.
|
|---|
Returned Value:
| MvarExprTreeEqnsStruct *: Allocated structure.
|
|---|
See Also:
MvarMVsZeros
MvarExprTreeEqnsFree
Keywords:
(mvarzreq.c:1563)
Prototype:
MvarPtStruct *MvarExprTreeEqnsMidPt(MvarExprTreeStruct * const *MVETs,
int NumOfMVETs,
int SingleSol)
Description:
Construct a point of the dimension as the given MVET in the middle of
its parametric domain.
Parameters:
| MVETs: | To consurct a point in the middle of their domain.
|
|---|
| NumOfMVETs: | ize of MVETs vector.
|
|---|
| SingleSol: | If TRUE, this point is a single solution in MV domain.
|
|---|
Returned Value:
| MvarPtStruct *: The construct point in the middle of the MV.
|
|---|
See Also:
MvarExprTreeEqnsZero
Keywords:
(mvarzreq.c:236)
Prototype:
void MvarExprTreeEqnsReallocCommonExprs(MvarExprTreeEqnsStruct *Eqns,
int NewSize)
Description:
Reallocate (increase) the number of common expressions give Eqns can
hold, in place.
Parameters:
| Eqns: | Set of equations to increase, in place, the number of coomon
expressions it can old.
|
|---|
| NewSize: | of vector of common expression, zero to double the size.
|
|---|
Returned Value:
See Also:
MvarMVsZeros
Keywords:
(mvarzreq.c:320)
Prototype:
int MvarExprTreeEqnsSubdivAtParam(const MvarExprTreeEqnsStruct *Eqns,
CagdRType t,
MvarMVDirType Dir,
MvarExprTreeEqnsStruct **Eqns1,
MvarExprTreeEqnsStruct **Eqns2)
Description:
Given a set of equations over some domain, divided them all in Dir at t.
Parameters:
| Eqns: | The equations to subdivide.
|
|---|
| t: | Parameter to subdivide at.
|
|---|
| Dir: | Direction of subdivision.
|
|---|
| Eqns1: | First set of divided equations.
|
|---|
| Eqns2: | Second set of divided equations.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvarzreq.c:272)
Prototype:
void MvarExprTreeEqnsUpdateCommonExprIdcs(MvarExprTreeStruct *ET,
MvarExprTreeStruct **CommonExprs,
int NumOfCommonExpr)
Description:
Traverse an expression tree and update every common expression index to
a real reference to a (common) expression tree.
Parameters:
| ET: | Expression tree to traverse and update common expresssions.
|
|---|
| CommonExprs: | Vector of common expressions to reference from MVET.
|
|---|
| NumOfCommonExpr: | Size of CommonExprs vector.
|
|---|
Returned Value:
See Also:
MvarMVsZeros
Keywords:
(mvarzreq.c:1617)
Prototype:
MvarPtStruct *MvarExprTreeEqnsZeroFilterIdenticalSet(
MvarPtStruct *ZeroSet,
const MvarExprTreeEqnsStruct *Eqns,
CagdRType Tol)
Description:
Filters out identical points or points that fail the inequality
constraints.
Parameters:
| ZeroSet: | The solution points to filter out.
|
|---|
| Eqns: | Multivariate ET constraints.
|
|---|
| Tol: | Tolerance to consider to points same in L^1 norm.
|
|---|
Returned Value:
| MvarPtStruct *: Filtered solution points.
|
|---|
See Also:
MvarExprTreesZeros
MvarExprTreeEqnsZeros
Keywords:
(mvarzreq.c:890)
Prototype:
MvarPtStruct *MvarExprTreeEqnsZeros(MvarExprTreeEqnsStruct *Eqns,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes the simultaneous solution of the given set of NumOfMVETs
expression tree constraints. A constraints can be equality or ineqaulity
as prescribed by the Constraints vector.
All multivariates are assumed to be scalar and be in the same parametric
domain size and dimension.
This procedure performs a preliminary subdivision until the geometry is
found simple enough (I.e. no internal knots or small enough), when it
invokes MvarMVsZeros.
Parameters:
| Eqns: | All the equations as expression tree constraints.
|
|---|
| SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
|---|
| NumericTol: | Numeric tolerance of the numeric stage. The numeric stage
is employed only if IRIT_FABS(NumericTol) < SubdivTol.
If NumericTol is negative, points that fail to improve
numerically are purged away.
|
|---|
Returned Value:
| MvarPtStruct *: List of points on the solution set. Dimension of the
points will be the same as the dimensions of all MVs.
|
|---|
See Also:
MvarMVsZeros
MvarExprTreeZerosSetCallBackFunc
MvarExprTreeZerosCnvrtBezier2MVs
MvarExprTreeZerosUseCommonExpr
Keywords:
(mvarextr.c:1457)
Prototype:
CagdRType *MvarExprTreeEval(const MvarExprTreeStruct *ET,
CagdRType *Params)
Description:
Evaluate the expression tree at the given parametric location.
Parameters:
| ET: | Expression tree to evaluate.
|
|---|
| Params: | Parameter values to evaluate the expression at.
|
|---|
Returned Value:
| CagdRType *: Evaluation result.
Note entry zero is reserved to the rational (weight) value.
|
|---|
See Also:
MvarExprTreeGrad
Keywords:
(mvarextr.c:1713)
Prototype:
MvarPlaneStruct *MvarExprTreeEvalTanPlane(const MvarExprTreeStruct *ET,
CagdRType *Params)
Description:
aluates the tangent hyperplane of the given ET at a given location,
numerically.
Parameters:
| ET: | To evaluate its gradient at given Params parametric location.
|
|---|
| Params: | Parametric location to evaluate MV at.
|
|---|
Returned Value:
| MvarPlaneStruct *: A hyperplane, allocated dynammically. The tanegnt
is normalized so that its last (independent coefficient is
one: "A1 X1 + A2 X2 + ... + An Xn + 1". The size, n, is
to the dimension of the multivariate.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvarextr.c:503)
Prototype:
void MvarExprTreeFree(MvarExprTreeStruct *ET, CagdBType ThisNodeOnly)
Description:
Free an expression tree node (ThisNodeOnly TRUE) or its entire tree.
Parameters:
| ET: | Expression tree to free.
|
|---|
| ThisNodeOnly: | TRUE to free just this node, FALSE for the entire tree.
|
|---|
Returned Value:
See Also:
MvarExprTreeFreeSlots
Keywords:
(mvarextr.c:443)
Prototype:
void MvarExprTreeFreeSlots(MvarExprTreeStruct *ET, CagdBType ThisNodeOnly)
Description:
Free an expression tree node (ThisNodeOnly TRUE) or its entire tree.
Parameters:
| ET: | Expression tree to free.
|
|---|
| ThisNodeOnly: | TRUE to free just this node, FALSE for the entire tree.
|
|---|
Returned Value:
See Also:
MvarExprTreeFree
Keywords:
(mvarextr.c:36)
Prototype:
MvarExprTreeStruct *MvarExprTreeFromCrv(const CagdCrvStruct *Crv,
int NewDim,
int StartAxis)
Description:
Converts the input curve into a multivariate expression tree in newDim
dimension so that the Crv is along the StartAxis dimension.
Parameters:
| Crv: | TO convert into an expression tree of NewDim dimension.
|
|---|
| NewDim: | The new multivariate dimension of this tree, to promote the
curve from.
|
|---|
| StartAxis: | he starting axis (dimension) of the directions of Crv.
|
|---|
Returned Value:
| MvarExprTreeStruct *: The build multivariate expression tree.
|
|---|
See Also:
Keywords:
(mvarextr.c:101)
Prototype:
MvarExprTreeStruct *MvarExprTreeFromMV(const MvarMVStruct *MV,
int NewDim,
int StartAxis)
Description:
Converts the input multivairate into a multivariate expression tree in
newDim dimension so that the MV is along the StartAxis dimension (and
beyond).
Parameters:
| MV: | To convert into an expression tree of NewDim dimension.
|
|---|
| NewDim: | The new multivariate dimension of this tree, to promote the
surface from.
|
|---|
| StartAxis: | he starting axis (dimension) of the directions of MV.
|
|---|
Returned Value:
| MvarExprTreeStruct *: The build multivariate expression tree.
|
|---|
See Also:
MvarExprTreeFromMV2
Keywords:
(mvarextr.c:131)
Prototype:
MvarExprTreeStruct *MvarExprTreeFromMV2(const MvarMVStruct *MV)
Description:
Converts the input multivairate into a multivariate expression tree in
newDim dimension so that the MV is along the StartAxis dimension (and
beyond).
Parameters:
| MV: | To convert into an expression tree of NewDim dimension.
|
|---|
Returned Value:
| MvarExprTreeStruct *: The build multivariate expression tree.
|
|---|
See Also:
MvarExprTreeFromMV
Keywords:
(mvarextr.c:68)
Prototype:
MvarExprTreeStruct *MvarExprTreeFromSrf(const CagdSrfStruct *Srf,
int NewDim,
int StartAxis)
Description:
Converts the input surface into a multivariate expression tree in newDim
dimension so that the Srf is along the StartAxis dimension (and beyond).
Parameters:
| Srf: | TO convert into an expression tree of NewDim dimension.
|
|---|
| NewDim: | The new multivariate dimension of this tree, to promote the
surface from.
|
|---|
| StartAxis: | he starting axis (dimension) of the directions of Srf.
|
|---|
Returned Value:
| MvarExprTreeStruct *: The build multivariate expression tree.
|
|---|
See Also:
Keywords:
(mvarextr.c:1563)
Prototype:
CagdRType *MvarExprTreeGradient(const MvarExprTreeStruct *ET,
CagdRType *Params,
int *Dim)
Description:
Evaluate the gradient of the expression tree at the given parametric
location.
Parameters:
| ET: | Expression tree to evaluate its gradient.
|
|---|
| Params: | Parameter values to evaluate the gradient of the expression.
|
|---|
| Dim: | Will be set with the dimension of the gradient.
|
|---|
Returned Value:
| CagdRType *: Evaluation result. If the returned gradient vector is of
dimension n, it will be saved in entries [0] to [n-1].
|
|---|
See Also:
MvarExprTreeEval
Keywords:
(mvarextr.c:1371)
Prototype:
int MvarExprTreeInteriorKnots(const MvarExprTreeStruct *ET, CagdRType *Knot)
Description:
Tests if all MVs in expression tree ET are Bezier (no interior knots).
Parameters:
| ET: | Expression tree to examine for interior knots.
|
|---|
| Knot: | Interior knot value if non Bezier expression tree
(valid only if a non negative value is returned).
|
|---|
Returned Value:
| int: Negative if all MVs are Bezier, index to dimension with
interior knots, from which Knot is extracted.
|
|---|
See Also:
Keywords:
(mvarextr.c:311)
Prototype:
MvarExprTreeStruct *MvarExprTreeIntrnlNew(MvarExprTreeNodeType NodeType,
MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right,
const MvarBBoxStruct *MVBBox)
Description:
An expression tree (ET) constructor for a tree internal node.
Parameters:
| NodeType: | Type of internal node, addition, multiplication, etc.
|
|---|
| Left, Right: | The left and right sons of this node.
|
|---|
| MVBBox: | Bounding box, if any, of this node.
|
|---|
Returned Value:
| MvarExprTreeStruct *: The expression tree consturcted represention.
|
|---|
See Also:
Keywords:
(mvarextr.c:251)
Prototype:
MvarExprTreeStruct *MvarExprTreeLeafNew(CagdBType IsRef,
MvarMVStruct *MV,
int NewDim,
int StartAxis,
MvarNormalConeStruct *MVBCone,
const MvarBBoxStruct *MVBBox)
Description:
An expression tree (ET) constructor for a tree leaf node.
Parameters:
| IsRef: | TRUE to just reference MV instead of copying it. Note that
if NewDim is non zero, the MV will always be copied with the
new expanded dimension NewDim.
|
|---|
| MV: | MV to occupy this leaf node. Can be NULL.
|
|---|
| NewDim: | The new multivariate dimension of this tree.
|
|---|
| StartAxis: | he starting axis of the directions of MV.
|
|---|
| MVBCone: | Bounding code, if any, of MV.
|
|---|
| MVBBox: | Bounding box, if any, of MV.
|
|---|
Returned Value:
| MvarExprTreeStruct *: An expression tree representing MV.
|
|---|
See Also:
Keywords:
(mvarextr.c:735)
Prototype:
MvarExprTreeStruct *MvarExprTreeMult(MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right)
Description:
Multiplies two sub expression tree into one new expression tree.
Parameters:
| Left, Right: | The two expression trees to multiply. These sub trees
are used in place, so duplicate before calling this
function if you like to keep the original Left/Right.
|
|---|
Returned Value:
| MvarExprTreeStruct *: Multiplied expression tree, "Left * Right".
|
|---|
See Also:
Keywords:
(mvarextr.c:1177)
Prototype:
void MvarExprTreePrintInfo(MvarExprTreeStruct *ET,
CagdBType CommonExprIdx,
MvarExprTreePrintFuncType PrintFunc)
Description:
Traverses the ET in infix order and print the Info/Node in the ET.
Parameters:
| ET: | To traverse and prints its Info/Node content.
|
|---|
| CommonExprIdx: | TRUE to only dump the common expression index,
FALSE for the full common expression in place.
|
|---|
| PrintFunc: | Call back function to print a string.
|
|---|
Returned Value:
See Also:
Keywords:
(mvarzreq.c:449)
Prototype:
int MvarExprTreeRemoveFromVector(MvarExprTreeStruct **Vec, int Idx)
Description:
Removes all references in vector from position i to all the subtree.
Parameters:
| Vec: | Vector to remove all reference (make NULL) from the i'th pos.
|
|---|
| Idx: | Position in vector where to remove the references from.
|
|---|
Returned Value:
| int: Index of next item in vector, after all removed items.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvarextr.c:529)
Prototype:
int MvarExprTreeSize(MvarExprTreeStruct *ET)
Description:
Returns the size (number of nodes) an expression tree has.
Parameters:
| ET: | Expression tree to compute its size (number of nodes).
|
|---|
Returned Value:
| int: Number of nodes in ET.
|
|---|
See Also:
Keywords:
(mvarextr.c:701)
Prototype:
MvarExprTreeStruct *MvarExprTreeSub(MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right)
Description:
Subtracts two sub expression tree into one new expression tree.
Parameters:
| Left, Right: | The two expression trees to subtract. These sub trees
are used in place, so duplicate before calling this
function if you like to keep the original Left/Right.
|
|---|
Returned Value:
| MvarExprTreeStruct *: Subtracted expression tree, "Left - Right".
|
|---|
See Also:
Keywords:
(mvarextr.c:844)
Prototype:
int MvarExprTreeSubdivAtParam(const MvarExprTreeStruct *ET,
CagdRType t,
MvarMVDirType Dir,
MvarExprTreeStruct **Left,
MvarExprTreeStruct **Right)
Description:
Subdivides the given multivariate expression tree at t in direction Dir.
Parameters:
| ET: | The expression tree to subdivide at parameter value t, in Dir.
|
|---|
| t: | The parameter value to subdivide at.
|
|---|
| Dir: | The direction of subdivision.
|
|---|
| Left: | First result of subdivision.
|
|---|
| Right: | Second result of subdivision.
|
|---|
Returned Value:
| int: TRUE if succesful, FALSE otherwise.
|
|---|
See Also:
Keywords:
(mvarextr.c:153)
Prototype:
MvarMVStruct *MvarExprTreeToMV(const MvarExprTreeStruct *ET)
Description:
Converts an expression tree to a regular multivariate function.
Parameters:
| ET: | Expression tree to convert to a multivariate.
|
|---|
Returned Value:
| MvarMVStruct *: Multiviarate representing the expression tree.
|
|---|
See Also:
Keywords:
(mvarzreq.c:406)
Prototype:
int MvarExprTreeToVector(MvarExprTreeStruct *ET,
MvarExprTreeStruct **Vec,
int Idx)
Description:
Place all nodes (top down) in one linear vector.
Parameters:
| ET: | Expression tree to place all its node on Vec.
|
|---|
| Vec: | Where to place all nodes of ET, top down.
|
|---|
| Idx: | Index into vec where to place the next node.
|
|---|
Returned Value:
| int: Last index of a placed node in vec.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvarzreq.c:93)
Prototype:
int MvarExprTreeZerosCnvrtBezier2MVs(int Bezier2MVs)
Description:
Sets the way expression trees of Bezier MVs are treated. If TRUE, the
ET are converted into MVS and the regular MV zero solver is invoked. If
FALSE, the ET is subdivided all the way to SUbdivTol.
subdivisions' zero set solver.
Parameters:
| Bezier2MVs: | TRUE to convert to MVs, FALSE to subdivide Bezier ETs.
|
|---|
Returned Value:
| int: Old setting for bezier conversion setting.
|
|---|
See Also:
MvarExprTreesZeros
MvarExprTreeZerosUseCommonExpr
Keywords:
(mvarzreq.c:121)
Prototype:
MvarMVsZerosSubdivCallBackFunc MvarExprTreeZerosSetCallBackFunc(
MvarMVsZerosSubdivCallBackFunc SubdivCallBackFunc)
Description:
Sets the call back function to invoke just before the expression tree
recursion invokes the regular zeros solver (MvarMVsZeros) with the
converted to multivariates.
Parameters:
| SubdivCallBackFunc: | New call back function, NULL to disable call back.
|
|---|
Returned Value:
| MvarMVsZerosSubdivCallBackFunc: Old call back function.
|
|---|
See Also:
MvarExprTreesZeros
Keywords:
(mvarzreq.c:65)
Prototype:
int MvarExprTreeZerosUseCommonExpr(int UseCommonExpr)
Description:
Sets the exploitation of common expression extraction in expression
trees. If TRUE, the ETs are scanned for common expressions that are then
processed once only, during the subdivision process.
Parameters:
| UseCommonExpr: | TRUE to use common expressions, FALSE otherwise.
|
|---|
Returned Value:
| int: Old setting of common expressions' use.
|
|---|
See Also:
MvarExprTreesZeros
MvarExprTreeZerosCnvrtBezier2MVs
Keywords:
(mvarextr.c:575)
Prototype:
CagdBType MvarExprTreesSame(const MvarExprTreeStruct *ET1,
const MvarExprTreeStruct *ET2,
CagdRType Eps)
Description:
A comparison funcion to test for similarity (upto Eps) two expression
trees.
Parameters:
| ET1, ET2: | Twu expression trees to compare.
|
|---|
| Eps: | Tolerance of approximation.
|
|---|
Returned Value:
| CagdBType: TRUE if the same ETs (upto Eps), FALSE otherwise.
|
|---|
See Also:
Keywords:
(mvarextr.c:626)
Prototype:
int MvarExprTreesVerifyDomain(MvarExprTreeStruct *ET1,
MvarExprTreeStruct *ET2)
Description:
Examine the given two multivariate's expression trees if they share the
same domains.
Parameters:
| ET1, ET2: | Two multivariate expression trees to verify that they share
the same domains.
|
|---|
Returned Value:
| int: TRUE if Et1/2 shares the same domains, FALSE otherwise.
|
|---|
See Also:
MvarExprTreeDomain
Keywords:
(mvarzreq.c:842)
Prototype:
MvarPtStruct *MvarExprTreesZeros(MvarExprTreeStruct **MVETs,
MvarConstraintType *Constraints,
int NumOfMVETs,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes the simultaneous solution of the given set of NumOfMVETs
expression tree constraints. A constraints can be equality or ineqaulity
as prescribed by the Constraints vector.
All multivariates are assumed to be scalar and be in the same parametric
domain size and dimension.
This procedure performs a preliminary subdivision until the geometry is
found simple enough (I.e. no internal knots or small enough), when it
invokes MvarMVsZeros.
Parameters:
| MVETs: | Vector of multivariate expression tree constraints.
|
|---|
| Constraints: | Either an equality or an inequality type of constraint.
|
|---|
| NumOfMVETs: | Size of the MVs expresion trees and Constraints vectors.
|
|---|
| SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
|---|
| NumericTol: | Numeric tolerance of the numeric stage. The numeric stage
is employed only if IRIT_FABS(NumericTol) < SubdivTol.
If NumericTol is negative, points that fail to improve
numerically are purged away.
|
|---|
Returned Value:
| MvarPtStruct *: List of points on the solution set. Dimension of the
points will be the same as the dimensions of all MVs.
|
|---|
See Also:
MvarMVsZeros
MvarExprTreeZerosSetCallBackFunc
MvarExprTreeZerosCnvrtBezier2MVs
MvarExprTreeZerosUseCommonExpr
Keywords:
(mvar_ftl.c:53)
Prototype:
void MvarFatalError(MvarFatalErrorType ErrID)
Description:
Trap Mvar_lib errors right here. Provides a default error handler for the
mvar library. Gets an error description using MvarDescribeError, prints it
and exit the program using exit.
Parameters:
| ErrID: | Error type that was raised.
|
|---|
Returned Value:
Keywords:
error handling
(mvar_pll.c:236)
Prototype:
MvarPtStruct *MvarGetLastPt(MvarPtStruct *Pts)
Description:
Returns the last element in the list.
Parameters:
| Pts: | List of points to fetch last one.
|
|---|
Returned Value:
| MvarPtStruct *: Last element in list.
|
|---|
Keywords:
(mvtrmpcr.c:1548)
Prototype:
static CagdPtStruct *MvarGetMiniumIntnPar(CagdCrvStruct *TrimmedBis,
CagdRType *Pt,
CagdPtStruct *Inter,
CagdPType LeftNormal)
Description:
This function returns the minimum intersection parameter of the curve
with the Line after confirming that the vector between the discontinuity
point and the intersection parameter is in the same direction to the
Left hand normal.
Parameters:
| TrimmedBis: | The input curve in CagdCrvStruct.
|
|---|
| Pt: | The input point - CagdRType.
|
|---|
| Inter: | List of intersection parameters obtained using
SymbLclDistCrvLine.
|
|---|
| LeftNormal: | Left Normal of TrimmedBis at the point Pt.
|
|---|
Returned Value:
| CagdPtStruct *: Return the TrimmedBis parameter.
|
|---|
See Also:
SymbLclDistCrvLine
Keywords:
(mvar_aux.c:1197)
Prototype:
int MvarGetPointsMeshIndices(const MvarMVStruct *MV, int *Indices)
Description:
Given indices into the control mesh, return the index in the vector
representation Points of that single point.
Parameters:
| MV: | Whose indices are for.
|
|---|
| Indices: | To compute the exact point location in MV -> Points
|
|---|
Returned Value:
| int: Index of point whose indices are Indices in MV -> Points.
|
|---|
See Also:
MvarMeshIndicesFromIndex
MvarGetPointsPeriodicMeshIndices
Keywords:
(mvar_aux.c:1249)
Prototype:
int MvarGetPointsPeriodicMeshIndices(const MvarMVStruct *MV, int *Indices)
Description:
Given indices into the control mesh, return the index in the vector
representation Points of that single point. MV can be periodic.
Parameters:
| MV: | Whose indices are for.
|
|---|
| Indices: | To compute the exact point location in MV -> Points
|
|---|
Returned Value:
| int: Index of point whose indices are Indices in MV -> Points.
|
|---|
See Also:
MvarMeshIndicesFromIndex
MvarGetPointsMeshIndices
Keywords:
(hasdrf2d.c:149)
Prototype:
MvarPtStruct *MvarHFDistAntipodalCrvCrvC1(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Epsilon)
Description:
Computes the antipodal points of the given two curves by solving:
< C2(r) - C1(s), C1'(s) > = 0,
< C2(r) - C1(t), C1'(t) > = 0.
Parameters:
| Crv1, Crv2: | The two curves to solve for their antipodal locations.
|
|---|
| Epsilon: | Tolerance of computation.
|
|---|
Returned Value:
| MvarPtStruct *: List of pairs of parameters in the s & t coefficients.
|
|---|
See Also:
MvarCrvAntipodalPoints
Keywords:
(hasdrf3d.c:143)
Prototype:
MvarPtStruct *MvarHFDistAntipodalCrvSrfC1(const CagdSrfStruct *Srf1,
const CagdCrvStruct *Crv2)
Description:
Computes the antipodal points of the given surface and curve by solving:
< C2(t) - S1(u, v), dS1(u, v) / du > = 0,
< C2(t) - S1(u, v), dS1(u, v) / dv > = 0,
< C2(t) - S1(u, v), dC2(t) / dt > = 0.
Parameters:
| Srf1, Crv2: | A surface and a curve to solve for their antipodal
locations.
|
|---|
Returned Value:
| MvarPtStruct *: List of pairs of parameters in the uv & t coefficients.
|
|---|
See Also:
MvarSrfAntipodalPoints
Keywords:
(hasdrf3d.c:389)
Prototype:
MvarPtStruct *MvarHFDistAntipodalSrfSrfC1(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Computes the antipodal points of the given two surfaces by solving:
< S2(r, t) - S1(u, v), dS1(u, v) / du > = 0,
< S2(r, t) - S1(u, v), dS1(u, v) / dv > = 0,
< S2(r, t) - S1(u, v), dS2(s, t) / ds > = 0,
< S2(r, t) - S1(u, v), dS2(s, t) / ds > = 0.
Parameters:
| Srf1, Srf2: | The two surfaces to solve for their antipodal locations.
|
|---|
Returned Value:
| MvarPtStruct *: List of pairs of parameters in the uv & st coefficients.
|
|---|
See Also:
Keywords:
(hasdrf3d.c:547)
Prototype:
MvarHFDistPairParamStruct *MvarHFDistBisectSrfSrfC1(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Compute the intersection locations of (C^1 cont) Srf2 with the self
bisectors of (C^1 cont.) Srf1, if any. The solution is computed by
solving the following set of contraints:
|| S2(s, t) - S1(a, b) ||^2 == || S2(s, t) - S1(c, d) ||^2,
< S2((s, t) - S1(a, b), dS1(a, b)/da > = 0,
< S2((s, t) - S1(a, b), dS1(a, b)/db > = 0,
< S2((s, t) - S1(c, d), dS1(c, d)/dc > = 0.
< S2((s, t) - S1(c, d), dS1(c, d)/dd > = 0.
augumented with
< (S1(a, b) - S(c, d)) x (S1(a, b) + S1(c, d) - 2S2(s, t)),
NS2(s, t) > = 0,
where NS2 is a (non normalized) normnal field of S2.
The first equation above (equal distance to two different locations in
C1) could be rewritten as:
< S1(a, b) + S1(c, d) - 2S2(s, t), S1(a, b) - S1(c, d) > = 0,
which hints to the fact that this equation vanish for ((a, b) == (c, d)).
Hence, in the solution process, we eliminate the ((a, b) == (c, d))
factors from it.
Parameters:
| Srf1: | First surface to intersect its self-bisector with Srf2.
|
|---|
| Srf2: | Second surface to intersect against the self bisector of Srf1.
|
|---|
Returned Value:
| MvarHFDistPairParamStruct *: Linked list of all detected intersections.
Note each detected intersection holds two parameter locations
of Srf1.
|
|---|
See Also:
Keywords:
(hasdrf2d.c:1039)
Prototype:
CagdRType MvarHFDistCrvCrvC1(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
MvarHFDistParamStruct *Param1,
MvarHFDistParamStruct *Param2,
CagdRType Epsilon)
Description:
Computes the Hausdorff distance between two C^1 cont. curves, C1 and C2.
The curves are assumed to be either in R2 or R3.
The extreme distance between two curves could happen at:
+ The end points of the curves.
+ Antipodal locations where:
C1'(t) = 0,
C2'(r) = 0.
+ Locations where C1 crosses the self bisector of C2 (or vice versa):
Let Bi(x,y) = 0 be self bisector of Ci(t), and Cj(r) = (xj(r), yj(r)).
Then, solve for:
|| C2(r) - C1(s) ||^2 == || C2(r) - C1(t) ||^2,
< C2(r) - C1(s), C1'(s) > = 0,
< C2(r) - C1(t), C1'(t) > = 0.
All the above equations hold for R2 and for R3.
Parameters:
| Crv1: | First Crv to measure its hausdorff distance to Crv2.
|
|---|
| Crv2: | Second Crv to measure its hausdorff distance to Crv1.
|
|---|
| Param1: | Where to return the parameter value(s) of Crv1 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Param2: | Where to return the parameter value(s) of Crv2 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Epsilon: | Tolerance of computation.
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
Keywords:
(hasdrf2d.c:850)
Prototype:
CagdRType MvarHFDistFromCrvToCrvC1(const CagdCrvStruct *CCrv1,
const CagdCrvStruct *CCrv2,
MvarHFDistParamStruct *Param1,
MvarHFDistParamStruct *Param2,
CagdRType Epsilon)
Description:
Computes the one sided Hausdorff distance between two C^1 cont. curves,
from C1 to C2.
The curves are assumed to be either in R2 or R3.
The one sided extreme distance between two curves could happen at:
+ The end points of curve C1 or curve C2.
+ Antipodal locations or locations where:
C1'(t) = 0,
C2'(r) = 0,
that are also global distance minima from C1(t) to any point on C2.
+ Locations where C1 crosses the self bisector of C2 that are also local
distance minima from C1 to any point on C2.
All the above equations hold for R2 and for R3.
Parameters:
| CCrv1: | First Crv to measure its hausdorff distance to CCrv2.
|
|---|
| CCrv2: | Second Crv to measure its hausdorff distance from CCrv1.
|
|---|
| Param1: | Where to return the parameter value(s) of Crv1 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Param2: | Where to return the parameter value(s) of Crv2 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Epsilon: | Tolerance of computation.
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
Keywords:
(hasdrf3d.c:278)
Prototype:
CagdRType MvarHFDistFromCrvToSrfC1(const CagdCrvStruct *Crv1,
const CagdSrfStruct *Srf2,
MvarHFDistParamStruct *Param1,
MvarHFDistParamStruct *Param2)
Description:
Computes the one sided Hausdorff distance between a C^1 cont. curve
and a C^1 cont. surface, from C1 to S2.
The shapes are assumed to be in R3 and non intersecting.
The one sided extreme distance between the two shapes could happen at:
+ The corner/end points of curve C1 or surface S2.
+ Antipodal locations between the two shapes.
+ Locations where C1 crosses the self bisector of S2 that are also local
distance minima from C1 to any point on S2.
Parameters:
| Crv1: | First crv to measure its hausdorff distance to Srf2.
|
|---|
| Srf2: | Second srf to measure its hausdorff distance from Crv1.
|
|---|
| Param1: | Where to return the parameter value(s) of Crv1 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Param2: | Where to return the parameter value(s) of Srf2 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
MvarHFDistFromSrfToSrfC1
MvarHFDistFromSrfToCrvC1
Keywords:
(hasdrf3d.c:316)
Prototype:
CagdRType MvarHFDistFromSrfToCrvC1(const CagdSrfStruct *Srf1,
const CagdCrvStruct *Crv2,
MvarHFDistParamStruct *Param1,
MvarHFDistParamStruct *Param2)
Description:
Computes the one sided Hausdorff distance between a C^1 cont. surface
and a C^1 cont. curve, from S1 to C2
The shapes are assumed to be in R3 and non intersecting.
The one sided extreme distance between the two shapes could happen at:
+ The corner/end points of surface S1 or curve C2.
+ Antipodal locations between the two shapes.
+ Locations where S1 crosses the self bisector of C2 that are also local
distance minima from S1 to any point on C2.
Parameters:
| Srf1: | First srf to measure its hausdorff distance to Crv2.
|
|---|
| Crv2: | Second crv to measure its hausdorff distance from Srf1.
|
|---|
| Param1: | Where to return the parameter value(s) of Srf1 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Param2: | Where to return the parameter value(s) of Crv2 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
MvarHFDistFromSrfToSrfC1
Keywords:
(hasdrf3d.c:618)
Prototype:
CagdRType MvarHFDistFromSrfToSrfC1(const CagdSrfStruct *CSrf1,
const CagdSrfStruct *CSrf2,
MvarHFDistParamStruct *Param1,
MvarHFDistParamStruct *Param2)
Description:
Computes the one sided Hausdorff distance between two C^1 cont. surfaces
from S1 to S2.
The surfaces are assumed to be in R3 and non intersecting.
The one sided extreme distance between two surfaces could happen at:
+ The corner points of surface S1 or surface S2.
+ Antipodal locations between the two surfaces.
+ Locations where S1 crosses the self bisector of S2 that are also local
distance minima from S1 to any point on S2.
Parameters:
| CSrf1: | First Srf to measure its hausdorff distance to Srf2.
|
|---|
| CSrf2: | Second Srf to measure its hausdorff distance from Srf1.
|
|---|
| Param1: | Where to return the parameter value(s) of Srf1 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Param2: | Where to return the parameter value(s) of Srf2 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
Keywords:
(hasdrf2d.c:592)
Prototype:
MvarHFDistPairParamStruct *MvarHFDistInterBisectCrvCrvC1(
const CagdCrvStruct *CCrv1,
const CagdCrvStruct *CCrv2,
CagdRType Epsilon)
Description:
Compute the intersection locations of (C^1 cont) Crv2 with the self
bisectors of (C^1 cont.) Crv1, if any. The solution is computed by
solving the following cases:
1. The curve-curve self bisector of Crv1, intersected with Crv2:
|| C2(w) - C1(u) ||^2 == || C2(w) - C1(v) ||^2,
< C2(w) - C1(u), C1'(u) > = 0,
< C2(w) - C1(v), C1'(v) > = 0.
The first equations above (equal distance to two different locations in
C1) could be rewritten as:
< C1(u) + C1(v) - 2C2(w), C1(u) - C1(v) > = 0,
which hints to the fact that this equation vanish for (u == v). Hence,
in the solution process, we eliminate the (u - v) factors from it.
2. Endpoint-curve self bisectors of Crv1, intersected with Crv2 (2 cases):
Let B(t) be equal to the self bisector of Crv1 with one of its end
points. Then, solve for B(t) = C2(w).
3. Endpoint-Endpoint self bisectors of Crv1, intersected with Crv2:
solved as a line (Endpoint-Endpoint bisector) - Crv2 intersection.
Parameters:
| CCrv1: | First curve to intersect its self-bisector with Crv2.
|
|---|
| CCrv2: | Second curve to intersect against the self bisector of Crv1.
|
|---|
| Epsilon: | Tolerance of computation.
|
|---|
Returned Value:
| MvarHFDistPairParamStruct *: Linked list of all detected intersections.
Note each detected intersection holds two parameters of Crv1.
|
|---|
See Also:
Keywords:
(hasdrf2d.c:271)
Prototype:
MvarHFDistPairParamStruct *MvarHFDistInterBisectCrvCrvC1Crvtr(
CagdCrvStruct *Crv1,
CagdCrvStruct *Crv2,
CagdRType Epsilon)
Description:
Old version of MvarHFDistInterBisectCrvCrvC1 that splits the input
curves at curvature max. locations whereas MvarHFDistInterBisectCrvCrvC1
eliminates the (u - v) terms directly.
Computes the intersection locations of (C^1 cont) Crv2 with the self
bisectors of (C^1 cont.) Crv1, if any. The solution is computed by
solving the following cases:
1. The curve-curve self bisector of Crv1, intersected with Crv2:
|| C2(w) - C1(u) ||^2 == || C2(w) - C1(v) ||^2,
< C2(w) - C1(u), C1'(u) > = 0,
< C2(w) - C1(v), C1'(v) > = 0.
The first equations above (equal distance to two different locations in
C1) could be rewritten as:
< C1(u) + C1(v) - 2C2(w), C1(u) - C1(v) > = 0,
which hints to the fact that this equation vanish for (u == v).
To speed up the process we also add a constraint that the distance
from C2 to its two foot point should be greater than the radius of
curvature of C1.
2. Endpoint-curve self bisectors of Crv1, intersected with Crv2 (2 cases):
Let B(t) be equal to the self bisector of Crv1 with one of its end
points. Then, solve for B(t) = C2(w).
3. Endpoint-Endpoint self bisectors of Crv1, intersected with Crv2:
solved as a line (Endpoint-Endpoint bisector) - Crv2 intersection.
Parameters:
| Crv1: | First curve to intersect its self-bisector with Crv2.
|
|---|
| Crv2: | Second curve to intersect against the self bisector of Crv1.
|
|---|
| Epsilon: | Tolerance of computation.
|
|---|
Returned Value:
| MvarHFDistPairParamStruct *: Linked list of all detected intersections.
Note each detected intersection holds two parameters of Crv1.
|
|---|
See Also:
MvarHFDistInterBisectCrvCrvC1
Keywords:
(hasdrf3d.c:580)
Prototype:
MvarHFDistPairParamStruct *MvarHFDistInterBisectSrfSrfC1(
const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Compute the intersection locations of (C^1 cont) Srf2 with the self
bisectors of (C^1 cont.) Srf1, if any. The solution is computed by
solving the following set of contraints:
1. The surface-surface self bisector of Srf1, intersected with Srf2
2. boundary-curve self bisectors of Srf1, intersected with Srf2
3. corner-point self bisectors of Srf1, intersected with Srf2
Parameters:
| Srf1: | First curve to intersect its self-bisector with Srf2.
|
|---|
| Srf2: | Second curve to intersect against the self bisector of Srf1.
|
|---|
Returned Value:
| MvarHFDistPairParamStruct *: Linked list of all detected intersections.
Note each detected intersection holds two parameters locations
of Srf1.
|
|---|
See Also:
Keywords:
(hasdrf3d.c:44)
Prototype:
CagdRType MvarHFDistPointSrfC1(const CagdPType P,
const CagdSrfStruct *Srf,
MvarHFDistParamStruct *Param,
CagdBType MinDist)
Description:
Computes the Hausdorff distance between a point and a C^1 cont. surface.
The surface and point are assumed to be either in R3.
The extreme distance between a point and a surface could happen either
at the corner points of surface Srf, the boundary curves of Srf, or when
dS'(u, v)/du = 0,
dS'(u, v)/dv = 0.
Parameters:
| P: | Point to measure its Hausdorff distance to surface Srf.
|
|---|
| Srf: | Srf to measure its hausdorff distance to point Pt.
|
|---|
| Param: | Where to return the parameter value with the maximal distance.
|
|---|
| MinDist: | TRUE for minimal distance, FALSE for maximal.
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
SymbDistSrfPoint
Keywords:
(hasdrf3d.c:349)
Prototype:
CagdRType MvarHFDistSrfCrvC1(const CagdSrfStruct *Srf1,
const CagdCrvStruct *Crv2,
MvarHFDistParamStruct *Param1,
MvarHFDistParamStruct *Param2)
Description:
Computes Hausdorff distance between a C^1 cont. surface and a C^1 cont.
curve, S1 and C2.
The shapes are assumed to be in R3 and non intersecting.
Parameters:
| Srf1: | First srf to measure its hausdorff distance to Crv2.
|
|---|
| Crv2: | Second crv to measure its hausdorff distance to Srf1.
|
|---|
| Param1: | Where to return the parameter value(s) of Srf1 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Param2: | Where to return the parameter value(s) of Crv2 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
MvarHFDistSrfSrfC1
Keywords:
(hasdrf3d.c:785)
Prototype:
CagdRType MvarHFDistSrfSrfC1(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
MvarHFDistParamStruct *Param1,
MvarHFDistParamStruct *Param2)
Description:
Computes Hausdorff distance between two C^1 cont. surfaces, S1 and S2.
The surfaces are assumed to be in R3 and non intersecting.
Parameters:
| Srf1: | First Srf to measure its hausdorff distance to Srf2.
|
|---|
| Srf2: | Second Srf to measure its hausdorff distance to Srf1.
|
|---|
| Param1: | Where to return the parameter value(s) of Srf1 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
| Param2: | Where to return the parameter value(s) of Srf2 with the
maximal Hausdorff distance. Can be more than one location!
|
|---|
Returned Value:
| CagdRType: The Hausdorff distance.
|
|---|
See Also:
Keywords:
(hasdrf2d.c:98)
Prototype:
CagdRType MvarHFExtremeLclDistPointCrvC1(CagdPType P,
const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
MvarHFDistParamStruct *Param2,
CagdRType Epsilon)
Description:
Computes the local extreme distance between a point P of Crv1 and Crv2.
At the local extreme distance location on Crv2, denoted Q, verify that Q
is closest to P than to any other location on Crv1.
Returns maximal local extreme distance found, 0.0 if none.
Parameters:
| P: | Point on Crv1 to measure its extreme distance to curve Crv2.
|
|---|
| Crv1: | First curve that contains P.
|
|---|
| Crv2: | Second curve to measure extreme distance to from P.
|
|---|
| Param2: | Where to return the parameter value of Crv2 is returned.
|
|---|
| Epsilon: | Tolerance of computation.
|
|---|
Returned Value:
| CagdRType: The local extreme distance found, 0.0 if none.
|
|---|
See Also:
SymbLclDistCrvPoint
Keywords:
(hasdrf3d.c:89)
Prototype:
CagdRType MvarHFExtremeLclDistPointSrfC1(const CagdPType P,
const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
MvarHFDistParamStruct *Param2)
Description:
Computes the local extreme distance between a point P of Srf1 and Srf2.
At the local extreme distance location on Srf2, denoted Q, verify that Q
is closest to P than to any other location on Srf1.
Returns maximal local extreme distance found, 0.0 if none.
Parameters:
| P: | Point on Srf1 to measure its extreme distance to curve Srf2.
|
|---|
| Srf1: | First curve that contains P.
|
|---|
| Srf2: | Second curve to measure extreme distance to from P.
|
|---|
| Param2: | Where to return the parameter value of Srf2 is returned.
|
|---|
Returned Value:
| CagdRType: The local extreme distance found, 0.0 if none.
|
|---|
See Also:
SymbLclDistSrfPoint
Keywords:
(mvartopo.c:34)
Prototype:
MvarPtStruct *MvarImplicitCrvExtreme(const CagdSrfStruct *Srf,
CagdSrfDirType Dir,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes U or V extreme values of the zero set (implicit form) of
Srf = 0.
Parameters:
| Srf: | Implicit surface definition.
|
|---|
| Dir: | U to compute U-extreme values in Srf = 0, V for V-extreme.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumerTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: The computed extreme values, in the parametric space
of surface Srf.
|
|---|
Keywords:
(mvardist.c:285)
Prototype:
MvarPtStruct *MvarLclDistSrfLine(const CagdSrfStruct *CSrf,
const CagdPType LnPt,
const CagdVType LnDir,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a surface and a line, finds the nearest point (if MinDist) or the
farthest location (if MinDist FALSE) from the surface to the given line.
This function assumes the surface does not intersect the line.
Returned is the parameter value of the surface. Only internal extrema
are considered.
Let S and N be the surface and its normal field. Then the extrema
points are computed as the simultaneous solution of,
< (S - LnPt) x N, LnDir > = 0,
< N, LnDir > = 0.
Parameters:
| CSrf: | The surface to find its nearest (farthest) point to Line.
|
|---|
| LnPt: | A point on the line to consider.
|
|---|
| LnDir: | The direction of the line to consider.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | olerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| MvarPtStruct *: A list of parameter values of extreme distance
locations.
|
|---|
See Also:
MvarDistSrfLine
MvarDistCrvLine
Keywords:
surface line distance
(mvardist.c:140)
Prototype:
MvarPtStruct *MvarLclDistSrfPoint(const CagdSrfStruct *CSrf,
const CagdPType Pt,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a surface and a point, find the local extremum distance points on
the surface to the given point. Only interior extrema are considered.
Returned is a list of parameter value with local extremum.
Computes the simultaneous zeros of:
(Srf(u, v) - Pt) . dSrf(u, v)/Du = 0.
(Srf(u, v) - Pt) . dSrf(u, v)/Dv = 0.
Parameters:
| CSrf: | The surface to find its extreme distance locations to Pt.
|
|---|
| Pt: | The point to find the extreme distance locations from Srf.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | olerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| MvarPtStruct *: A list of parameter values of extreme distance
locations.
|
|---|
Keywords:
surface point distance
(mvcones.c:283)
Prototype:
MvarVecStruct *MvarLinePlaneInter(const MvarVecStruct *P,
const MvarVecStruct *V,
const MvarVecStruct *Pln)
Description:
Compute the intersection of a line and a hyperplane, in R^Dim.
Parameters:
| P, V: | Point and direction of line to intersect with hyperplane.
Both P and V are of length Dim.
|
|---|
| Pln: | Hyperplane to intersect with line. Of length Dim+1.
|
|---|
Returned Value:
| MvarVecStruct *: The intersection point.
|
|---|
Keywords:
(ms_circ.c:233)
Prototype:
int MvarMSCircOfThreeCurves(const CagdCrvStruct *OrigCrv1,
const CagdCrvStruct *OrigCrv2,
const CagdCrvStruct *OrigCrv3,
CagdRType Center[2],
CagdRType *Radius,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes the minimum spanning circle to three curves that are disjoint.
Assumption is made that the MSC is tangent to all three curves.
Parameters:
| OrigCrv1, OrigCrv2, OrigCrv3: | The three curves to consider.
Curves could be identical.
|
|---|
| Center: | Center of the computed MSC.
|
|---|
| Radius: | Radius of the computed MSC.
|
|---|
| SubdivTol, NumerTol: | Of computation.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise
|
|---|
See Also:
MvarMSCircOfTwoCurves
MvarMinSpanCirc
MVarIsCrvInsideCirc
MvarSkel2DInter3Prims
Keywords:
(ms_circ.c:66)
Prototype:
int MvarMSCircOfTwoCurves(const CagdCrvStruct *OrigCrv1,
const CagdCrvStruct *OrigCrv2,
CagdRType Center[2],
CagdRType *Radius,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes the minimum spanning circle to two curves that are disjoint.
Assumption is made that the MSC is tangent to both curves.
Parameters:
| OrigCrv1, OrigCrv2: | The two curves to consider.
|
|---|
| Center: | Center of the computed MSC.
|
|---|
| Radius: | Radius of the computed MSC.
|
|---|
| SubdivTol, NumerTol: | Of computation.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise
|
|---|
See Also:
MvarMSCircOfThreeCurves
MvarMinSpanCirc
MVarIsCrvInsideCirc
Keywords:
(hasdrf2d.c:493)
Prototype:
MvarMVStruct *MvarMV3VarFactorUMinusV(MvarMVStruct *MV)
Description:
Removes a (u - v) factor from the given scalar three-multivariate which
is assumed to be a 3-variate F(u, v, w). The u, v parameters are the
first two parameters of the 3-variate.
Parameters:
| MV: | 3-variate (rep. as multivariate) to factor out (u - v) term from.
|
|---|
Returned Value:
| MvarMVStruct *: Factored out 3-variate, (rep. as a multivriate).
|
|---|
See Also:
BspSrfFactorUMinusV
BzrSrfFactorUMinusV
MvarMVBivarFactorUMinusV
MvarMV4VarFactorUMinusV
MvarMV4VarFactorUMinusR
Keywords:
(selfintr.c:248)
Prototype:
MvarMVStruct *MvarMV4VarFactorUMinusR(const MvarMVStruct *MV)
Description:
Removes a (u - r) factor from the given scalar four multivariate which
is assumed to be a 4-variate S(u, v, r, t)
Note that typically a Bspline 4-var will not have (u - r) in all its
patches so use this function with care - this function does not verify
this existence. It is more common to have (u - r) only along symmetric
diagonal patches of the Bsplines, after symbolic operations like
S1(u, v) - S2(r, t).
Parameters:
| MV: | 4-variate (rep. as multivariate) to factor out (u - r) term from.
|
|---|
Returned Value:
| MvarMVStruct *: Factored out bivariate, (rep. as a multivriate).
|
|---|
See Also:
BspSrfFactorUMinusV
BzrSrfFactorUMinusV
MvarMVBivarFactorUMinusV
MvarMV4VarFactorUMinusV
MvarMV3VarFactorUMinusV
Keywords:
(selfintr.c:184)
Prototype:
MvarMVStruct *MvarMV4VarFactorUMinusV(const MvarMVStruct *MV)
Description:
Removes a (u - v) factor from the given scalar four multivariate which
is assumed to be a 4-variate F(u, v, r, t). The u, v parameters are the
first two parameters of the 4-variate. The (u - v) terms are factored
out along the diagonal of the third/fourth parameters which are assumed
to be symmetric as well.
Note that typically a Bspline 4-var will not have (u - v) in all its
all its patches so use this function with care - this function does not
verify this existence. It is more common to have (u - v) only along
symmetric diagonal patches of the Bsplines, after symbolic
operations like S1(u, v) - S2(r, t).
Parameters:
| MV: | 4-variate (rep. as multivariate) to factor out (u - v) term from.
|
|---|
Returned Value:
| MvarMVStruct *: Factored out 4-variate, (rep. as a multivriate).
|
|---|
See Also:
BspSrfFactorUMinusV
BzrSrfFactorUMinusV
MvarMVBivarFactorUMinusV
MvarMV4VarFactorUMinusR
MvarMV3VarFactorUMinusV
Keywords:
(mvar_sym.c:37)
Prototype:
MvarMVStruct *MvarMVAdd(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariates - add them coordinatewise.
The two multivariates are promoted to same point type before the
multiplication can take place. Furthermore, order and continuity are
matched as well.
Parameters:
| MV1, MV2: | Two multivariate to add up coordinatewise.
|
|---|
Returned Value:
| MvarMVStruct *: The summation of MV1 + MV2 coordinatewise.
|
|---|
See Also:
MvarMVSub
MvarMeshAddSub
MvarMVMult
Keywords:
addition
symbolic computation
multivariates
(mvar_aux.c:248)
Prototype:
int MvarMVAuxDomainSlotCopy(MvarMVStruct *MVDst, const MvarMVStruct *MVSrc)
Description:
Copies the optional aux. domain slot from MVSrc to MVDst.
Parameters:
| MVDst: | Destination multivariate to copy domain slot to.
|
|---|
| MVSrc: | Source multivariate to copy domain slot from.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
MvarMVAuxDomainSlotReset
MvarMVAuxDomainSlotSet
MvarMVAuxDomainSlotSet
MvarMVAuxDomainSlotSetRel
Keywords:
(mvar_aux.c:347)
Prototype:
int MvarMVAuxDomainSlotGet(const MvarMVStruct *MV,
CagdRType *Min,
CagdRType *Max,
int Dir)
Description:
Gets one aux. domain range in the given Direction.
Parameters:
| MV: | Multivariate to get its aux. domain slot.
|
|---|
| Min, Max: | The domain of this Bezier multivariate.
|
|---|
| Dir: | The direction to get the domain of MV.
|
|---|
Returned Value:
| int: TRUE if aux. domain exist and can get domain, FALSE otherwise.
|
|---|
See Also:
MvarMVAuxDomainSlotReset
MvarMVAuxDomainSlotCopy
MvarMVAuxDomainSlotSet
MvarMVAuxDomainSlotSetRel
Keywords:
(mvar_aux.c:216)
Prototype:
void MvarMVAuxDomainSlotReset(MvarMVStruct *MV)
Description:
Resets an optional aux. domain slot inside MV for use in cases where MV
has no explict domain (such as Bezier and/or Power basis).
Parameters:
| MV: | Multivariate to reset domain slot.
|
|---|
Returned Value:
See Also:
MvarMVAuxDomainSlotCopy
MvarMVAuxDomainSlotSet
MvarMVAuxDomainSlotSet
MvarMVAuxDomainSlotSetRel
Keywords:
(mvar_aux.c:286)
Prototype:
void MvarMVAuxDomainSlotSet(MvarMVStruct *MV,
CagdRType Min,
CagdRType Max,
int Dir)
Description:
Sets one aux. domain range in the given direction.
Parameters:
| MV: | Multivariate to set its aux. domain slot.
|
|---|
| Min, Max: | The domain of this Bezier multivariate.
|
|---|
| Dir: | The direction where to set the MV domain.
|
|---|
Returned Value:
See Also:
MvarMVAuxDomainSlotReset
MvarMVAuxDomainSlotCopy
MvarMVAuxDomainSlotGet
MvarMVAuxDomainSlotSetRel
Keywords:
(mvar_aux.c:316)
Prototype:
void MvarMVAuxDomainSlotSetRel(MvarMVStruct *MV,
CagdRType Min,
CagdRType Max,
int Dir)
Description:
Sets one aux. domain range in the given direction. Input Min/Max is
relative to current domain.
Parameters:
| MV: | Multivariate to set its aux. domain slot.
|
|---|
| Min, Max: | The relative to current domain new interval of this Bezier
multivariate.
|
|---|
| Dir: | The direction where to set the MV domain.
|
|---|
Returned Value:
See Also:
MvarMVAuxDomainSlotReset
MvarMVAuxDomainSlotCopy
MvarMVAuxDomainSlotSet
MvarMVAuxDomainSlotGet
Keywords:
(mvar_aux.c:676)
Prototype:
void MvarMVBBox(const MvarMVStruct *MV, MvarBBoxStruct *BBox)
Description:
Computes a bounding box for a multi-variate freeform function.
Parameters:
| MV: | To compute a bounding box for.
|
|---|
| BBox: | Where bounding information is to be saved.
|
|---|
Returned Value:
Keywords:
bbox
bounding box
(mvtangnt.c:65)
Prototype:
MvarPtStruct *MvarMVBiTangents(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
int Orientation,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes bi-tangents of freeform bivariate.
Let,
DMV = MV1(u, v) - MV2(r, s)
then, computed the simultaneous solution of the following three equations:
d MV1 d MV1 d MV2
< ----- x -----, ----- > = 0,
du dv dr
d MV1 d MV1 d MV2
< ----- x -----, ----- > = 0,
du dv ds
d MV1 d MV1
< ----- x -----, DMV > = 0.
du dv
If an orientation" value 1 or -1 is prescribed, then only bitangent
surfaces with similar (1) or opposite (-1) orientations are computed and
returned.
Parameters:
| CMV1, CMV2: | The two multivariates to compute the bi-tangents for.
If MV2 == NULL, the self bi-tangents of MV1 are computed.
|
|---|
| Orientation: | 0 for no effect, -1 or +1 for a request to get opposite
or similar normal orientation bi tangencies only.
|
|---|
| SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
|---|
| NumericTol: | Numeric tolerance of the numeric stage. The numeric stage
is employed only if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: Points on the bi-tangents of the two multivariates.
|
|---|
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents2
MvarMVTriTangents
Keywords:
bi-tangent
(mvtangnt.c:219)
Prototype:
MvarPtStruct *MvarMVBiTangents2(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes bi-tangents of freeform bivariate.
Let,
DMV = MV1(u, v) - MV2(r, s)
then, computed the simultaneous solution of the following two equations:
d MV1 d MV1
< ----- x -----, DMV > = 0,
du dv
d MV2 d MV2
< ----- x -----, DMV > = 0,
dr ds
Parameters:
| CMV1, CMV2: | The two multivariates to compute the bi-tangents for.
If MV2 == NULL, the self bi-tangents of MV1 are computed.
|
|---|
| SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
|---|
| NumericTol: | Numeric tolerance of the numeric stage. The numeric stage
is employed only if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: Points on the bi-tangents of the two multivariates.
|
|---|
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents
MvarMVTriTangents
Keywords:
bi-tangent
(selfintr.c:84)
Prototype:
MvarMVStruct *MvarMVBivarFactorUMinusV(const MvarMVStruct *MV)
Description:
Removes a (u - v) factor from the given scalar multivariate which is
assumed to be a bivariate S(u, v).
Note that typically a Bspline surface will not have (u - v) in all its
patches so use this function with care - this function does not verify
this existence. It is more common to have (u - v) only along symmetric
diagonal patches of the Bspline surface, after symbolic operations like
C1(u) - C2(v).
Parameters:
| MV: | Bivariate (rep. as multivriate) to factor out a (u - v) term from.
|
|---|
Returned Value:
| MvarMVStruct *: Factored out bivariate, (rep. as a multivriate).
|
|---|
See Also:
BspSrfFactorUMinusV
BzrSrfFactorUMinusV
MvarMV4VarFactorUMinusVRMinusT
MvarMV3VarFactorUMinusV
Keywords:
(mvcones.c:1261)
Prototype:
CagdBType MvarMVConesOverlap(MvarMVStruct * const *MVs, int NumOfZeroMVs)
Description:
Computes the tangency anti-cones of the set of multivariate constraints,
and returns whether they overlap or not.
Parameters:
| MVs: | Multivariates to derive their tangentcy anti-cones.
|
|---|
| NumOfZeroMVs: | Size of the vector MVs.
|
|---|
Returned Value:
| CagdBType: TRUE if overlap, FALSE if not.
|
|---|
See Also:
MVarMVNormalCone
Keywords:
(mvar_gen.c:263)
Prototype:
MvarMVStruct *MvarMVCopy(const MvarMVStruct *MV)
Description:
Allocates and duplicates all slots of a multi-variate structure.
Parameters:
| MV: | Multi-Variate to duplicate
|
|---|
Returned Value:
| MvarMVStruct *: Duplicated multi-variate.
|
|---|
Keywords:
multi-variates
(mvar_gen.c:390)
Prototype:
MvarMVStruct *MvarMVCopyList(const MvarMVStruct *MVList)
Description:
Duplicates a list of multi-variate structures.
Parameters:
| MVList: | List of multi-variates to duplicate.
|
|---|
Returned Value:
| MvarMVStruct *: Duplicated list of multi-variates.
|
|---|
Keywords:
multi-variates
(mvar_sym.c:450)
Prototype:
MvarMVStruct *MvarMVCrossProd(const MvarMVStruct *MV1,
const MvarMVStruct *MV2)
Description:
Given two multivariates - computes their cross product.
Returned multivariate is a vector multivariate representing the cross
product of the two given multivariates.
Parameters:
| MV1, MV2: | Two multivariate to multiply and compute a cross product for.
|
|---|
Returned Value:
| MvarMVStruct *: A vector multivariate representing the cross product
of MV1 x MV2.
|
|---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd2D
Keywords:
product
cross product
multivariates
mbolic computation
(mvar_sym.c:546)
Prototype:
MvarMVStruct *MvarMVCrossProd2D(const MvarMVStruct *MV1X,
const MvarMVStruct *MV1Y,
const MvarMVStruct *MV2X,
const MvarMVStruct *MV2Y)
Description:
Given four multivariates - computes their 2D cross product.
Returned multivariate is a scalar multivariate representing the cross
product of the four given multivariates, as X1 * Y2 - X2 * Y1.
Parameters:
| MV1X, MV1Y: | First pair of scalar multivariates (X, Y) of first funcs.
|
|---|
| MV2X, MV2Y: | Second pair of scalar multivariates (X, Y) of second funcs.
|
|---|
Returned Value:
| MvarMVStruct *: A scalar multivariate representing the cross product
of MV1X * MV2Y - MV2X * MV1Y.
|
|---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd
Keywords:
product
cross product
multivariates
mbolic computation
(mvarrais.c:292)
Prototype:
MvarMVStruct *MvarMVDegreeRaise(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Returns a new multivariate representing the same curve as MV but with its
degree raised by one.
Parameters:
| MV: | To raise its degree.
|
|---|
| Dir: | Direction of degree raising.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariate with same geometry as MV but with one
degree higher.
|
|---|
See Also:
MvarMVDegreeRaiseN
MvarMVDegreeRaise2
MvarMVPwrDegreeRaise
Keywords:
degree raising
(mvarrais.c:335)
Prototype:
MvarMVStruct *MvarMVDegreeRaise2(MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Returns a new multivariate representing the same curve as MV but with its
degree raised by one.
Parameters:
| MV: | To raise its degree.
|
|---|
| Dir: | Direction of degree raising.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariate with same geometry as MV but with one
degree higher.
|
|---|
See Also:
MvarMVDegreeRaise
MvarMVDegreeRaise3
MvarMVDegreeRaiseN
MvarMVPwrDegreeRaise
Keywords:
degree raising
(mvarrais.c:417)
Prototype:
MvarMVStruct *MvarMVDegreeRaise3(MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Returns a new multivariate representing the same curve as MV but with its
degree raised by one.
Parameters:
| MV: | To raise its degree.
|
|---|
| Dir: | Direction of degree raising.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariate with same geometry as MV but with one
degree higher.
|
|---|
See Also:
MvarMVDegreeRaiseN
MvarMVDegreeRaise
MvarMVDegreeRaise2
MvarMVPwrDegreeRaise
Keywords:
degree raising
(mvarrais.c:33)
Prototype:
MvarMVStruct *MvarMVDegreeRaiseN(const MvarMVStruct *MV, int *NewOrders)
Description:
Returns a new multivariate representing the same curve as MV but with its
degree raised by the NewOrders prescription.
Parameters:
| MV: | To raise its degree.
|
|---|
| NewOrders: | A vector prescribing the new orders of MV. Length of this
vector is MV -> Dim.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariate with same geometry as MV but with
higher degrees.
|
|---|
See Also:
MvarMVDegreeRaise
MvarMVPwrDegreeRaise
MvarMVDegreeRaiseN2
Keywords:
degree raising
(mvarrais.c:197)
Prototype:
MvarMVStruct *MvarMVDegreeRaiseN2(MvarMVStruct *MV, int *NewOrders)
Description:
Returns a new multivariate representing the same curve as MV but with its
degree raised by the NewOrders prescription.
Parameters:
| MV: | To raise its degree.
|
|---|
| NewOrders: | A vector prescribing the new orders of MV. Length of this
vector is MV -> Dim.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariate with same geometry as MV but with
higher degrees.
|
|---|
See Also:
MvarMVDegreeRaise
MvarMVPwrDegreeRaise
MvarMVDegreeRaiseN
Keywords:
degree raising
(mvar_der.c:29)
Prototype:
MvarMVStruct *MvarMVDerive(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Given a multi-variate, computes its partial derivative multi-variate in
direction Dir.
Parameters:
| MV: | Multi-Variate to differentiate.
|
|---|
| Dir: | Direction of differentiation.
|
|---|
Returned Value:
| MvarMVStruct *: Differentiated multi-variate in direction Dir.
|
|---|
Keywords:
multi-variates
(mvar_det.c:34)
Prototype:
MvarMVStruct *MvarMVDeterminant2(const MvarMVStruct *MV11,
const MvarMVStruct *MV12,
const MvarMVStruct *MV21,
const MvarMVStruct *MV22)
Description:
Computes the expression of MV11 * MV22 - MV12 * MV21, which is a
determinant of a 2 by 2 matrix.
Parameters:
| MV11, MV12, MV21, MV22: | The four factors of the determinant.
|
|---|
Returned Value:
| MvarMVStruct *: A scalar field representing the determinant computation.
|
|---|
See Also:
MvarMVDeterminant3
MvarSrfDeterminant2
MvarCrvDeterminant2
Keywords:
determinant
(mvar_det.c:73)
Prototype:
MvarMVStruct *MvarMVDeterminant3(const MvarMVStruct *MV11,
const MvarMVStruct *MV12,
const MvarMVStruct *MV13,
const MvarMVStruct *MV21,
const MvarMVStruct *MV22,
const MvarMVStruct *MV23,
const MvarMVStruct *MV31,
const MvarMVStruct *MV32,
const MvarMVStruct *MV33)
Description:
Computes the expression of a 3 by 3 determinants.
Parameters:
| MV11, MV12, MV13: | The nine factors of the determinant.
|
|---|
| MV21, MV22, MV23: | "
|
|---|
| MV31, MV32, MV33: | "
|
|---|
Returned Value:
| MvarMVStruct *: A scalar field representing the determinant computation.
|
|---|
See Also:
MvarMVDeterminant2
MvarMVDeterminant4
SymbSrfDeterminant3
SymbCrvDeterminant3
Keywords:
determinant
(mvar_det.c:130)
Prototype:
MvarMVStruct *MvarMVDeterminant4(const MvarMVStruct *MV11,
const MvarMVStruct *MV12,
const MvarMVStruct *MV13,
const MvarMVStruct *MV14,
const MvarMVStruct *MV21,
const MvarMVStruct *MV22,
const MvarMVStruct *MV23,
const MvarMVStruct *MV24,
const MvarMVStruct *MV31,
const MvarMVStruct *MV32,
const MvarMVStruct *MV33,
const MvarMVStruct *MV34,
const MvarMVStruct *MV41,
const MvarMVStruct *MV42,
const MvarMVStruct *MV43,
const MvarMVStruct *MV44)
Description:
Computes the expression of a 4 by 4 determinants.
Parameters:
| MV11, MV12, MV13, MV14: | The 16 factors of the determinant.
|
|---|
| MV21, MV22, MV23, MV24: | "
|
|---|
| MV31, MV32, MV33, MV34: | "
|
|---|
| MV41, MV42, MV43, MV44: | "
|
|---|
Returned Value:
| MvarMVStruct *: A scalar field representing the determinant computation.
|
|---|
See Also:
MvarMVDeterminant3
MvarMVDeterminant5
Keywords:
determinant
(mvar_det.c:212)
Prototype:
MvarMVStruct *MvarMVDeterminant5(const MvarMVStruct *MV11,
const MvarMVStruct *MV12,
const MvarMVStruct *MV13,
const MvarMVStruct *MV14,
const MvarMVStruct *MV15,
const MvarMVStruct *MV21,
const MvarMVStruct *MV22,
const MvarMVStruct *MV23,
const MvarMVStruct *MV24,
const MvarMVStruct *MV25,
const MvarMVStruct *MV31,
const MvarMVStruct *MV32,
const MvarMVStruct *MV33,
const MvarMVStruct *MV34,
const MvarMVStruct *MV35,
const MvarMVStruct *MV41,
const MvarMVStruct *MV42,
const MvarMVStruct *MV43,
const MvarMVStruct *MV44,
const MvarMVStruct *MV45,
const MvarMVStruct *MV51,
const MvarMVStruct *MV52,
const MvarMVStruct *MV53,
const MvarMVStruct *MV54,
const MvarMVStruct *MV55)
Description:
Computes the expression of a 5 by 5 determinants.
Parameters:
| MV11, MV12, MV13, MV14, MV15: | The 25 factors of the determinant.
|
|---|
| MV21, MV22, MV23, MV24, MV25: | "
|
|---|
| MV31, MV32, MV33, MV34, MV35: | "
|
|---|
| MV41, MV42, MV43, MV44, MV45: | "
|
|---|
| MV51, MV52, MV53, MV54, MV55: | "
|
|---|
Returned Value:
| MvarMVStruct *: A scalar field representing the determinant computation.
|
|---|
See Also:
MvarMVDeterminant4
Keywords:
determinant
(mvardist.c:348)
Prototype:
MvarMVStruct *MvarMVDistCrvSrf(const CagdCrvStruct *Crv1,
const CagdSrfStruct *Srf2,
int DistType)
Description:
Given a curve and a surface, creates a multivariate scalar field
representing the distance function square, between them.
Parameters:
| Crv1, Srf2: | The two entities, Crv1(t) and Srf2(u, v), to form their
distance function square between them as a multivariate
function.
|
|---|
| DistType: | 0 for distance vector function,
1 for distance square scalar function,
2 for distance vector projected on the normal of Crv1,
3 for distance vector projected on the normal of Srf2.
In cases 2 and 3 the normal field is not normalized.
|
|---|
Returned Value:
| MvarMVStruct *: The distance function square d2(t, u, v) of the
distance from Crv1(t) to Srf2(u, v).
|
|---|
See Also:
SymbSrfDistCrvCrv
SymbCrvCrvInter
SymbSrfDistFindPoints
MvarMVDistSrfSrf
Keywords:
curve surface distance
(mvardist.c:434)
Prototype:
MvarMVStruct *MvarMVDistSrfSrf(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
int DistType)
Description:
Given two surfaces, creates a multivariate scalar field representing the
distance function square, between them.
Parameters:
| Srf1, Srf2: | The two surfaces, Srf1(u, v) and Srf2(r, t), to form their
distance function square between them as a multivariate
function.
|
|---|
| DistType: | 0 for distance vector function,
1 for distance square scalar function,
2 for distance vector projected on the normal of Srf1,
3 for distance vector projected on the normal of Srf2.
In cases 2 and 3 the normal field is not normalized.
|
|---|
Returned Value:
| MvarMVStruct *: The distance function square d2(u, v, r, t) of the
distance from Srf1(u, v) to Srf2(r, t).
|
|---|
See Also:
SymbSrfDistCrvCrv
SymbCrvCrvInter
SymbSrfDistFindPoints
MvarMVDistCrvSrf
Keywords:
surface surface distance
(mvar_aux.c:45)
Prototype:
void MvarMVDomain(const MvarMVStruct *MV,
CagdRType *Min,
CagdRType *Max,
int Axis)
Description:
Given a multi-variate, returns its parametric domain. The Min/Max arrays
are assumed to of sufficiently large enough space to hold all dimensions,
if Axis == -1.
Parameters:
| MV: | Multi variate function to consider.
|
|---|
| Min: | Minimum domains of MV will be placed herein.
|
|---|
| Max: | Maximum domains of MV will be placed herein.
|
|---|
| Axis: | axis to extract or -1 for all axes.
|
|---|
Returned Value:
See Also:
varMVSetDomain
MvarMVSetAllDomains
MvarParamInDomain
varParamsInDomain
Keywords:
multi-variates
(mvar_aux.c:114)
Prototype:
void MvarMVDomainAlloc(MvarMVStruct *MV,
CagdRType **MinDmn,
CagdRType **MaxDmn)
Description:
Same as MvarMVDomain but also allocate the space to hold the domain.
Parameters:
| MV: | Multivariate structures to receive its domain.
|
|---|
| MinDmn: | Array of maximal values.
|
|---|
| MaxDmn: | Array of minimal values.
|
|---|
Returned Value:
See Also:
MvarMVDomain
MvarMVDomainFree
Keywords:
(mvar_aux.c:141)
Prototype:
void MvarMVDomainFree(CagdRType *MinDmn, CagdRType *MaxDmn)
Description:
Deallocates the memory of MV's domain, as allocated by MvarMVDomain2.
Parameters:
| MinDmn: | Array of maximal values.
|
|---|
| MaxDmn: | Array of minimal values.
|
|---|
Returned Value:
See Also:
MvarMVDomain
MvarMVDomainAlloc
Keywords:
(mvar_sym.c:326)
Prototype:
MvarMVStruct *MvarMVDotProd(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariates - computes their dot product.
Returned multivariate is a scalar multivariate representing the dot
product of the two given multivariates.
While typically in R3, the dot product can be computed for any
dimension of MV1 and MV2.
Parameters:
| MV1, MV2: | Two multivariate to multiply and compute a dot product for.
|
|---|
Returned Value:
| MvarMVStruct *: A scalar multivariate representing the dot product of
MV1 . MV2.
|
|---|
See Also:
MvarMVMult
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd
Keywords:
product
dot product
symbolic computation
multivariates
(mvareval.c:427)
Prototype:
CagdRType *MvarMVEval(const MvarMVStruct *MV, CagdRType *Params)
Description:
Evaluates the given multivariate function at a given location.
Same functionality as MvarMVEval2 but a different and faster
implementation for Bezier evaluations.
Parameters:
| MV: | To evaluate at given Params parametric location.
|
|---|
| Params: | Parametric location to evaluate MV at.
|
|---|
Returned Value:
| CagdRType *: A vector holding all the coefficients of all components
of the multi-variate's point type. If for example
multi-variate point type is P2, the W, X, and Y will be
saved in the first three locations of the returned vector.
The first location (index 0) of the returned vector is
reserved for the rational coefficient W and XYZ always
starts at second location of the returned vector
|
|---|
See Also:
MvarMVEval2
MvarMVEvalGradient
MvarMVEvalGradient2
Keywords:
evaluation
multi-variates
(mvareval.c:39)
Prototype:
CagdRType *MvarMVEval2(const MvarMVStruct *MV, CagdRType *Params)
Description:
Evaluates the given multivariate function at a given location.
Same functionality as MvarMVEval but a different implementation.
Parameters:
| MV: | To evaluate at given Params parametric location.
|
|---|
| Params: | Parametric location to evaluate MV at.
|
|---|
Returned Value:
| CagdRType *: A vector holding all the coefficients of all components
of the multi-variate's point type. If for example
multi-variate point type is P2, the W, X, and Y will be
saved in the first three locations of the returned vector.
The first location (index 0) of the returned vector is
reserved for the rational coefficient W and XYZ always
starts at second location of the returned vector
(index 1).
|
|---|
See Also:
MvarMVEval
MvarMVEvalGradient
MvarMVEvalGradient2
Keywords:
evaluation
multi-variates
(mvar_der.c:329)
Prototype:
CagdRType *MvarMVEvalGradient(const MvarMVGradientStruct *MVGrad,
CagdRType *Params,
int Axis)
Description:
Evaluates the gradient function at the given parameteric location.
Parameters:
| MVGrad: | Input gradient function to evaluate at.
|
|---|
| Params: | Parametric location to evaluate gradient at.
|
|---|
| Axis: | If the input function whose gradient we seek is scalar, Axis
will always be zero. However we can also handle input vector
functions in which case Axis specifies which function in the
vector to compute the gradient for - 0 for X, 1 for Y, etc.
|
|---|
Returned Value:
| CagdRType *: The gradient at Params.
|
|---|
See Also:
MvarMVDerive
MvarMVFreeGradient
MvarMVPrepGradient
MvarMVEvalGradient2
Keywords:
(mvareval.c:536)
Prototype:
CagdRType *MvarMVEvalGradient2(const MvarMVStruct *MV,
CagdRType *Params,
int *HasOrig)
Description:
Evaluates the gradient of the given multivariate function at a given
location, numerically. Allowed for scalar multivariates only.
Parameters:
| MV: | To evaluate its gradient at given Params parametric location.
|
|---|
| Params: | Parametric location to evaluate MV at.
|
|---|
| HasOrig: | TRUE if the cached gradient also contains the original scalar
field, as last, additional, coordinate.
|
|---|
Returned Value:
| CagdRType *: A vector holding all the coefficients of all components
of the multi-variate's point type. If for example
multi-variate point type is P2, the W, X, and Y will be
saved in the first three locations of the returned vector.
The first location (index 0) of the returned vector is
reserved for the rational coefficient W and XYZ always
starts at second location of the returned vector
(index 1).
|
|---|
See Also:
MvarMVEval
MvarMVEvalTanPlane
MvarMVEvalGradient
Keywords:
evaluation
multi-variates
gradient
(mvareval.c:620)
Prototype:
MvarPlaneStruct *MvarMVEvalTanPlane(const MvarMVStruct *MV, CagdRType *Params)
Description:
Evaluates the tangent hyperplane of the given multivariate function at a
given location, numerically. Assumes a scalar multivariates of n
parameters in a space of dimension n+1 (An explicit surface in E3).
Parameters:
| MV: | To evaluate its gradient at given Params parametric location.
|
|---|
| Params: | Parametric location to evaluate MV at.
|
|---|
Returned Value:
| MvarPlaneStruct *: A hyperplane, allocated dynammically. The tanegnt
is normalized so that its last (independent coefficient is
one: "A1 X1 + A2 X2 + ... + An Xn + 1". The size, n, is
to the dimension of the multivariate.
|
|---|
See Also:
MvarMVEval
MvarMVEvalGradient2
Keywords:
evaluation
multi-variates
gradient
(mvar_gen.c:422)
Prototype:
void MvarMVFree(MvarMVStruct *MV)
Description:
Deallocates and frees all slots of a multi-variate structure.
Parameters:
| MV: | Multi-Variate to free.
|
|---|
Returned Value:
See Also:
MvarMVNew
Keywords:
multi-variates
(mvar_der.c:288)
Prototype:
void MvarMVFreeGradient(MvarMVGradientStruct *MVGrad)
Description:
Free an gradient function.
Parameters:
| MVGrad: | Gradient function to free.
|
|---|
Returned Value:
See Also:
MvarMVDerive
MvarMVPrepGradient
MvarMVEvalGradient
Keywords:
(mvar_gen.c:485)
Prototype:
void MvarMVFreeList(MvarMVStruct *MVList)
Description:
Deallocates and frees a list of multi-variate structures.
Parameters:
| MVList: | Multi-Variate list to free.
|
|---|
Returned Value:
Keywords:
multi-variates
(mvareval.c:672)
Prototype:
MvarMVStruct *MvarMVFromMV(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir)
Description:
Extract an isoparametric sub multivariate out of the given tensor product
multivariate, or expand its dimension by one.
Parameters:
| MV: | To extract an isoparametric multi-variate from at parameter
value t in direction Dir, or exapand its dimension by one.
|
|---|
| t: | Parameter value at which to extract the isosurface (if Dir >= 0).
|
|---|
| Dir: | Direction of isosurface extraction. If Dir is negative, however,
its absolute value defines the order of a new axis added as last
and new dimension to the given MV.
|
|---|
Returned Value:
| MvarMVStruct *: A multi - variate with one less (or more) dimensions.
|
|---|
See Also:
MvarMVReverse
MvarMVFromMesh
MvarPromoteMVToMV
Keywords:
multi-variates
(mvareval.c:858)
Prototype:
MvarMVStruct *MvarMVFromMesh(const MvarMVStruct *MV,
int Index,
MvarMVDirType Dir)
Description:
Extract an isoparametric sub multi variate out of the given tensor product
multi-variate, or expand its dimension by one.
Parameters:
| MV: | To extract an isoparametric multi-variate from as a sub-mesh
in direction Dir, or exapand its dimension by one.
|
|---|
| Index: | ndex of sub mesh of MV's mesh in direction Dir.
|
|---|
| Dir: | Direction of isosurface extraction. If Dir is negative, however,
its absolute value defines the order of a new axis added as last
and new dimension to the given MV.
|
|---|
Returned Value:
| MvarMVStruct *: A multi - variate with one less (or more) dimensions.
|
|---|
See Also:
MvarMVReverse
MvarMVFromMVm
MvarPromoteMVToMV
Keywords:
multi-variates
(mvar_aux.c:541)
Prototype:
MvarPtStruct *MvarMVIntersPtOnBndry(MvarMVStruct *MV,
MvarPtStruct *PointIns,
MvarPtStruct *PointOuts)
Description:
Computes the intersection point of line (PoinIns, PointOuts) with
the boundary of the domain of multivariate MV.
Parameters:
| MV: | Multivariate structure.
|
|---|
| PointIns: | point inside the domain.
|
|---|
| PointOuts: | point outside the domain.
|
|---|
Returned Value:
| MvarPtStruct *: The intersection point.
|
|---|
See Also:
MvarParamsInDomain
Keywords:
(mvar_sym.c:161)
Prototype:
MvarMVStruct *MvarMVInvert(const MvarMVStruct *MV)
Description:
Given a scalar multivariate, returns a scalar multivariate representing
the reciprocal values, by making it rational (if was not one) and flipping
the numerator and the denominator.
Parameters:
| MV: | A scalar multivariate to compute a reciprocal value for.
|
|---|
Returned Value:
| MvarMVStruct *: A rational scalar multivariate that is equal to the
reciprocal value of MV.
|
|---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVMult
MvarMVCrossProd
Keywords:
division
symbolic computation
reciprocal value
ltivariates
(mvar_aux.c:697)
Prototype:
void MvarMVListBBox(const MvarMVStruct *MVs, MvarBBoxStruct *BBox)
Description:
Computes a bounding box for a list of multi-variate freeform function.
Parameters:
| MVs: | To compute a bounding box for.
|
|---|
| BBox: | Where bounding information is to be saved.
|
|---|
Returned Value:
Keywords:
bbox
bounding box
(mvar_gen.c:1385)
Prototype:
void MvarMVMatTransform(MvarMVStruct *MV, CagdMType Mat)
Description:
Transforms, in place, the given MV as specified by homogeneous matrix Mat.
Parameters:
| MV: | Multi-variate to transform.
|
|---|
| Mat: | Homogeneous transformation to apply to MV.
|
|---|
Returned Value:
Keywords:
multi-variates
(mvar_sym.c:810)
Prototype:
MvarMVStruct *MvarMVMergeScalar(MvarMVStruct * const *ScalarMVs)
Description:
Given a set of scalar multivariates, treat them as coordinates into a new
multivariates
Assumes at least X axis not NULL when a scalar multivariate is returned.
Assumes all axes are either E1 or P1 in which the weights are assumed
to be identical and can be ignored if W axis exists or copied otherwise.
Parameters:
| ScalarMVs: | A vector of scalar MVs. Location 0 holds the W or NULL
otherwise, Location 1 holds the X axis and so on.
This vector is assumed to have MVAR_MAX_PT_COORD coordinates.
|
|---|
Returned Value:
| MvarMVStruct *: A new multivariates constructed from given scalar
multivariates.
|
|---|
See Also:
MvarMVSplitScalar
Keywords:
merge
multivariates
symbolic computation
(mvar_sym.c:121)
Prototype:
MvarMVStruct *MvarMVMult(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariates - multiply them coordinatewise.
The two multivariates are promoted to same point type before the
multiplication can take place.
Parameters:
| MV1, MV2: | Two multivariate to multiply coordinatewise.
|
|---|
Returned Value:
| MvarMVStruct *: The product of MV1 * MV2 coordinatewise.
|
|---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
Keywords:
product
symbolic computation
multivariates
(mvar_sym.c:265)
Prototype:
MvarMVStruct *MvarMVMultScalar(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariate - a vector multivariate MV1 and a scalar
multivariate MV2, multiply all MV1's coordinates by the scalar
multivariate MV2.
Returned multivariate is a multivariate representing the product of the
two given multivariates.
Parameters:
| MV1, MV2: | Two multivariates to multiply.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariate representing the product of MV1 and MV2.
|
|---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVMult
MvarMVCrossProd
MvarCrvMultScalar
Keywords:
product
symbolic computation
multivariates
(mvarprim.c:30)
Prototype:
MvarMVStruct *MvarMVMultiLinearMV(const IrtRType *Min,
const IrtRType *Max,
int Dim)
Description:
Constructs a mulit-linear multivariates that spans the [Min, Max]
ranges in all Dim dimenions.
Parameters:
| Min: | Minimal values of the expected ranges.
|
|---|
| Max: | Maximal values of the expected ranges.
|
|---|
| Dim: | Dimension of expect multivariate.
|
|---|
Returned Value:
| MvarMVStruct *: Constructed multi-linear function.
|
|---|
Keywords:
(mvar_gen.c:59)
Prototype:
MvarMVStruct *MvarMVNew(int Dim,
MvarGeomType GType,
MvarPointType PType,
const int *Lengths)
Description:
Allocates the memory required for a new multi-variate.
Parameters:
| Dim: | Number of dimensions of this multi-variate.
|
|---|
| GType: | Type of geometry the curve should be - Bspline, Bezier etc.
|
|---|
| PType: | Type of control points (E2, P3, etc.).
|
|---|
| Lengths: | Of control mesh in each of the dimensions. Vector of size Dim.
|
|---|
Returned Value:
| MvarMVStruct *: An uninitialized freeform multi-variate.
|
|---|
See Also:
MvarMVFree
MvarBzrMVNew
MvarBspMVNew
Keywords:
multi-variates
allocation
(mvar_der.c:227)
Prototype:
MvarMVGradientStruct *MvarMVPrepGradient(const MvarMVStruct *MV,
CagdBType Orig)
Description:
Builds a gradient for the given scalar multivariate.
If the input is rational, returned is a dynamically allocated vector of
scalar mulitvariate functions each representing Dm/Dui, i from 1 to Dim.
The returned partial derivative are differentiated directly without the
quotient rule which must be applied manually.
Otherwise, if the input is polynomial, the gradient is returned as one
vector function.
Parameters:
| MV: | Input scalar field to compute its gradient function.
|
|---|
| Orig: | If orig TRUE and input is polynomial, the original scalar MV is
also placed as last, additional, dimension (for faster evaluation
of MV and its gradient).
|
|---|
Returned Value:
| MvarMVGradientStruct *: The gradient function of the input scalar field.
|
|---|
See Also:
MvarMVDerive
MvarMVFreeGradient
MvarMVEvalGradient
Keywords:
(mvarrais.c:549)
Prototype:
MvarMVStruct *MvarMVPwrDegreeRaise(const MvarMVStruct *MV,
int Dir,
int IncOrder)
Description:
Increase the order of the given power basis multivariate in direction
Dir by IncOrder amount. IncOrder amount is at least one.
Parameters:
| MV: | Multivariate to increase its order in direction Dir.
|
|---|
| Dir: | Direction to increase the order.
|
|---|
| IncOrder: | y how much to increase the order, at least one.
|
|---|
Returned Value:
| MvarMVStruct *: New multivariate with higher order.
|
|---|
See Also:
MvarMVDegreeRaise
MvarMVDegreeRaiseN
MvarMVDegreeRaise2
Keywords:
(mvar_ref.c:41)
Prototype:
MvarMVStruct *MvarMVRefineAtParams(const MvarMVStruct *MV,
MvarMVDirType Dir,
CagdBType Replace,
CagdRType *t,
int n)
Description:
Given a multi-variate, refines it at the given n knots as defined by the
vector t.
If Replace is TRUE, the values replace the current knot vector.
Returns pointer to refined MV (Note a Bezier multi-variate will be
converted into a Bspline multi-variate).
Parameters:
| MV: | Multi-variate to refine according to t in direction Dir.
|
|---|
| Dir: | Direction of refinement. Either U or V or W.
|
|---|
| Replace: | If TRUE t is a knot vector exaclt in the length of the knot
vector in direction Dir in MV and t simply replaces than knot
vector. If FALSE, the knot vector in direction Dir in MV is
refined by adding all the knots in t.
|
|---|
| t: | Knot vector to refine/replace the knot vector of MV in
direction Dir.
|
|---|
| n: | Length of vector t.
|
|---|
Returned Value:
| MvarMVStruct *: The refined multi-variate. Always a Bspline.
|
|---|
Keywords:
multi-variates
(mvar_aux.c:610)
Prototype:
MvarMVStruct *MvarMVRegionFromMV(const MvarMVStruct *MV,
CagdRType t1,
CagdRType t2,
MvarMVDirType Dir)
Description:
Given a multi-variate, returns a sub-region of it.
Parameters:
| MV: | To extract a sub-region from.
|
|---|
| t1, t2: | Domain to extract from MV, in parametric direction Dir.
|
|---|
| Dir: | Direction to extract the sub-region. Either U or V or W.
|
|---|
Returned Value:
| MvarMVStruct *: A sub-region of MV from t1 to t2 in direction Dir.
|
|---|
Keywords:
multi-variates
(mvar_rev.c:31)
Prototype:
MvarMVStruct *MvarMVReverse(const MvarMVStruct *MV, int Axis1, int Axis2)
Description:
Reverse the role of the given two axis by flipping them out.
Parameters:
| MV: | Multi-Variate to reverse.
|
|---|
| Axis1, Axis2: | Two axis to flip over.
|
|---|
Returned Value:
| MvarMVStruct *: Reversed multi-variate.
|
|---|
See Also:
MvarPromoteMVToMV
MvarMVShiftAxes
Keywords:
multi-variates
(mvar_sym.c:589)
Prototype:
MvarMVStruct *MvarMVRtnlMult(const MvarMVStruct *MV1X,
const MvarMVStruct *MV1W,
const MvarMVStruct *MV2X,
const MvarMVStruct *MV2W,
CagdBType OperationAdd)
Description:
Given two multivariates - multiply them using the quotient product rule:
X = X1 W2 +/- X2 W1
All provided multivariates are assumed to be non rational scalar
multivariates.
Returned is a non rational scalar multivariate (CAGD_PT_E1_TYPE).
Parameters:
| MV1X: | Numerator of first multivariate.
|
|---|
| MV1W: | Denominator of first multivariate. Can be NULL.
|
|---|
| MV2X: | Numerator of second multivariate.
|
|---|
| MV2W: | Denominator of second multivariate. Can be NULL.
|
|---|
| OperationAdd: | TRUE for addition, FALSE for subtraction.
|
|---|
Returned Value:
| MvarMVStruct *: The result of MV1X MV2W +/- MV2X MV1W.
|
|---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd2D
Keywords:
product
multivariates
symbolic computation
(mvar_sym.c:223)
Prototype:
MvarMVStruct *MvarMVScalarScale(const MvarMVStruct *CMV, CagdRType Scale)
Description:
Given a multivariate, scale it by Scale.
Parameters:
| CMV: | A multivariate to scale by magnitude Scale.
|
|---|
| Scale: | Scaling factor.
|
|---|
Returned Value:
| MvarMVStruct *: A multivariates scaled by Scale compared to MV.
|
|---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVMult
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd
Keywords:
scaling
symbolic computation
multivariates
(mvar_aux.c:383)
Prototype:
MvarMVStruct *MvarMVSetAllDomains(MvarMVStruct *MV,
CagdRType *Min,
CagdRType *Max,
int InPlace)
Description:
Given a multi-variate, sets its parametric domain in all directions to be
between Min and Max.
If the MV is a Bezier and the domain requested is not [0, 1], it is
coerced to a Bspline first.
Parameters:
| MV: | Multi variate function to update its domain.
|
|---|
| Min: | New minimum domains of MV.
|
|---|
| Max: | New maximum domains of MV.
|
|---|
| InPlace: | f TRUE, updates domain in place, unless was a Bezier that was
converted into a Bspline, in which case the Bezier is released.
|
|---|
Returned Value:
| MvarMVStruct *: Same multivariate with the updated domain in dir Axis.
|
|---|
See Also:
varMVDomain
MvarMVSetAllDomains
MvarParamInDomain
MvarParamsInDomain
Keywords:
multi-variates
(mvar_aux.c:174)
Prototype:
MvarMVStruct *MvarMVSetDomain(MvarMVStruct *MV,
CagdRType Min,
CagdRType Max,
int Axis,
int InPlace)
Description:
Given a multi-variate, sets its parametric domain in direction Axis to be
between Min and Max.
If the MV is a Bezier and the domain requested is not [0, 1], it is
coerced to a Bspline first.
Parameters:
| MV: | Multi variate function to update its domain.
|
|---|
| Min: | New minimum domain in Axis direction of MV.
|
|---|
| Max: | New maximum domain in Axis direction of MV.
|
|---|
| Axis: | Axis to set a new domain for.
|
|---|
| InPlace: | f TRUE, updates domain in place if possible. A Bezier can be
converted into a Bspline, in which case the Bezier is released.
|
|---|
Returned Value:
| MvarMVStruct *: Same multivariate with the updated domain in dir Axis.
|
|---|
See Also:
varMVDomain
MvarMVSetAllDomains
MvarParamInDomain
MvarParamsInDomain
Keywords:
multi-variates
(mvar_rev.c:102)
Prototype:
MvarMVStruct *MvarMVShiftAxes(const MvarMVStruct *MV, int Axis)
Description:
Shift the last index in, instead of index Axis. All axes after Axis are
shifted forward one location as well.
Parameters:
| MV: | Multi-Variate to shift axes.
|
|---|
| Axis: | From where to shift forward until last Axis and put last Axis
Here instead.
|
|---|
Returned Value:
| MvarMVStruct *: Multi-variate, with shifted axes
|
|---|
See Also:
MvarMVReverse
MvarPromoteMVToMV
Keywords:
multi-variates
(mvar_sym.c:752)
Prototype:
MvarMVStruct **MvarMVSplitScalar(const MvarMVStruct *MV)
Description:
Given a multivariate, splits it to its scalar component multivariates.
Parameters:
| MV: | Multivariate to split.
|
|---|
Returned Value:
| MvarMVStruct **: A static array holding the dynamically allocated MVs.
The zero entry would hold the W, or NULL otherwise. The
first entry would hold X axis, etc.
This vector would have MVAR_MAX_PT_COORD coordinates.
|
|---|
See Also:
MvarMVMergeScalar
Keywords:
split
multivariates
symbolic computation
(mvar_sym.c:79)
Prototype:
MvarMVStruct *MvarMVSub(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariates - subtract them coordinatewise.
The two multivariates are promoted to same point type before the
multiplication can take place. Furthermore, order and continuity are
matched as well.
Parameters:
| MV1, MV2: | Two multivariate to subtract coordinatewise.
|
|---|
Returned Value:
| MvarMVStruct *: The difference of MV1 - MV2 coordinatewise.
|
|---|
See Also:
MvarMVAdd
MvarMeshAddSub
MvarMVMult
Keywords:
subtraction
symbolic computation
multivariates
(mvar_sub.c:42)
Prototype:
MvarMVStruct *MvarMVSubdivAtParam(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir)
Description:
Given a multi-variate, subdivides it at parameter value t in direction
Dir.
Parameters:
| MV: | Multi-Variate to subdivide.
|
|---|
| t: | Parameter to subdivide at.
|
|---|
| Dir: | Direction of subdivision.
|
|---|
Returned Value:
| MvarMVStruct *: A list of two multi-variates, result of the subdivision.
|
|---|
See Also:
MvarBspMVSubdivAtParam
MvarBzrMVSubdivAtParam
Keywords:
multi-variates
(mvareval.c:1029)
Prototype:
CagdCrvStruct *MvarMVToCrv(const MvarMVStruct *MV)
Description:
Converts a multivariate function into a curve. If the multivariate is
of dimension higher than one, the lowest dimension is employed in the
conversion.
Parameters:
| MV: | A multivariate of at least dimension one to convert to a curve.
|
|---|
Returned Value:
| CagdCrvStruct *: A curve representation the given multivariate (or its
lowest dimension if higher dim.).
|
|---|
Keywords:
multi-variates
(mvareval.c:1162)
Prototype:
CagdSrfStruct *MvarMVToSrf(const MvarMVStruct *MV)
Description:
Converts a multivariate function into a surface. If the multivariate is
of dimension higher than two, the lowest two dimensions are employed in
the conversion.
Parameters:
| MV: | A multivariate of dimension two or more to convert to a surface.
|
|---|
Returned Value:
| CagdSrfStruct *: A surface representation the given multivariate (or
its lowest two dimensions if higher dim.).
|
|---|
Keywords:
multi-variates
(mvareval.c:1320)
Prototype:
TrivTVStruct *MvarMVToTV(const MvarMVStruct *MV)
Description:
Converts a multivariate function into a trivar. If the multivariate is
of dimension higher than three, the lowest three dimensions are employed
in the conversion.
Parameters:
| MV: | A multivariate of dimension three or more to convert to a trivar.
|
|---|
Returned Value:
| TrivTVStruct *: A trivar representation the given multivariate (or its
lowest three dimensions if higher dim.).
|
|---|
Keywords:
multi-variates
(mvar_gen.c:1353)
Prototype:
void MvarMVTransform(MvarMVStruct *MV, CagdRType *Translate, CagdRType Scale)
Description:
Linearly transforms, in place, given MV as specified by Translate and
Scale.
Parameters:
| MV: | Multi-variate to transform.
|
|---|
| Translate: | Translation factor. Can be NULl for non.
|
|---|
| Scale: | Scaling factor.
|
|---|
Returned Value:
Keywords:
multi-variates
(mvtangnt.c:384)
Prototype:
MvarPtStruct *MvarMVTriTangents(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
const MvarMVStruct *CMV3,
int Orientation,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes tri-tangents of freeform bivariate. In other words, compute the
tangent plane at three points to the surface(s).
Let,
DMV12 = MV1(u, v) - MV2(r, s)
DMV13 = MV1(u, v) - MV3(x, y)
DMV23 = MV2(r, s) - MV3(x, y)
then, computed the simultaneous solution of the following six equations:
d MV1 d MV1
< ----- x -----, DMV12 > = 0,
du dv
d MV1 d MV1
< ----- x -----, DMV13 > = 0,
du dv
d MV2 d MV2
< ----- x -----, DMV23 > = 0,
dr ds
*
d MV2 d MV2
< ----- x -----, DMV12 > = 0,
dr ds
*
d MV3 d MV3
< ----- x -----, DMV13 > = 0,
dx dy
*
d MV3 d MV3
< ----- x -----, DMV23 > = 0,
dx dy
Parameters:
| CMV1, CMV2, CMV3: | The 3 multivariates to compute the tri-tangents for.
If MV2 == MV2 ==NULL, the self tri-tangents of MV1 are
computed.
|
|---|
| Orientation: | 0 for no effect, -1 or +1 for a request to get opposite
or similar normal orientation bi tangencies only.
|
|---|
| SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
|---|
| NumericTol: | Numeric tolerance of the numeric stage. The numeric
stage is employed only if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: Points on the bi-tangents of the two multivariates.
|
|---|
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents
MvarMVBiTangents2
Keywords:
tri-tangent
(mvar_ssi.c:1575)
Prototype:
MvarPolyStruct *MvarMVUnivarInter(MvarMVStruct **MVs,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes intersection curve of two surfaces.
Parameters:
| MVs: | A vector of MV constraints. Should be of size Dim-1
where Dim is the dimension of the domain of MVs.
|
|---|
| Step: | Stepsize for curve tracing.
|
|---|
| SubdivTol: | The subdivision tolerance to use.
|
|---|
| NumericTol: | The numerical tolerance to use.
|
|---|
Returned Value:
| MvarPolyStruct *: The list of polylines which approximate the curve.
Each polyline corresponds to the topoligacaly
isolated component of the curve.
|
|---|
Keywords:
(mvar_sym.c:397)
Prototype:
MvarMVStruct *MvarMVVecDotProd(const MvarMVStruct *MV, const CagdRType *Vec)
Description:
Given a multivariate and a vector - computes their dot product.
Returned multivariate is a scalar multivariate representing the dot
product.
While typically in R3, the dot product can be computed for any
dimension of MV, and Vec should be of the appropriate size.
Parameters:
| MV: | Multivarients to multiply and compute a dot product for.
|
|---|
| Vec: | Vector to project MV onto.
|
|---|
Returned Value:
| MvarMVStruct *: A scalar multivariate representing the dot product of
MV . Vec.
|
|---|
See Also:
MvarMVDotProd
MvarMVMult
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd
Keywords:
product
dot product
symbolic computation
ltivariates
(mvbisect.c:31)
Prototype:
MvarMVStruct *MvarMVsBisector(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Compute bisector to two given multivariates.
Parameters:
| MV1, MV2: | The two multivariates to compute the bisector for.
|
|---|
Returned Value:
| MvarMVStruct *: The result bisector.
|
|---|
See Also:
SymbSrfPtBisectorSrf3D
SymbCrvPtBisectorSrf3D
SymbCrvCrvBisectorSrf3D
Keywords:
bisectors
(mvar_gen.c:1520)
Prototype:
CagdBType MvarMVsSame(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
CagdRType Eps)
Description:
Compare the two multivariates for similarity.
Parameters:
| MV1, MV2: | The two multivariates to compare.
|
|---|
| Eps: | Tolerance of equality.
|
|---|
Returned Value:
| CagdBType: TRUE if multivariates are the same, FALSE otehrwise.
|
|---|
See Also:
CagdSrfsSame
CagdCrvsSame
TrivTVsSame
Keywords:
(mvarzero.c:234)
Prototype:
MvarPtStruct *MvarMVsZeros(MvarMVStruct **MVs,
MvarConstraintType *Constraints,
int NumOfMVs,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes the simultaneous solution of the given set of NumOfMVs
constraints. A constraints can be equality or ineqaulity as prescribed
by the Constraints vector. Only equality constraints are employed in the
numerical improvment stage.
All multivariates are assumed to be scalar and be in the same parametric
domain size and dimension.
Parameters:
| MVs: | Vector of multivariate constraints.
|
|---|
| Constraints: | Either an equality or an inequality type of constraint.
|
|---|
| NumOfMVs: | Size of the MVs and Constraints vector.
|
|---|
| SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
|---|
| NumericTol: | Numeric tolerance of the numeric stage. The numeric stage
is employed only if IRIT_FABS(NumericTol) < SubdivTol.
If NumericTol is negative, points that fail to improve
numerically are purged away.
|
|---|
Returned Value:
| MvarPtStruct *: List of points on the solution set. Dimension of the
points will be the same as the dimensions of all MVs.
|
|---|
See Also:
MvarMVsZerosNormalConeTest
MvarMVsZerosDomainReduction
MvarMVsZerosVerifier
Keywords:
(mvarzero.c:131)
Prototype:
int MvarMVsZerosDomainReduction(int DomainReduction)
Description:
Sets the use (or not) of the domain reduction option - Bezier (and
(Bspline) clipping in multivariate subdivisions' zero set solver.
Parameters:
| DomainReduction: | New setting for the domain reduction option.
|
|---|
Returned Value:
| int: Old setting for normal cone testing usage.
|
|---|
See Also:
MvarMVsZeros
MvarMVsZerosNormalConeTest
MvarMVsZerosGradPreconditioning
MvarMVsZerosSetCallBackFunc
Keywords:
(mvarzero.c:104)
Prototype:
int MvarMVsZerosGradPreconditioning(int GradPreconditioning)
Description:
Sets the use (or not) of gradient preconditiong option - application of
and orthogonalization process over the gradients in multivariate
subdivisions' zero set solver.
Parameters:
| GradPreconditioning: | New setting for the gradient orthogonalization.
|
|---|
Returned Value:
| int: Old setting of gradient orthogonalization.
|
|---|
See Also:
MvarMVsZeros
MvarMVsZerosNormalConeTest
MvarMVsZerosDomainReduction
MvarMVsZerosSetCallBackFunc
Keywords:
(mvarzero.c:76)
Prototype:
int MvarMVsZerosNormalConeTest(int NormalConeTest)
Description:
Sets the use (or not) of the normal cone tests inside the multivariate
subdivisions' zero set solver.
Parameters:
| NormalConeTest: | New setting for normal cone testing usage.
|
|---|
Returned Value:
| int: Old setting for normal cone testing usage.
|
|---|
See Also:
MvarMVsZeros
MvarMVsZerosDomainReduction
MvarMVsZerosGradPreconditioning
MvarMVsZerosSetCallBackFunc
Keywords:
(mvarzero.c:159)
Prototype:
int MvarMVsZerosParallelHyperPlaneTest(int ParallelHPlaneTest)
Description:
Sets the use (or not) of the parallel plane termination criteria
in multivariate subdivisions' zero set solver.
Parameters:
| ParallelHPlaneTest: | New setting for the domain reduction option.
|
|---|
Returned Value:
| int: Old setting for normal cone testing usage.
|
|---|
See Also:
MvarMVsZeros
MvarMVsZerosNormalConeTest
MvarMVsZerosGradPreconditioning
MvarMVsZerosDomainReduction
MvarMVsZerosSetCallBackFunc
Keywords:
(mvarzero.c:189)
Prototype:
MvarMVsZerosSubdivCallBackFunc MvarMVsZerosSetCallBackFunc(
MvarMVsZerosSubdivCallBackFunc SubdivCallBackFunc)
Description:
Sets the use (or not) of a call back function that is invoked at every
node of the subdivision tree process.
Parameters:
| SubdivCallBackFunc: | Call back function to use in the MV zeros'
subdivision stage.
|
|---|
Returned Value:
| MvarMVsZerosSubdivCallBackFunc: Old setting.
|
|---|
See Also:
MvarMVsZeros
MvarMVsZerosDomainReduction
MvarMVsZerosGradPreconditioning
MvarMVsZerosNormalConeTest
MvarMVsZerosParallelHyperPlaneTest
Keywords:
(mvarzero.c:1793)
Prototype:
void MvarMVsZerosVerifier(MvarMVStruct * const *MVs,
int NumOfZeroMVs,
MvarPtStruct *Sols,
CagdRType NumerEps)
Description:
A verification function to test the correctness of the solutions.
For development/debugging purposes.
Parameters:
| MVs: | Input constraints.
|
|---|
| NumOfZeroMVs: | Number of (zero only) constraints.
|
|---|
| Sols: | Linked lists of solutions found.
|
|---|
| NumerEps: | Numeric tolerance used in the solution.
|
|---|
Returned Value:
See Also:
MvarMVsZeros
Keywords:
(mvarcmpt.c:36)
Prototype:
CagdBType MvarMakeMVsCompatible(MvarMVStruct **MV1,
MvarMVStruct **MV2,
CagdBType SameOrders,
CagdBType SameKVs)
Description:
Given two multi-variates, makes them compatible by:
1. Coercing their point type to be the same.
2. Making them have the same multi-variate type.
3. Raising the degree of the lower one to be the same as the higher.
4. Refining them to a common knot vector (If Bspline and SameOrder).
Note 3 is performed if SameOrder TRUE, 4 if SameKV TRUE.
Both multi-variates are modified IN PLACE.
Parameters:
| MV1, MV2: | Two surfaces to be made compatible, in place.
|
|---|
| SameOrders: | f TRUE, this routine make sure they share the same orders.
|
|---|
| SameKVs: | If TRUE, this routine make sure they share the same KVs.
|
|---|
Returned Value:
| CagdBType: TRUE if successful, FALSE otherwise.
|
|---|
Keywords:
compatibility
(mvar_pll.c:397)
Prototype:
MvarPolyStruct *MvarMatchPointListIntoPolylines(const MvarPtStruct *PtsList,
IrtRType MaxTol)
Description:
Connect the list of multivariate points into multivariate polylines by
connecting the closest multivariate point pairs, until the distances
between adjacent multivariate points/polylines is more than MaxTol.
Parameters:
| PtsList: | Point list to connect into multivariate polylines.
|
|---|
| MaxTol: | Maximum distance allowed to connect multivariate points.
|
|---|
Returned Value:
| MvarPolyStruct *: Connected multivariate polylines, upto MaxTol
tolerance.
|
|---|
See Also:
GMMatchPointListIntoPolylines2
Keywords:
(mvar_aux.c:729)
Prototype:
void MvarMergeBBox(MvarBBoxStruct *DestBBox, const MvarBBoxStruct *SrcBBox)
Description:
Merges (union) two bounding boxes into one, in place.
Parameters:
| DestBBox: | One BBox operand as well as the result.
|
|---|
| SrcBBox: | Second BBox operand.
|
|---|
Returned Value:
Keywords:
bbox
bounding box
(mvarcoer.c:155)
Prototype:
MvarPointType MvarMergeIrtPtType(MvarPointType PType1, MvarPointType PType2)
Description:
Returns a point type which spans the spaces of both two given point types.
Parameters:
| PType1, PType2: | o point types to find the point type of their union.
|
|---|
Returned Value:
| MvarPointType: A point type of the union of the spaces of PType1 and
PType2.
|
|---|
Keywords:
coercion
(mvar_aux.c:1344)
Prototype:
MvarMVStruct *MvarMergeMVMV(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
MvarMVDirType Dir,
CagdBType Discont)
Description:
Merges two multivariates in the requested direction Dir.
It is assumed that last edge of MV1 is identical to first edge of MV2.
It is assumed that both MVs have open end conditions and share the same
orders and knot sequences in all axes, but the merged axes which can have
different knots.
Parameters:
| CMV1: | To connect to CMV2's starting boundary at its end.
|
|---|
| CMV2: | To connect to CMV1's end boundary at its start.
|
|---|
| Dir: | Direction the merge should take place.
|
|---|
| Discont: | If TRUE, assumes the merged "edge" is discontinuous.
|
|---|
Returned Value:
| MvarMVStruct *: The merged multivariate.
|
|---|
See Also:
CagdMergeSrfSrf
Keywords:
merge
multivariate
(mvar_aux.c:1303)
Prototype:
int MvarMeshIndicesFromIndex(int Index, const MvarMVStruct *MV, int *Indices)
Description:
Given a linear Index into the vector of control points, compute the
indices of the multivariates in all dimensions.
Parameters:
| Index: | To decompose into the different axes of the multivariate.
|
|---|
| MV: | Whose indices are for.
|
|---|
| Indices: | To compute the exact point location in MV -> Points
|
|---|
Returned Value:
| int: TRUE if Index in range, false otherwise.
|
|---|
See Also:
MvarGetPointsMeshIndices
Keywords:
(ms_circ.c:570)
Prototype:
int MvarMinSpanCirc(IPObjectStruct *Objs,
CagdRType *Center,
CagdRType *Radius,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Minimum spanning circle (MSC) computation of given Objs geometry.
Geometry could be freeform C^1 curves.
Parameters:
| Objs: | The geometry to compute the MSC for as a list object.
|
|---|
| Center: | Of computed MSC.
|
|---|
| Radius: | Of computed MSC.
|
|---|
| SubdivTol, NumerTol: | Of computation.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
MvarMSCircOfThreeCurves
MvarMSCircOfThreeCurves
MvarMinSpanCirc
MVarMSCircCurveInCirc
GMMinSpanCirc
Keywords:
minimum spanning circle
(mvcones.c:520)
Prototype:
int MvarMinSpanCone(MvarVecStruct *MVVecs,
int VecsNormalized,
int NumOfVecs,
MvarNormalConeStruct *MVCone)
Description:
Minimum spanning cone (MSC) computation of a set of vectors.
Algorithm is based on the Minimum Spanning Circle in Section 4.7 of
"Computational Geometry, Algorithms and Applications" by M. de Berg et. al.
Parameters:
| MVVecs: | The set of vectors to compute their MSC.
|
|---|
| VecsNormalized: | TRUE if vectors are normalized, FALSE otherwise.
|
|---|
| NumOfVecs: | Number of vectors in set MVVecs.
|
|---|
| MVCone: | Returns cone axis and cone cos angle of computed MSC.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
GMMinSpanCone
Keywords:
(mvcones.c:449)
Prototype:
int MvarMinSpanConeAvg(MvarVecStruct *MVVecs,
int VecsNormalized,
int NumOfVecs,
MvarNormalConeStruct *MVCone)
Description:
Minimum spanning cone (MSC) computation of a set of vectors.
Find a central vector as the average of all given vectors and find the
vector with maximal angular distance from it.
Parameters:
| MVVecs: | The set of vectors to compute their MSC.
|
|---|
| VecsNormalized: | TRUE if vectors are normalized, FALSE otherwise.
|
|---|
| NumOfVecs: | Number of vectors in set MVVecs.
|
|---|
| MVCone: | Returns cone axis and cone cos angle of computed MSC.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE otherwise.
|
|---|
See Also:
GMMinSpanConeAvg
Keywords:
(mvcones.c:355)
Prototype:
MvarNormalConeStruct *MvarNormalConeCopy(const MvarNormalConeStruct
*NormalCone)
Description:
Copy a multivariate normal cone structure.
Parameters:
| NormalCone: | Normal cone to copy.
|
|---|
Returned Value:
| MvarNormalConeStruct *: Copied normal cone.
|
|---|
See Also:
MvarNormalConeNew
MvarNormalConeFree
Keywords:
(mvcones.c:388)
Prototype:
void MvarNormalConeFree(MvarNormalConeStruct *NormalCone)
Description:
Free a multivariate normal cone structure.
Parameters:
| NormalCone: | Normal cone to free.
|
|---|
Returned Value:
See Also:
MvarNormalConeNew
MvarNormalConeFreeList
MvarNormalConeCopy
Keywords:
(mvcones.c:414)
Prototype:
void MvarNormalConeFreeList(MvarNormalConeStruct *NormalConeList)
Description:
Deallocates and frees a list of multi-variate cone structures.
Parameters:
| NormalConeList: | Multi-Variate cone list to free.
|
|---|
Returned Value:
See Also:
MvarNormalConeFree
MvarNormalConeNew
Keywords:
(mvcones.c:324)
Prototype:
MvarNormalConeStruct *MvarNormalConeNew(int Dim)
Description:
Constructs a multivariate normal cone structure.
Parameters:
| Dim: | Dimension of the cone.
|
|---|
Returned Value:
| MvarNormalConeStruct *: Constructed cone.
|
|---|
See Also:
MvarNormalConeFree
MvarNormalConeFreeList
MvarNormalConeCopy
Keywords:
(mvar_aux.c:425)
Prototype:
CagdBType MvarParamInDomain(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir)
Description:
Given a multi-variate and a domain - validate it.
Parameters:
| MV: | To make sure t is in its Dir domain.
|
|---|
| t: | Parameter value to verify.
|
|---|
| Dir: | Direction. Either U or V or W.
|
|---|
Returned Value:
| CagdBType: TRUE if in domain, FALSE otherwise.
|
|---|
See Also:
varMVSetDomain
MvarMVSetAllDomains
MvarParamInDomain
Keywords:
multi-variates
(mvar_aux.c:453)
Prototype:
CagdBType MvarParamsInDomain(const MvarMVStruct *MV, const CagdRType *Params)
Description:
Given a multi-variate and a domain - validate it.
Parameters:
| MV: | To make sure (u, v, w) is in its domain.
|
|---|
| Params: | Array of real valued parameters of size Dim to verify if this
point is in MV's parametric domain.
|
|---|
Returned Value:
| CagdBType: TRUE if in domain, FALSE otherwise.
|
|---|
See Also:
varMVSetDomain
MvarMVSetAllDomains
MvarParamsInDomain
varMVIntersPtOnBndry
Keywords:
multi-variates
(mvar_gen.c:1244)
Prototype:
MvarPlaneStruct *MvarPlaneCopy(const MvarPlaneStruct *Pln)
Description:
Allocates and duplicates all slots of a multi-variate plane structure.
Parameters:
| Pln: | Multi-Variate plane to duplicate.
|
|---|
Returned Value:
| MvarPlaneStruct *: Duplicated multi-variate plane.
|
|---|
Keywords:
(mvar_gen.c:1270)
Prototype:
MvarPlaneStruct *MvarPlaneCopyList(const MvarPlaneStruct *PlnList)
Description:
Duplicates a list of multi-variate structures.
Parameters:
| PlnList: | List of multi-variates to duplicate.
|
|---|
Returned Value:
| MvarPlaneStruct *: Duplicated list of multi-variates.
|
|---|
Keywords:
multi-variates
(mvar_gen.c:1302)
Prototype:
void MvarPlaneFree(MvarPlaneStruct *Pln)
Description:
Deallocates and frees all slots of a multi-variate plane structure.
Parameters:
| Pln: | Multivariate plane to free.
|
|---|
Returned Value:
See Also:
MvarPlaneNew
Keywords:
(mvar_gen.c:1326)
Prototype:
void MvarPlaneFreeList(MvarPlaneStruct *PlnList)
Description:
Deallocates and frees a list of multi-variate plane structures.
Parameters:
| PlnList: | Multi-Variate plane list to free.
|
|---|
Returned Value:
Keywords:
(mvar_gen.c:1210)
Prototype:
MvarPlaneStruct *MvarPlaneNew(int Dim)
Description:
Allocates the memory required for a new multi-variate plane.
Parameters:
| Dim: | Number of dimensions of this multi-variate.
|
|---|
Returned Value:
| MvarPlaneStruct *: An uninitialized freeform multi-variate plane.
|
|---|
See Also:
MvarPlaneFree
Keywords:
(mvcones.c:243)
Prototype:
int MvarPlaneNormalize(MvarPlaneStruct *Pln)
Description:
Normalize a given multivariate plane's normal direction to a unit
length, in place.
Parameters:
| Pln: | Plane to normalize its normal direction.
|
|---|
Returned Value:
| int: TRUE if successful, FALSE if the input is the ZERO vector.
|
|---|
See Also:
MvarVecNormalize
Keywords:
(mvar_gen.c:765)
Prototype:
MvarPolyStruct *MvarPolyCopy(const MvarPolyStruct *Poly)
Description:
Allocates and duplicates all slots of a multi-variate polyline structure.
Parameters:
| Poly: | Multi-Variate polyline to duplicate.
|
|---|
Returned Value:
| MvarPolyStruct *: Duplicated multi-variate polyline.
|
|---|
Keywords:
(mvar_gen.c:788)
Prototype:
MvarPolyStruct *MvarPolyCopyList(MvarPolyStruct *PolyList)
Description:
Duplicates a list of multi-variate polyline structures.
Parameters:
| PolyList: | List of multi-variate polylines to duplicate.
|
|---|
Returned Value:
| MvarPolyStruct *: Duplicated list of multi-variate polylines.
|
|---|
Keywords:
multi-variates
(mvar_gen.c:891)
Prototype:
void MvarPolyFree(MvarPolyStruct *Poly)
Description:
Deallocates and frees all slots of a multi-variate polyline structure.
Parameters:
| Poly: | Multivariate polyline to free.
|
|---|
Returned Value:
See Also:
MvarPolyNew
Keywords:
(mvar_gen.c:911)
Prototype:
void MvarPolyFreeList(MvarPolyStruct *PolyList)
Description:
Deallocates and frees a list of multi-variate polyline structures.
Parameters:
| PolyList: | Multi-Variate polyline list to free.
|
|---|
Returned Value:
Keywords:
(mvar_pll.c:192)
Prototype:
MvarPolyStruct *MvarPolyMergePolylines(MvarPolyStruct *Polys, IrtRType Eps)
Description:
Merges separated multivariate polylines into longer ones, in place, as
possible.
Given a list of multivariate polylines, matches end points and merged as
possible multivariate polylines with common end points, in place.
Parameters:
| Polys: | Multivariate polylines to merge, in place.
|
|---|
| Eps: | Epslion of similarity to merge multivariate polylines at.
|
|---|
Returned Value:
| MvarPolyStruct *: Merged as possible multivariate polylines.
|
|---|
See Also:
GMMergePolylines
Keywords:
merge
polyline
(mvar_gen.c:740)
Prototype:
MvarPolyStruct *MvarPolyNew(MvarPtStruct *Pl)
Description:
Allocates the memory required for a new multi-variate polyline.
Parameters:
| Pl: | List of points forming the polyline.
|
|---|
Returned Value:
| MvarPolyStruct *: A new multi-variate polyline.
|
|---|
See Also:
MvarPolyFree
Keywords:
(mvar_gen.c:706)
Prototype:
MvarPtStruct *MvarPolyReverseList(MvarPtStruct *Pts)
Description:
Reverses a list of multivariate points, in place.
Parameters:
| Pts: | Multi-Variate point list to reverse.
|
|---|
Returned Value:
| MvarPtStruct *: Reversed list of Multi-Variate points, in place.
|
|---|
Keywords:
reverse
(mvar_rev.c:200)
Prototype:
MvarMVStruct *MvarPromoteMVToMV(const MvarMVStruct *MV, int Axis)
Description:
Increase by one the dimensionality of the given multivariate, by
introducing a new constant (degree zero) axis with one control point in
direction Axis.
Parameters:
| MV: | Multi-Variate to promote.
|
|---|
| Axis: | Axis of promotion. Between zero and MV -> Dim.
|
|---|
Returned Value:
| MvarMVStruct *: Promoted multi-variate.
|
|---|
See Also:
MvarMVShiftAxes
MvarMVFromMV
MvarPromoteMVToMV2
Keywords:
multi-variates
(mvar_rev.c:244)
Prototype:
MvarMVStruct *MvarPromoteMVToMV2(const MvarMVStruct *MV,
int NewDim,
int StartAxis)
Description:
Increase by the dimensionality of the given multivariate to NewDim, by
introducing new constant (degree zero) axes with one control points in all
new directions.
The Axis of the original MV will be starting at StartAxis.
Parameters:
| MV: | Multi-Variate to promote.
|
|---|
| NewDim: | New dimension of the promoted multivariate.
|
|---|
| StartAxis: | riginal MV would span axes StartAxis to StartAxis+MV->Dim-1.
|
|---|
Returned Value:
| MvarMVStruct *: Promoted multi-variate.
|
|---|
See Also:
MvarMVShiftAxes
MvarMVFromMV
MvarPromoteMVToMV
Keywords:
multi-variates
(mvar_pll.c:267)
Prototype:
int MvarPtCmpTwoPoints(const MvarPtStruct *P1,
const MvarPtStruct *P2,
CagdRType Eps)
Description:
A comparison function to examine if the given two points are the same.
Parameters:
| P1, P2: | Two multivariate points to compare.
|
|---|
| Eps: | The tolerance of the comparison.
|
|---|
Returned Value:
| int: 0 if identical, -1 or +1 if first point is less than/greater
than second point, in lexicographic order over dimensions.
|
|---|
See Also:
MvarPtDistTwoPoints
MvarPtDistSqrTwoPoints
Keywords:
(mvar_gen.c:601)
Prototype:
MvarPtStruct *MvarPtCopy(const MvarPtStruct *Pt)
Description:
Allocates and duplicates all slots of a multi-variate point structure.
Parameters:
| Pt: | Multi-Variate point to duplicate.
|
|---|
Returned Value:
| MvarPtStruct *: Duplicated multi-variate point.
|
|---|
Keywords:
(mvar_gen.c:626)
Prototype:
MvarPtStruct *MvarPtCopyList(const MvarPtStruct *PtList)
Description:
Duplicates a list of multi-variate point structures.
Parameters:
| PtList: | List of multi-variate points to duplicate.
|
|---|
Returned Value:
| MvarPtStruct *: Duplicated list of multi-variate points.
|
|---|
Keywords:
multi-variates
(mvar_pll.c:359)
Prototype:
CagdRType MvarPtDistSqrTwoPoints(const MvarPtStruct *P1, const MvarPtStruct *P2)
Description:
Compute the Eucildean distance between two multivariate points.
Parameters:
| P1, P2: | Two points to compute the distance between.
|
|---|
Returned Value:
| CagdRType: Distance computed.
|
|---|
See Also:
MvarPtCmpTwoPoints
MvarPtDistTwoPoints
Keywords:
(mvar_pll.c:299)
Prototype:
CagdRType MvarPtDistTwoPoints(const MvarPtStruct *P1, const MvarPtStruct *P2)
Description:
Compute the Eucildean distance between two multivariate points.
Parameters:
| P1, P2: | Two points to compute the distance between.
|
|---|
Returned Value:
| CagdRType: Distance computed.
|
|---|
See Also:
MvarPtCmpTwoPoints
MvarPtDistSqrTwoPoints
Keywords:
(mvar_gen.c:658)
Prototype:
void MvarPtFree(MvarPtStruct *Pt)
Description:
Deallocates and frees all slots of a multi-variate point structure.
Parameters:
| Pt: | Multivariate point to free.
|
|---|
Returned Value:
See Also:
MvarPtNew
Keywords:
(mvar_gen.c:682)
Prototype:
void MvarPtFreeList(MvarPtStruct *PtList)
Description:
Deallocates and frees a list of multi-variate point structures.
Parameters:
| PtList: | Multi-Variate point list to free.
|
|---|
Returned Value:
Keywords:
(mvar_pll.c:324)
Prototype:
MvarPtStruct *MvarPtInBetweenPoint(const MvarPtStruct *Pt1,
const MvarPtStruct *Pt2,
CagdRType t)
Description:
Computes an in-between point (middle if t = 0.5) of given two points.
Parameters:
| Pt1, Pt2: | Multivariate points.
|
|---|
| t: | Blending factor, 0 for Pt1, 0.5 for mid pt, 1 for Pt2.
|
|---|
Returned Value:
| MvarPtStruct *: The in-between point of Pt1 and Pt2.
|
|---|
See Also:
MvarPtCmpTwoPoints
MvarPtDistSqrTwoPoints
Keywords:
(mvar_gen.c:512)
Prototype:
MvarPtStruct *MvarPtNew(int Dim)
Description:
Allocates the memory required for a new multi-variate point.
Parameters:
| Dim: | Number of dimensions of this multi-variate.
|
|---|
Returned Value:
| MvarPtStruct *: An uninitialized multi-variate point.
|
|---|
See Also:
MvarPtFree
Keywords:
(mvar_gen.c:555)
Prototype:
MvarPtStruct *MvarPtRealloc(MvarPtStruct *Pt, int NewDim)
Description:
Reallocates the memory that is required for a new dimension of a
multi-variate point.
Parameters:
| Pt: | Multi-Variate point to reallocate. Should not be used
after this operation as it might be freed.
|
|---|
| NewDim: | Number of new dimensions of this multi-variate.
|
|---|
Returned Value:
| MvarPtStruct *: A reallocated point of dimension NewDim.
|
|---|
See Also:
MvarPtNew
Keywords:
(mvar_gen.c:845)
Prototype:
MvarPtStruct *MvarPtSortListAxis(MvarPtStruct *PtList, int Axis)
Description:
Sorts given list of points based on their increasing order in axis Axis.
Sorting is done in place.
Parameters:
| PtList: | List of points to sort.
|
|---|
| Axis: | Axis to sort along: 1,2,3 for X,Y,Z.
|
|---|
Returned Value:
| MvarPtStruct *: Sorted list of points, in place.
|
|---|
Keywords:
(mvar_gen.c:240)
Prototype:
MvarMVStruct *MvarPwrMVNew(int Dim, const int *Lengths, MvarPointType PType)
Description:
Allocates the memory required for a new power basis multi-variate.
Parameters:
| Dim: | Number of dimensions of this multivariate.
|
|---|
| Lengths: | Of control mesh in each of the dimensions. Vector of size Dim.
|
|---|
| PType: | Type of control points (E2, P3, etc.).
|
|---|
Returned Value:
| MvarMVStruct *: An uninitialized freeform multi-variate power basis.
|
|---|
See Also:
MvarMVFree
MvarMVNew
MvarBspMVNew
MvarBzrMVNew
Keywords:
multi-variates
allocation
(mvar_ssi.c:1305)
Prototype:
MvarPolyStruct *MvarSSISubdToInterCrv(MvarMVStruct **MVs,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol,
MvarMVGradientStruct **MVGrads,
MvarSSIAuxStruct *AS,
MvarPtStruct *BoundaryPts)
Description:
Computes the intersection curve of the system of N = Dim - 1 equations
with N + 1 uknowns " MVs[i] = 0, i=0,..,N ". If MvarSSINoLoopTest is
satisfied and there are only 2 intersection points of MVs with the
boundary of the domain, numerical tracing is applied. Otherwise, we
subdivide the longest side of the domain.
Parameters:
| MVs: | The system of N = Dim - 1 equations with N + 1 uknowns
MVs[i] = 0, i=0,..,N ".
|
|---|
| Step: | The stepsize for numerical tracing.
|
|---|
| SubdivTol: | Subdivision tolerance in MvarMVZeros.
|
|---|
| NumericTol: | Numerical tolerance.
|
|---|
| MVGrads: | Precomputed gradients of MVs.
|
|---|
| AS: | Auxiliary SSI structure that holds auxiliary data.
|
|---|
| BoundaryPts: | olution points on the boundary of the domain.
|
|---|
Returned Value:
| MvarPolyStruct *: The list of polylines that approximate the curve.
|
|---|
Keywords:
(mvar_ftl.c:28)
Prototype:
MvarSetErrorFuncType MvarSetFatalErrorFunc(MvarSetErrorFuncType ErrorFunc)
Description:
Sets the error function to be used by Mvar_lib.
Parameters:
| ErrorFunc: | New error function to use.
|
|---|
Returned Value:
| MvarSetErrorFuncType: Old error function reference.
|
|---|
Keywords:
error handling
(skel2d.c:173)
Prototype:
MvarSkel2DInter3PrimsStruct *MvarSkel2DInter3Prims(MvarSkel2DPrimStruct *Prim1,
MvarSkel2DPrimStruct *Prim2,
MvarSkel2DPrimStruct *Prim3)
Description:
Computes all points in R2 that are equadistant from the given three
primitives. A primitive can be a point, a line, an arc, or a freeform
curve. The end points of the line/arc/curve are NOT considered.
Parameters:
| Prim1, Prim2, Prim3: | The three input primitives to consider.
|
|---|
Returned Value:
| MvarSkel2DInter3PrimsStruct *: A linked list of all equadistant
points computed, or NULL if none found.
|
|---|
See Also:
MvarSkel2DSetEpsilon
MvarSkel2DSetFineness
MvarSkel2DSetOuterExtent
Keywords:
skeleton
bisector
(skel2d.c:233)
Prototype:
void MvarSkel2DInter3PrimsFree(MvarSkel2DInter3PrimsStruct *SK2DInt)
Description:
Deallocates and frees all slots of 2d skeleton intersection structure.
Parameters:
| SK2DInt: | To be deallocated.
|
|---|
Returned Value:
Keywords:
free
(skel2d.c:252)
Prototype:
void MvarSkel2DInter3PrimsFreeList(MvarSkel2DInter3PrimsStruct *SK2DIntList)
Description:
Deallocates and frees a 2d skeleton intersection structure list:
Parameters:
| SK2DIntList: | To be deallocated.
|
|---|
Returned Value:
Keywords:
free
(skel2d.c:61)
Prototype:
CagdRType MvarSkel2DSetEpsilon(CagdRType NewEps)
Description:
Sets the epsilon of the 2D skeleton computation.
Parameters:
| NewEps: | New epsilon to use.
|
|---|
Returned Value:
| CagdRType: Old epsilon value.
|
|---|
See Also:
Skel2DInter3Primitives
Keywords:
skeleton
bisector
(skel2d.c:115)
Prototype:
CagdRType MvarSkel2DSetFineNess(CagdRType NewFineNess)
Description:
Sets the fineness of the 2D skeleton computation.
Parameters:
| NewFineNess: | New fineness to use.
|
|---|
Returned Value:
| CagdRType: Old fineness value.
|
|---|
See Also:
Skel2DInter3Primitives
Keywords:
skeleton
bisector
(skel2d.c:88)
Prototype:
CagdRType MvarSkel2DSetMZeroTols(CagdRType SubdivTol, CagdRType NumerTol)
Description:
Sets the tolerances to be used in this module for he multivariate zero
set solver.
Parameters:
| SubdivTol, NumerTol: | Subdivision and numeric tolerance of mvar solver.
|
|---|
Returned Value:
| CagdRType: Old SubdivTol.
|
|---|
See Also:
MvarMVsZeros
MvarSkel2DSetEpsilon
MvarSkel2DSetFineNess
Keywords:
(skel2d.c:142)
Prototype:
CagdRType MvarSkel2DSetOuterExtent(CagdRType NewOutExtent)
Description:
Sets the outer extent of created (infinite) primitives in the 2D
skeleton computation.
Parameters:
| NewOutExtent: | New outer extent to use.
|
|---|
Returned Value:
| CagdRType: Old outer extent value.
|
|---|
See Also:
Skel2DInter3Primitives
Keywords:
skeleton
bisector
(mvaccess.c:55)
Prototype:
MvarPtStruct *MvarSrfAccessibility(const CagdSrfStruct *CPosSrf,
const CagdSrfStruct *COrientSrf,
const CagdSrfStruct *CCheckSrf,
const CagdRType *AccessDir,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Derives the visibility domain of PosSrf, when accessed from the
direction that is specified by OrientSrf, not gouging into CheckSrf.
The boundary of the domain is prescribed by the following set of
three constraints:
F1(u, v, s, t): = 0
F2(u, v, s, t): = 0
F3(u, v, s, t): = 0
where O1(u, v), O2(u, v) are two vector fields orthogonal to O(u, v), the
orientation field, K(s, t) is the check surface and Nk(s, t) is its normal
field, and S(u, v) is the position surface.
Parameters:
| CPosSrf: | The position surface to examine.
|
|---|
| COrientSrf: | The orientation field of the access to the position
surface. Must be in same function space and PosSrf.
If NULL, the normal field of PosSrf is empoloyed.
|
|---|
| CCheckSrf: | The surface to check gouging against.
|
|---|
| AccessDir: | Limit on a hemisphere of directions around AccessDir, if
not NULL.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumerTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: The boundary of the accessible regions of PosSrf.
|
|---|
Keywords:
(selfintr.c:553)
Prototype:
MvarPtStruct *MvarSrfAntipodalPoints(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes antipodal points in the given surface - pairs of points S(u, v)
and S(s, t) such that ((u, v) and (s, t) are two independent params of the
same srf):
< S(u, v) - S(s, t), dS(u, v)/du > = 0,
< S(u, v) - S(s, t), dS(u, v)/dv > = 0,
< N(s, t), dS(u, v)/du > = 0,
< N(s, t), dS(u, v)/dv > = 0.
Direct attempt to solve this set of constraints is bound to be slow as
all points in Srf satisfy these equations when (u, v) == (s, t). The key
is in adding a fifth inequality constaint of the form
< N(u, v), N(s, t) > < 0.
Antipodal points must exists if Srf self intersect in a closed loop and
hence can help in detecting sefl-intersections. Further, the diameter of
Srf could be easily deduced from the antipodal points.
Original version of this function was written by Diana Pekerman,
Technion, Israel.
Parameters:
| Srf: | To detect its antipodal points.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: Antipodal points, as points in E4 (u, v, s, t).
|
|---|
See Also:
MvarCrvAntipodalPoints
MvarHFDistAntipodalSrfSrfC1
Keywords:
(mvaccess.c:512)
Prototype:
MvarPtStruct *MvarSrfFlecnodalCrvs(const CagdSrfStruct *CSrf,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes the flecnodal curves on surface Srf = S(u, v).
Denote by Suv the second order derivatives of S(u, v) and by Suvv the
third order derivatives. Then, solution of the following 3 equations in 4
unknowns (u, v, a, b) provides the flecnodal curves:
[ L M ] [ a ]
1. [ a b ] [ ] [ ] = (This location/direction is asymp.)
[ M N ] [ b ] (L, M, N are the coef. of SFF.)
[ Suu Suv ] [ a ]
= [ a b ] [ ] . n(u, v) [ ] = 0,
[ Suv Svv ] [ b ]
or
< a^2 Suu + 2ab Suv + b^2 Svv, n(u, v) > = 0.
( [ Suuu Suuv ] [ Svuu Svuv ] ) [ a ]
2. [ a b ] ( a [ ] + b [ ] ) . n(u, v) [ ] = 0,
( [ Suuv Suvv ] [ Svuv Svvv ] ) [ b ]
(A third derivative zero contact.)
or
< a^3 Suuu + 3a^2b Suuv + 3ab^2 Suvv + b^3 Svvv, n(u, v) > = 0.
3. a * a + b * b = 1 (A normalization constraint.)
Parameters:
| CSrf: | To compute the silhouette higher orders' contact points.
|
|---|
| SubdivTol: | Accuracy of the subdivision stage of the approximation.
|
|---|
| NumerTol: | Accuracy of numeric approx.
|
|---|
Returned Value:
| MvarPtStruct *: Polylines on the unit sphere, depicting the
flecnodal's partitioning lines.
|
|---|
See Also:
SymbSrfGaussCurvature
UserSrfTopoAspectGraph
SymbEvalSrfAsympDir
MvarSrfSilhInflections
Keywords:
(mvaccess.c:724)
Prototype:
MvarPtStruct *MvarSrfFlecnodalPts(const CagdSrfStruct *CSrf,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes the flecnodal points on surface Srf = S(u, v).
Denote by Suv the second order derivatives of S(u, v) and by Suvv the
third order derivatives. Then, solution of the following 4 equations in 4
unknowns (u, v, a, b) provides the flecnodal points:
[ L M ] [ a ]
1. [ a b ] [ ] [ ] = (This location/direction is asymp.)
[ M N ] [ b ] (L, M, N are the coef. of SFF.)
[ Suu Suv ] [ a ]
= [ a b ] [ ] . n(u, v) [ ] = 0,
[ Suv Svv ] [ b ]
or
< a^2 Suu + 2ab Suv + b^2 Svv, n(u, v) > = 0.
( [ Suuu Suuv ] [ Svuu Svuv ] ) [ a ]
2. [ a b ] ( a [ ] + b [ ] ) . n(u, v) [ ] = 0,
( [ Suuv Suvv ] [ Svuv Svvv ] ) [ b ]
(A third derivative zero contact.)
or
< a^3 Suuu + 3a^2b Suuv + 3ab^2 Suvv + b^3 Svvv, n(u, v) > = 0.
3. < a^4 Suuuu + 4 a^3b Suuuv + 6 a^2b^2 suuvv + 4ab^3 suvvv + b^4 Svvvv,
n(u, v) > = 0.
(A fourth derivative zero contact.)
4. a * a + b * b = 1 (A normalization nconstraint.)
Parameters:
| CSrf: | To compute the silhouette higher orders' contact points.
|
|---|
| SubdivTol: | Accuracy of the subdivision stage of the approximation.
|
|---|
| NumerTol: | Accuracy of numeric approx.
|
|---|
Returned Value:
| MvarPtStruct *: Polylines on the unit sphere, depicting the
flecnodal's partitioning lines.
|
|---|
See Also:
SymbSrfGaussCurvature
UserSrfTopoAspectGraph
SymbEvalSrfAsympDir
MvarSrfSilhInflections
Keywords:
(mv_crvtr.c:56)
Prototype:
MvarPtStruct *MvarSrfRadialCurvature(const CagdSrfStruct *CSrf,
const CagdVType ViewDir,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes the radial curvature lines on surface Srf viewed from ViewDir.
This amounts to finding the asymptotic directions of Srf that are in also
the projection of ViewDir onto the tangent plane.
Let a and b be two parameters that prescribe the tanget space. Then,
the solution is derived as the solution of the following three equations:
dS dS
< ( a -- + b -- ) x N, V > = 0, (the tangent direction is the projection
du dv of V onto the tangent plane.)
[ L M ] [ a ]
[ a b ] [ ] [ ] = 0, (This location/direction is asymp.)
[ M N ] [ b ] (L, M, N are the coef. of SFF.)
where a and b are normalized so
a^2 + b^2 = 1.
Parameters:
| CSrf: | To compute the radial curvature lines for.
|
|---|
| ViewDir: | View direction to consider.
|
|---|
| SubdivTol: | Accuracy of the subdivision stage of the approximation.
|
|---|
| NumerTol: | Accuracy of numeric approx.
|
|---|
Returned Value:
| MvarPtStruct *: Polylines in the parameter space, depicting the
radial curvature lines.
|
|---|
See Also:
SymbSrfGaussCurvature
UserSrfTopoAspectGraph
SymbEvalSrfAsympDir
Keywords:
(selfintr.c:1440)
Prototype:
MvarPtStruct *MvarSrfSelfInterDiagFactor(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes self intersection points for a given surface S using the
following constraints ((u, v) and (s, t) are two independent params of the
same srf):
x(u, v) - x(s, t) = 0,
y(u, v) - y(s, t) = 0,
z(u, v) - z(s, t) = 0.
Direct attempt to solve this set of constraints is bound to be slow as
all points in Crv satisfy these equations when u == v and s == t. The key
here is to remove all (u - s) (and possibly (v - t)) factors off diagonal
Bezier patches of the above, using a decomposition of the Bezier patches
as (u1 - u3) G(u1, u2, u3, u4) + (u2 - u4) H(u1, u2, u3, u4).
Parameters:
| Srf: | To detect its self intersecting points.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
Returned Value:
| MvarPtStruct *: Self intersection points, as points in E4 (u, v, s, t).
|
|---|
See Also:
MvarSrfAntipodalPoints
MvarCrvSelfInterNrmlDev
MvarCrvSelfInterDiagFactor
MvarSrfSelfInterDiagFactor2
Keywords:
(selfintr.c:1068)
Prototype:
MvarPtStruct *MvarSrfSelfInterNrmlDev(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType MinNrmlDeviation)
Description:
Computes self intersection points for given surface using the following
constraints (u, v) and (s, t) are two independent params of the same srf:
x(u, v) - x(s, t) = 0,
y(u, v) - y(s, t) = 0,
z(u, v) - z(s, t) = 0.
Direct attempt to solve this set of constraints is bound to be slow as
all points in Srf satisfy these equations when (u, v) == (s, t). The key
is in adding a fourth inequality constaint of the form
< N(u, v), N(s, t) >
---------------------------- < Cos(Angle),
|| N(u, v) || || N(s, t) ||
Where Cos(Angle) is a provided constant that prescribes the minimal
angle the surface is expected to intersect at. The closer Cos(Angle) to
one the more work this function will have to do in order to isolate the
self intersection curve. The above expression is not rational and so,
we use a logical or of the following two expressions:
< N(u, v), N(s, t) >^2
------------------------------- < Cos^2(Angle),
|| N(u, v) ||^2 || N(s, t) ||^2
or
< N(u, v), N(s, t) > < 0.
Parameters:
| Srf: | To detect its self intersecting points.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
|---|
| MinNrmlDeviation: | The minimal angle teh surfaces are suppose to
intersect at.
|
|---|
Returned Value:
| MvarPtStruct *: Self intersection points, as points in E4 (u, v, s, t).
|
|---|
See Also:
MvarSrfAntipodalPoints
MvarCrvSelfInterNrmlDev
MvarSrfSelfInterDiagFactor
Keywords:
(mvaccess.c:257)
Prototype:
MvarPtStruct *MvarSrfSilhInflections(const CagdSrfStruct *Srf,
const CagdVType ViewDir,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes the silhouette locations on surface Srf viewed from ViewDir
that has inflection points or contact for second order or more. This
amounts to finding the asymptotic directions of Srf that are in the
direction of ViewDir.
Let V(s, t) be a parametrization of all possible viewing directions.
Solution is derived as the solution of the following three equations:
dS dS
< -- x -- , V > = 0, (View direction is in the tangent space)
du dv
[ L M ] [ a ]
[ a b ] [ ] [ ] = 0, (This location/direction is asymp.)
[ M N ] [ b ] (L, M, N are the coef. of SFF.)
where a and b are the solutions of
dS dS
a -- + b -- = V.
du dv
Parameters:
| Srf: | To compute the silhouette higher orders' contact points.
|
|---|
| ViewDir: | View direction to consider.
|
|---|
| SubdivTol: | Accuracy of the subdivision stage of the approximation.
|
|---|
| NumerTol: | Accuracy of numeric approx.
|
|---|
Returned Value:
| MvarPtStruct *: Polylines on the unit sphere, depicting the
flecnodal's partitioning lines.
|
|---|
See Also:
SymbSrfGaussCurvature
UserSrfTopoAspectGraph
SymbEvalSrfAsympDir
Keywords:
(mvbisect.c:240)
Prototype:
MvarMVStruct *MvarSrfSrfBisector(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2)
Description:
Computes the bisectors of two surfaces in R^5.
Parameters:
| CMV1, CMV2: | he two bivariates (surfaces) in R^5.
|
|---|
Returned Value:
| MvarMVStruct *: The resulting bisector.
|
|---|
See Also:
MvarMVsBisector
MvarCrvSrfBisector
MvarSrfSrfBisectorApprox
Keywords:
bisectors
(mvbisect.c:674)
Prototype:
VoidPtr MvarSrfSrfBisectorApprox(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
int OutputType,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes an approximation to the bisector of two surfaces.
Let S1(u, v) and S2(r, s) be two parametric surfaces and let n1(u, v) and
n2(r, s) be their unnormalized normal fields.
Becuase the two normals of the two surfaces must be coplanar we
introduce the following constraint, forcing the three vectors n1, n2, and
S1 - S2 to all be in the same plane.
< ( S1(u, v) - S2(r, s) ) x n1(u, v), n2(r, s) > = 0.
To make sure the distance to the intersection point of the normals, from
both surface's foot points we also coerces these three vectors to form a
isosceles triangle:
|| n2(r, s) ||^2 < S1(u, v) - S2(r, s), n1(u, v) > ^ 2 -
|| n1(r, s) ||^2 < S1(u, v) - S2(r, s), n2(u, v) > ^ 2
Finding the zero set of the last equation provides the correspondance
between the (u, v) location and the first surface and (r, s) locations on
the second surface that serve as mutual foot point for some bisector
point.
Parameters:
| CMV1, CMV2: | he two bivariates (surfaces) in R^3.
|
|---|
| OutputType: | xpected output type:
1. For the computed multivariate constraints.
2. For the computed point cloud on the bisector.
3. Points in a form of (u1, v2, x, y, z) where (u1, v1) are
the parameter space of the first surface.
|
|---|
| SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
|---|
| NumericTol: | olerance of the second zero set finding numeric stage.
|
|---|
Returned Value:
| VoidPtr: Following OutputType, either a set of multivariates (as a
linked list of MvarMVStruct), or a cloud of points on the
bisector (as a linked list of MvarPtStruct).
|
|---|
See Also:
MvarMVsBisector
MvarCrvSrfBisector
MvarSrfSrfBisector
MvarCrvSrfBisectorApprox
Keywords:
bisectors
(mvarintr.c:811)
Prototype:
MvarPtStruct *MvarSrfSrfContact(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
const CagdCrvStruct *MotionSrf1,
const CagdCrvStruct *ScaleSrf1,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType UseExprTree)
Description:
Computes the contact locations of two C^1 surfaces in R^3, possibly
with multivariate expression trees. Expression trees could be beneficial
comptationally when the geometry is complex (i.e. dozens of control points
or more, in each directions).
Parameters:
| Srf1, Srf2: | Two surface to compute contacts over time in R^3.
|
|---|
| MotionSrf1: | The motion over time Srf1 undergoes. Can be NULL.
|
|---|
| ScaleSrf1: | The scale over time Srf1 undergoes. Can either be a
scalar function, or vector function in R^3. Can be NULL.
If both MotionSrf1 and Srf1Scale are defined, they better
share their domains.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured
in the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment
stage. The numeric stage is employed if
NumericTol < SubdivTol.
|
|---|
| UseExprTree: | TRUE to use expression trees in the computation,
FALSE to use regular multivariate expressions.
|
|---|
Returned Value:
| MvarPtStruct *: List of intersection points, as parameter pairs into
the two surfaces domains.
|
|---|
See Also:
MvarCrvCrvInter
MvarSrfSrfInter
MvarSrfSrfSrfInter
Keywords:
(mvarintr.c:296)
Prototype:
MvarPtStruct *MvarSrfSrfInter(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType UseExprTree)
Description:
Computes the intersection locations of two surfaces in R^3, possibly
with multivariate expression trees. Expression trees could be beneficial
comptationally when the geometry is complex (i.e. dozens of control points
or more, in each directions).
Parameters:
| Srf1, Srf2: | Two surface to intersect in R^3.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured
in the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment
stage. The numeric stage is employed if
NumericTol < SubdivTol.
|
|---|
| UseExprTree: | TRUE to use expression trees in the computation,
FALSE to use regular multivariate expressions.
|
|---|
Returned Value:
| MvarPtStruct *: List of intersection points, as parameter pairs into
the two surfaces domains.
|
|---|
See Also:
MvarCrvCrvInter
MvarSrfSrfSrfInter
MvarSrfSrfContact
Keywords:
(mvar_ssi.c:1630)
Prototype:
MvarPolyStruct *MvarSrfSrfInter2(CagdSrfStruct *Srf1,
CagdSrfStruct *Srf2,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes intersection curve ot two surfaces.
Parameters:
| Srf1, Srf2: | Cagd surfaces to be intersected.
|
|---|
| Step: | Stepsize for curve tracing.
|
|---|
| SubdivTol: | The subdivision tolerance to use.
|
|---|
| NumericTol: | The numerical tolerance to use.
|
|---|
Returned Value:
| MvarPolyStruct *: The list of polylines which approximate the curve.
Each polyline corresponds to the topoligacaly
isolated component of the curve.
|
|---|
Keywords:
(hasdrf3d.c:986)
Prototype:
MvarPtStruct *MvarSrfSrfMinimalDist(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdRType *MinDist)
Description:
Computes the minimal distance between two given C1 surfaces.
Surfaces are assumed to not intersect.
This minimal distance can occur:
1. At end points vs. end points.
2. At the end points vs interior locations.
3. At a boundary curve vs the other surface.
4. At antipodal interior locations.
Parameters:
| Srf1: | To detect its minimal distance to Srf2.
|
|---|
| Srf2: | To detect its minimal distance to Srf1.
|
|---|
| MinDist: | Upon return, is set to the minimal distance detected.
|
|---|
Returned Value:
| MvarPtStruct *: Pairs of parameters at the minimal distance.
|
|---|
See Also:
MvarSrfSrfAntipodalPoints
SymbDistSrfPoint
MvarCrvSrfMinimalDist
Keywords:
(mvarintr.c:518)
Prototype:
MvarPtStruct *MvarSrfSrfSrfInter(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
const CagdSrfStruct *Srf3,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType UseExprTree)
Description:
Computes the intersection locations of three surfaces in R^3, possibly
with multivariate expression trees. Expression trees could be beneficial
comptationally when the geometry is complex (i.e. dozens of control points
or more, in each directions).
Parameters:
| Srf1, Srf2, Srf3: | hree surface to intersect in R^3.
|
|---|
| SubdivTol: | Tolerance of the solution. This tolerance is measured
in the parametric space of the surfaces.
|
|---|
| NumericTol: | Numeric tolerance of a possible numeric improvment
stage. The numeric stage is employed if
NumericTol < SubdivTol.
|
|---|
| UseExprTree: | TRUE to use expression trees in the computation,
FALSE to use regular multivariate expressions.
|
|---|
Returned Value:
| MvarPtStruct *: List of intersection points, as parameter pairs into
the three surfaces domains.
|
|---|
See Also:
MvarCrvCrvInter
MvarSrfSrfInter
MvarSrfSrfContact
Keywords:
(mvareval.c:1088)
Prototype:
MvarMVStruct *MvarSrfToMV(const CagdSrfStruct *Srf)
Description:
Converts a surface into a multivariate function.
Parameters:
| Srf: | Surface to convert into the multi-variate MV.
|
|---|
Returned Value:
| MvarMVStruct *: A multi variate function representation to Srf.
|
|---|
Keywords:
multi-variates
(offset2.c:284)
Prototype:
IPObjectStruct *MvarSrfTrimGlblOffsetSelfInter(CagdSrfStruct *Srf,
const CagdSrfStruct *OffSrf,
CagdRType TrimAmount,
int Validate,
int Euclidean,
CagdRType SubdivTol,
CagdRType NumerTol,
CagdBType NumerImp)
Description:
trims regions in the offset surface OffSrf that are closer than
TrimAmount to original Srf. TrimAmount should be a fraction smaller than
the offset amount itself. See also:
Joon-Kyung Seong, Gershon Elber, and Myung-Soo Kim. ``Trimming Local and
Global Self-intersections in Offset Curves and Surfaces using Distance
Maps.'' Computer Aided Design, Vol 38, No 3, pp 183-193, March 2006.
Parameters:
| Srf: | Original surface.
|
|---|
| OffSrf: | The offset surface approximation.
|
|---|
| TrimAmount: | The trimming distance. A fraction smaller than the offset
amount.
|
|---|
| Validate: | If TRUE, compute only points along the self intersections
that are valid and serve to delineate between valid and
invalid (to be purged) offset surface regions.
|
|---|
| Euclidean: | If TRUE, returned data is in the Euclidean space of
OffSrf. FALSE for parametric space of OffSrf.
|
|---|
| SubdivTol: | Accuracy of computation.
|
|---|
| NumerTol: | If smaller that SubdivTol, a numerical improvment stage is
applied by the solver.
|
|---|
| NumerImp: | If TRUE, a final stage of numerical marching over the
surface is applied to improve the solution even further.
|
|---|
Returned Value:
| IPObjectStruct *: A list of self inter. curves, on the offset surface.
|
|---|
Keywords:
(offst2ni.c:106)
Prototype:
IPObjectStruct *MvarSrfTrimGlblOffsetSelfInterNI(IPPolygonStruct *Plls,
const CagdSrfStruct *OffSrf,
CagdRType SubdivTol,
CagdRType NumerTol,
int Euclidean,
CagdRType SameUVTol)
Description:
Improve self-intersection curves of offset surfaces
using numerical methods.
Parameters:
| Plls: | Connected list of polylines to be improved.
|
|---|
| OffSrf: | The offset surface approximation.
|
|---|
| SubdivTol: | Accuracy of computation.
|
|---|
| NumerTol: | NumerTol tolerance.
|
|---|
| Euclidean: | If TRUE, returned data is in the Euclidean space of
OffSrf. FALSE for parametric space of OffSrf.
|
|---|
| SameUVTol: | Tolerance for termination condition around singular points.
|
|---|
Returned Value:
| IPObjectStruct *: A list of self inter. curves, on the offset surface.
|
|---|
Keywords:
(mvareval.c:1235)
Prototype:
MvarMVStruct *MvarTVToMV(const TrivTVStruct *TV)
Description:
Converts a trivar into a multivariate function.
Parameters:
| TV: | Trivar to convert into the multi-variate MV.
|
|---|
Returned Value:
| MvarMVStruct *: A multi variate function representation to TV.
|
|---|
Keywords:
multi-variates
(ms_sphr.c:48)
Prototype:
MvarPtStruct *MvarTanHyperSpheresofNManifolds(MvarMVStruct **MVs,
int NumOfMVs,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType UseExprTree)
Description:
Computes all the hyper-spheres that are tangent to all the given set of
manifolds. All manifolds should share the same range space, R^d, space in
which the hyper-spheres are sought.
Parameters:
| MVs: | The manifolds to consider in R^d.
|
|---|
| NumOfMVs: | Number of multivariates we need to process.
|
|---|
| SubdivTol, NumericTol: | Of computation.
|
|---|
| UseExprTree: | TRUE to use expression trees in the computation, FALSE to
use regular multivariate expressions.
|
|---|
Returned Value:
| MvarPtStruct *: List of tangent hyper-spheres, NULL if error.
|
|---|
See Also:
MvarMSCircOfThreeCurves
MvarMSCircOfTwoCurves
MvarMinSpanCirc
MvarTanHyperSpheresofNManifoldsET
Keywords:
(mvarmrph.c:37)
Prototype:
MvarMVStruct *MvarTwoMVsMorphing(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
CagdRType Blend)
Description:
Given two compatible multi-variates (See function MvarMakeMVsCompatible),
computes a convex blend between them according to Blend which must be
between zero and one.
Returned is the new blended multi-variates.
Parameters:
| MV1, MV2: | The two multi-variates to blend.
|
|---|
| Blend: | A parameter between zero and one.
|
|---|
Returned Value:
| MvarMVStruct *: MV2 * Blend + MV1 * (1 - Blend).
|
|---|
See Also:
SymbTwoCrvsMorphing
SymbTwoCrvsMorphingCornerCut
SymbTwoCrvsMorphingMultiRes
SymbTwoSrfsMorphing
TrivTwoTVsMorphing
MvarMakeMVsCompatible
Keywords:
morphing
(mvlowenv.c:1155)
Prototype:
void MvarUniFuncsComputeLowerEnvelope(CagdCrvStruct *InputCurves,
CagdCrvStruct **LowerEnvelope)
Description:
Given monotone univariate function curves, and their domain, compute the
lower envelope. This is the main calling function for such curves.
Parameters:
| InputCurves: | A CagdCrvStruct of univariate (non-rational) curves in R^1
|
|---|
| LowerEnvelope: | CagdCrvStruct of lower envelope
|
|---|
Returned Value:
Keywords:
(mvar_aux.c:499)
Prototype:
void MvarUpdateConstDegDomains(MvarMVStruct **MVs, int NumOfMVs)
Description:
Given a vector of MVs, some with constant degrees and invalid domain,
update all MVs domains, exploiting MVs with non constant degrees' domains.
Parameters:
| MVs: | To update their domains.
|
|---|
| NumOfMVs: | Size of MVs vector.
|
|---|
Returned Value:
Keywords:
(mvcones.c:46)
Prototype:
void MvarVecAdd(MvarVecStruct *VRes,
const MvarVecStruct *V1,
const MvarVecStruct *V2)
Description:
Add two multivariate vectors.
Parameters:
| VRes: | Result. Can be one of V1 or V2.
|
|---|
| V1, V2: | Two input vectors.
|
|---|
Returned Value:
See Also:
MvarVecDotProd
MvarVecSqrLength
MvarVecLength
MvarVecScale
MvarVecNormalize
MvarVecBlend
Keywords:
(mvar_gen.c:1153)
Prototype:
void MvarVecArrayFree(MvarVecStruct *MVVecArray, int Size)
Description:
Deallocates and frees a multi-variate vector array.
Parameters:
| MVVecArray: | To be deallocated.
|
|---|
| Size: | Of the deallocated array.
|
|---|
Returned Value:
See Also:
MvarVecArrayNew
MvarVecFree
MvarVecNew
MvarVecFreeList
Keywords:
free
(mvar_gen.c:976)
Prototype:
MvarVecStruct *MvarVecArrayNew(int Size, int Dim)
Description:
Allocates the memory required for a new multi-variate vector array.
Parameters:
| Size: | Size of multi-variate vector array to allocate.
|
|---|
| Dim: | Number of dimensions of this multi-variate.
|
|---|
Returned Value:
| MvarVecStruct *: An uninitialized multi-variate vector array.
|
|---|
See Also:
MvarVecArrayFree
MvarVecFree
MvarVecNew
Keywords:
(mvcones.c:182)
Prototype:
void MvarVecBlend(MvarVecStruct *VRes,
const MvarVecStruct *V1,
const MvarVecStruct *V2,
CagdRType t)
Description:
Compute the blend of the to given multivariate vectors as
V1 * t + V2 * (1-t).
Parameters:
| VRes: | Result. Can be one of V1 or V2.
|
|---|
| V1, V2: | Two input vectors to blend.
|
|---|
| t: | Blending factor.
|
|---|
Returned Value:
See Also:
MvarVecAdd
MvarVecSqrLength
MvarVecLength
MvarVecScale
MvarVecNormalize
MvarVecDotProd
Keywords:
(mvar_gen.c:1068)
Prototype:
MvarVecStruct *MvarVecCopy(const MvarVecStruct *Vec)
Description:
Allocates and duplicates all slots of a multi-variate vector structure.
Parameters:
| Vec: | Multi-Variate vector to duplicate.
|
|---|
Returned Value:
| MvarVecStruct *: Duplicated multi-variate vector.
|
|---|
Keywords:
(mvar_gen.c:1093)
Prototype:
MvarVecStruct *MvarVecCopyList(const MvarVecStruct *VecList)
Description:
Duplicates a list of multi-variate structures.
Parameters:
| VecList: | List of multi-variates to duplicate.
|
|---|
Returned Value:
| MvarVecStruct *: Duplicated list of multi-variates.
|
|---|
Keywords:
multi-variates
(mvcones.c:73)
Prototype:
CagdRType MvarVecDotProd(const MvarVecStruct *V1, const MvarVecStruct *V2)
Description:
Compute the dot product of two multivariate vectors.
Parameters:
| V1, V2: | Two input vectors.
|
|---|
Returned Value:
| CagdRType: The dot product.
|
|---|
See Also:
MvarVecAdd
MvarVecSqrLength
MvarVecLength
MvarVecScale
MvarVecNormalize
MvarVecBlend
Keywords:
(mvar_gen.c:1125)
Prototype:
void MvarVecFree(MvarVecStruct *Vec)
Description:
Deallocates and frees all slots of a multi-variate vector structure.
Parameters:
| Vec: | Multivariate vector to free.
|
|---|
Returned Value:
See Also:
MvarVecArrayNew
MvarVecArrayFree
MvarVecNew
MvarVecFreeList
Keywords:
(mvar_gen.c:1183)
Prototype:
void MvarVecFreeList(MvarVecStruct *VecList)
Description:
Deallocates and frees a list of multi-variate vector structures.
Parameters:
| VecList: | Multi-Variate vector list to free.
|
|---|
Returned Value:
See Also:
MvarVecArrayNew
MvarVecArrayFree
MvarVecNew
MvarVecFree
Keywords:
(mvcones.c:126)
Prototype:
CagdRType MvarVecLength(const MvarVecStruct *V)
Description:
Compute the length of a multivariate vector.
Parameters:
| V: | Vector to compute its length.
|
|---|
Returned Value:
| CagdRType: Computed length.
|
|---|
See Also:
MvarVecAdd
MvarVecDotProd
MvarVecSqrLength
MvarVecScale
MvarVecNormalize
MvarVecBlend
Keywords:
(mvar_gen.c:938)
Prototype:
MvarVecStruct *MvarVecNew(int Dim)
Description:
Allocates the memory required for a new multi-variate vector.
Parameters:
| Dim: | Number of dimensions of this multi-variate.
|
|---|
Returned Value:
| MvarVecStruct *: An uninitialized multi-variate vector.
|
|---|
See Also:
MvarVecArrayNew
MvarVecFree
Keywords:
(mvcones.c:211)
Prototype:
int MvarVecNormalize(MvarVecStruct *V)
Description:
Normalize a given multivariate vector to a unit length, in place.
Parameters:
Returned Value:
| int: TRUE if successful, FALSE if the input is the ZERO vector.
|
|---|
See Also:
MvarVecAdd
MvarVecDotProd
MvarVecSqrLength
MvarVecLength
MvarVecScale
Keywords:
(mvar_gen.c:1022)
Prototype:
MvarVecStruct *MvarVecRealloc(MvarVecStruct *Vec, int NewDim)
Description:
Reallocates the memory that is required for a new dimension of a
multi-variate vector.
Parameters:
| Vec: | Multi-Variate vector to reallocate. Should not be used
after this operation as it might be freed.
|
|---|
| NewDim: | Number of new dimensions of this multi-variate vector.
|
|---|
Returned Value:
| MvarVecStruct *: A reallocated multi-variate vector.
|
|---|
See Also:
MvarVecNew
Keywords:
(mvcones.c:149)
Prototype:
MvarVecStruct *MvarVecScale(MvarVecStruct *V, CagdRType ScaleFactor)
Description:
Scale a given multivariate vector V by a scaling factor ScaleFactor.
Parameters:
| V: | Vector to scale, in place.
|
|---|
| ScaleFactor: | Scaling factor to use.
|
|---|
Returned Value:
| MvarVecStruct *: The input vector, scaled.
|
|---|
See Also:
MvarVecAdd
MvarVecDotProd
MvarVecSqrLength
MvarVecLength
MvarVecNormalize
MvarVecBlend
Keywords:
(mvcones.c:104)
Prototype:
CagdRType MvarVecSqrLength(const MvarVecStruct *V)
Description:
Compute the length squared of a multivariate vector.
Parameters:
| V: | Vector to compute its length.
|
|---|
Returned Value:
| CagdRType: Computed length squared.
|
|---|
See Also:
MvarVecAdd
MvarVecDotProd
MvarVecLength
MvarVecScale
MvarVecNormalize
MvarVecBlend
Keywords:
(mvvorcrv.c:57)
Prototype:
MvarVoronoiCrvStruct *MvarVoronoiCrvCopy(MvarVoronoiCrvStruct *Crv)
Description:
Allocates and copies all slots of a MvarVoronoiCrvStruct structure.
Parameters:
Returned Value:
| MvarVoronoiCrvStruct *: A duplicate of Crv.
|
|---|
Keywords:
copy
(mvvorcrv.c:97)
Prototype:
void MvarVoronoiCrvFree(MvarVoronoiCrvStruct *Crv)
Description:
Deallocates a VoronoiCrv structure.
Parameters:
| Crv: | Voronoi curve structure to free.
|
|---|
Returned Value:
Keywords:
allocation
(mvvorcrv.c:121)
Prototype:
void MvarVoronoiCrvFreeList(MvarVoronoiCrvStruct *CrvList)
Description:
Deallocates a VoronoiCrv list structure.
Parameters:
| CrvList: | Voronoi curve list to free.
|
|---|
Returned Value:
Keywords:
allocation
(mvvorcrv.c:28)
Prototype:
MvarVoronoiCrvStruct *MvarVoronoiCrvNew(void)
Description:
Allocates and resets all slots of a MvarVoronoiCrvStruct structure.
Parameters:
Returned Value:
| MvarVoronoiCrvStruct *: A VoronoiCrv structure.
|
|---|
Keywords:
allocation
(mvvorcrv.c:145)
Prototype:
MvarVoronoiCrvStruct *MvarVoronoiCrvReverse(MvarVoronoiCrvStruct *Crv)
Description:
Reverses the t and r parameters of an MvarVoronoiCrvStruct structure.
Parameters:
Returned Value:
| MvarVoronoiCrvStruct *: A single duplicate of Crv that is reversed.
|
|---|
Keywords:
(mvarzero.c:584)
Prototype:
MvarPtStruct *MvarZeroFilterIdenticalSet(MvarPtStruct *ZeroSet,
MvarMVStruct * const *MVs,
const MvarConstraintType *Constraints,
int NumOfMVs,
int NumOfZeroMVs,
CagdRType Tol)
Description:
Filters out identical points or points that fail the inequality
constraints.
Parameters:
| ZeroSet: | The solution points to filter out.
|
|---|
| MVs: | Vector of multivariate constraints.
|
|---|
| Constraints: | Either an equality or an inequality type of constraint.
|
|---|
| NumOfMVs: | Size of the MVs and Constraints vector.
|
|---|
| NumOfZeroMVs: | umber of zero set constraints (first in above vectors).
|
|---|
| Tol: | Tolerance to consider to points same in L^1 norm.
|
|---|
Returned Value:
| MvarPtStruct *: Filtered solution points.
|
|---|
See Also:
Keywords:
(mvarzero.c:638)
Prototype:
MvarPtStruct *MvarZeroGenPtMidMvar(const MvarMVStruct *MV, int SingleSol)
Description:
Construct a point of the dimension as the given MV in the middle of its
parametric domain.
Parameters:
| MV: | To consurct a point in the middle of its domain.
|
|---|
| SingleSol: | If TRUE, this point is a single solution it MV domain.
|
|---|
Returned Value:
| MvarPtStruct *: The construct point in the middle of MV.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvarzero.c:1441)
Prototype:
MvarPtStruct *MvarZeroMVsSubdiv(MvarMVStruct **MVs,
MvarConstraintType *Constraints,
int NumOfMVs,
int NumOfZeroMVs,
int ApplyNormalConeTest,
CagdRType SubdivTol,
int Depth)
Description:
Approximate a solution to the set of constraints, if any, using the
subdivision of the parametric domains of the MVs. Stops when the
parametric domain is smaller than SubdivTol in all dimensions and returns
a central point to that small multivariate patch.
Parameters:
| MVs: | Vector of multivariate constraints.
|
|---|
| Constraints: | Either an equality or an inequality type of constraint.
|
|---|
| NumOfMVs: | Size of the MVs and Constraints vector.
|
|---|
| NumOfZeroMVs: | umber of zero or equality constraints.
|
|---|
| ApplyNormalConeTest: | TRUE to apply normal cones' single intersection
tests.
|
|---|
| SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
|---|
| Depth: | Of subdivision recursion.
|
|---|
Returned Value:
| MvarPtStruct *: List of points on the solution set. Dimension of the
points will be the same as the dimensions of all MVs.
|
|---|
See Also:
MvarMVsZeros
Keywords:
(mvar_aux.c:1152)
Prototype:
int _MvarIncBoundMeshIndices(const MvarMVStruct *MV,
int *Indices,
int *LowerBound,
int *UpperBound,
int *Index)
Description:
Increment the index of the control mesh of the multivariate function
by one, with given lower and upper bounds: LowerBound <= Idx < UpperBound.
Should only be called via the macro MVAR_INC_BOUND_MESH_INDICES.
Parameters:
| MV: | To increment Indices to its control mesh.
|
|---|
| Indices: | To increment one step.
|
|---|
| LowerBound: | inimal values to assume.
|
|---|
| UpperBound: | ne above the maximal values to assume.
|
|---|
| Index: | Index to increment.
|
|---|
Returned Value:
| int: TRUE if Indices are in domain, FALSE if done.
|
|---|
See Also:
_MvarIncSkipMeshIndices
_MvarIncSkipMeshIndices1st
_MvarIncrementMeshIndices
_MvarIncrementMeshOrderIndices
Keywords:
(mvar_aux.c:1078)
Prototype:
int _MvarIncSkipMeshIndices(const MvarMVStruct *MV,
int *Indices,
int Dir,
int *Index)
Description:
Increment the index of the control mesh of the multivariate function
by one, skipping axis Dir. Should only be called via the macro
MVAR_INC_SKIP_MESH_INDICES.
Parameters:
| MV: | To increment Indices to its control mesh.
|
|---|
| Indices: | To increment one step.
|
|---|
| Dir: | To skip in the incrementation.
|
|---|
| Index: | The total current index to be incremented as well, or zero
if we wrapped around all incides.
|
|---|
Returned Value:
| int: Current non negative Index if Indices are in domain, zero
(FALSE) if done - out of the domain.
|
|---|
See Also:
_MvarIncBoundMeshIndices
_MvarIncSkipMeshIndices1st
_MvarIncrementMeshIndices
_MvarIncrementMeshOrderIndices
Keywords:
(mvar_aux.c:1034)
Prototype:
int _MvarIncSkipMeshIndices1st(const MvarMVStruct *MV, int *Indices)
Description:
Increment the index of the control mesh of the multivariate function
by one, skipping axis Dir zero. Should only be called via the macro
MVAR_INC_SKIP_MESH_INDICES_1ST.
Parameters:
| MV: | To increment Indices to its control mesh.
|
|---|
| Indices: | To increment one step.
|
|---|
Returned Value:
| int: TRUE if Indices are in domain, FALSE if done.
|
|---|
See Also:
_MvarIncSkipMeshIndices
_MvarIncBoundMeshIndices
_MvarIncrementMeshIndices
_MvarIncrementMeshOrderIndices
Keywords:
(mvar_aux.c:951)
Prototype:
int _MvarIncrementMeshIndices(const MvarMVStruct *MV, int *Indices, int *Index)
Description:
Increment the index of the control mesh of the multivariate function
by one. Should only be called via the macro MVAR_INCREMENT_MESH_INDICES.
Parameters:
| MV: | To increment Indices to its control mesh.
|
|---|
| Indices: | To increment one step.
|
|---|
| Index: | The total current index to be incremented as well, or zero
if we wrapped around all incides.
|
|---|
Returned Value:
| int: The non zero advanced index if indices are in domain, zero
if done (out of domain).
|
|---|
See Also:
_MvarIncSkipMeshIndices
_MvarIncBoundMeshIndices
_MvarIncSkipMeshIndices1st
_MvarIncrementMeshOrderIndices
Keywords:
(mvar_aux.c:994)
Prototype:
int _MvarIncrementMeshOrderIndices(const MvarMVStruct *MV,
int *Indices,
int *Index)
Description:
Increment the index of the control mesh of the multivariate function
by one. Should only be called via the macro
MVAR_INCREMENT_MESH_ORDER_INDICES. This macro is useful when traversing
a Bspline mesh for evaluation, Orders[i] control points in i'th dimension.
Parameters:
| MV: | To increment Indices to its control mesh.
|
|---|
| Indices: | To increment one step.
|
|---|
| Index: | The total current index to be incremented as well, or zero
if we wrapped around all incides.
|
|---|
Returned Value:
| int: The non zero advanced index if indices are in domain, zero
if done (out of domain).
|
|---|
See Also:
_MvarIncSkipMeshIndices
_MvarIncBoundMeshIndices
_MvarIncSkipMeshIndices1st
Keywords: