(mvcones.c:697)
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:745)
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:842)
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:643)
Prototype:
int MVHyperPlaneFromNPoints(MvarPlaneStruct *MVPlane,
MvarVecStruct * const *Vecs,
int n)
Description:
Constructs 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:
(mvbzrsym.c:38)
Prototype:
void MVarBzrMVDivide(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
MvarMVStruct **Q,
MvarMVStruct **R)
Description:
Given two scalar Bezier multivariates, MV1, MV2, calculates a quotient
Bezier multivariate, Q, and a remainder Bezier multivarite, R, such that,
MV1 = Q*MV2 + R.
MV1 and MV2 are assumed to have the same dimension.
Parameters:
MV1, MV2: | The two multivariates to divide.
|
---|
Q, R: | Where to allocate the computed quotient and remainder.
|
---|
Returned Value:
Keywords:
product
(mvcones.c:2074)
Prototype:
MvarNormalConeStruct *MVarExprTreeNormalCone(MvarExprTreeStruct *Eqn)
Description:
Constructs a normal cone to a scalar multivariate expression tree.
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:
Eqn: | Multivariate to derive a cone bounding its normal space.
|
---|
Returned Value:
MvarNormalConeStruct *: The resulting normal cone.
|
---|
See Also:
MvarExprTreeConesOverlap
Keywords:
(ms_circ.c:448)
Prototype:
int MVarIsCrvInsideCirc(const CagdCrvStruct *Crv,
CagdRType Center[2],
CagdRType Radius,
CagdRType Tolerance)
Description:
Tests if a Crv is contained in the given prescribed circle.
Computes the maximal distance of the curve from the circle center and
compares that distance with circle radius.
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:1150)
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 space.
|
---|
Returned Value:
MvarNormalConeStruct *: A cone bounding the normal space of MV, or NULL
if failed (i.e. angular span of normal space too large).
|
---|
See Also:
MVarMVNormalCone2
MvarMVConesOverlap
Keywords:
(mvcones.c:1219)
Prototype:
MvarNormalConeStruct *MVarMVNormalCone2(const MvarMVStruct *MV,
CagdRType * const *GradPoints,
int TotalLength,
int *MaxDevIndex)
Description:
A second version of MVarMVNormalCone in which the control vectors are
given directly.
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 space.
|
---|
GradPoints: | Control vectors of gradient field.
|
---|
TotalLength: | Number of control vectors in gradient field.
|
---|
MaxDevIndex: | The index in GradPoints where maximal deviation occur will
be kept here.
|
---|
Returned Value:
MvarNormalConeStruct *: A cone bounding the normal space of MV, or NULL
if failed (i.e. angular span of normal space too large).
|
---|
See Also:
MVarMVNormalCone
MvarMVConesOverlap
Keywords:
(mvcones.c:1294)
Prototype:
MvarNormalConeStruct *MVarMVNormalConeMainAxis(const MvarMVStruct *MV,
MvarVecStruct **MainAxis)
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 space.
|
---|
MainAxis: | Main axis (principal component) of the normal cone's
vectors distribution. Valid only if success.
|
---|
Returned Value:
MvarNormalConeStruct *: A cone bounding the normal space of MV, or NULL
if failed (i.e. angular span of normal space too large).
|
---|
See Also:
MVarMVNormalConeMainAxis2
MVarMVNormalCone
MvarMVConesOverlap
Keywords:
(mvcones.c:1352)
Prototype:
MvarNormalConeStruct *MVarMVNormalConeMainAxis2(const MvarMVStruct *MV,
CagdRType * const *GradPoints,
int TotalLength,
MvarVecStruct **MainAxis)
Description:
A second version of MVarMVNormalConeMainAxis in which the control points
are given directly.
Parameters:
MV: | Multivariate to derive a cone bounding its normal space.
|
---|
GradPoints: | Control vectors of gradient field.
|
---|
TotalLength: | Number of control vectors in gradient field.
|
---|
MainAxis: | Main axis (principal component) of the normal cone's
vectors distribution. Allocated and valid only if success.
Can be NULL in which case it is ignored.
|
---|
Returned Value:
MvarNormalConeStruct *: A cone bounding the normal space of MV, or NULL
if failed (i.e. angular span of normal space too large).
|
---|
See Also:
MVarMVNormalConeMainAxis
MVarMVNormalCone
MvarMVConesOverlap
Keywords:
(mvaccess.c:418)
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:
(mvcones.c:1028)
Prototype:
void MVarSmallestPrincipalDirection(MvarVecStruct *SPDVec,
MvarVecStruct *ConeAxis,
CagdRType * const *GradPoints,
int TotalLength,
int Dim)
Description:
Computes the smallest principal direction of a set of normal vectors.
Parameters:
SPDVec: | Vector to be updated with the smallest principla component.
|
---|
ConeAxis: | xis of cone bounding all the normal vectors in GradPoints.
Assumed unit length.
|
---|
GradPoints: | The normal (Gradient) vectors to handle.
|
---|
TotalLength: | Number of normal vectors in GradPoints.
|
---|
Dim: | Dimension of Normal vectors. N
|
---|
Returned Value:
See Also:
MVarMVMaximalDeviation
Keywords:
(mv2cntct.c:3502)
Prototype:
MvarPolylineStruct *Mvar2CntctCompute2CntctMotion(const CagdCrvStruct *CCrvA,
const CagdCrvStruct *CCrvB,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes the 2 Contact motion between two C^1 cont curves, CCrvA and
CCrvB.
The curves are assumed to be C1 periodic curve with open end condition.
The algebraic conditions for 2contact are following (please refer the
paper,"Precise Continuous Contact Motion for Planar Freeform Geometric
Curves" for the details):
[CrvB(v1) -Rot(theta) * CrvA(u1)]_x
= [CrvB(v2) - Rot(theta) * CrvA(u2)]_x
[CrvB(v1) -Rot(theta) * CrvA(u1)]_y
= [CrvB(v2) - Rot(theta) * CrvA(u2)]_y
det (Rot(theta) * CrvA'(u1), CrvB'(v1) = 0,
det (Rot(theta) * CrvA'(u2), CrvB'(v2) = 0.
Parameters:
CCrvA: | Moving curve.
|
---|
CCrvB: | Obstacle Curves.
|
---|
Step: | Step size to use in the numeric tracing.
|
---|
SubdivTol: | Subdivision tolerance of Computation.
|
---|
NumericTol: | Numerical tolerance of computation.
|
---|
Returned Value:
MvarPolylineStruct *: Linked list of the solutions holding parameter
value of two contact points and rotation in
radian (u1, v1, u2, v2, theta).
|
---|
See Also:
Keywords:
2Contact Trace
(mv2ctbvh.c:778)
Prototype:
Mvar2CtBVHStruct *Mvar2CtBuildBVH(CagdCrvStruct *Crv,
CagdRType SubdivTol,
CagdRType BvTol)
Description:
Build a bounding volume hierarchy for a curve.
Parameters:
Crv: | rv to build a BVH.
|
---|
SubdivTol: | ubdivision tolerance for the construction.
|
---|
BvTol: | ounding volume error tolerance for the construction.
|
---|
Returned Value:
Mvar2CtBVHStruct *: Bounding volume hierarchy for a curve
|
---|
See Also:
Keywords:
(mv2ctaux.c:147)
Prototype:
void Mvar2CtBuildCParamHierarchy(CagdCrvStruct *Circle,
Mvar2CtCParamStruct **Node,
CagdRType Min,
CagdRType Max,
CagdRType Tol)
Description:
Build a hierarchy for rotation data structure.
Parameters:
Circle: | nit circle.
|
---|
Node: | ew node will be allocated herein.
|
---|
Min, Max: | omain for the node.
|
---|
Tol: | olerance for building hierarchy.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:1056)
Prototype:
CagdBType Mvar2CtCheck2CtTrace(Mvar2CtBVNodeStruct *Nodes[4],
Mvar2CtCParamStruct *Cparam,
CagdRType Tol)
Description:
Check if there exists 2 contact trace in the domain using BVH.
Parameters:
Nodes: | Bounding volumes for curves.
|
---|
Cparam: | data structure for rotation.
|
---|
Tol: | Subdivision tolerance of checking.
|
---|
Returned Value:
CagdBType: FALSE if there is no solution in the domain, TRUE otherwise.
|
---|
See Also:
Keywords:
(mv2ctaux.c:2292)
Prototype:
MvarPolylineStruct *Mvar2CtConnectPeriodic(MvarPolylineStruct *Polys,
CagdRType Tol)
Description:
Connect 2Contact traces that are not connected due to the parametrization
of the periodic curve.
Parameters:
Polys: | 2contact traces.
|
---|
Tol: | tolerance for the connection.
|
---|
Returned Value:
MvarPolylineStruct *: connected 2contact motion curves.
|
---|
See Also:
Keywords:
(mv2ctaux.c:90)
Prototype:
CagdBType Mvar2CtCurvatureOverlap(Mvar2CtBVNodeStruct *ANode,
Mvar2CtBVNodeStruct *BNode,
Mvar2CtCParamStruct *Cparam)
Description:
Check if two curves can have a same curvature by using BVH.
Parameters:
ANode: | Bounding volume for a moving curve.
|
---|
BNode: | Bounding volume for a obstacle curve.
|
---|
Cparam: | Data structure for rotation.
|
---|
Returned Value:
CagdBType: FALSE if there is no curvature overlap TRUE otherwise.
|
---|
See Also:
Keywords:
(mv2ctaux.c:1507)
Prototype:
MvarMVStruct **Mvar2CtExtractMVRegion(MvarMVStruct **MVs,
int MVNum,
CagdRType *Min,
CagdRType *Max)
Description:
Extract sub-region of multivariate correspond to a given sub domain.
Parameters:
MVs: | Array of multivariates.
|
---|
MVNum: | Number of constraints (may be updated).
|
---|
Min: | Minimum domain values.
|
---|
Max: | Maximum domain values.
|
---|
Returned Value:
MvarMVStruct **: Extracted MVs.
|
---|
See Also:
Keywords:
(mv2ctbvh.c:853)
Prototype:
void Mvar2CtFreeBVH(Mvar2CtBVHStruct *Bvh)
Description:
Free bounding volume hierarchy.
Parameters:
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:234)
Prototype:
void Mvar2CtFreeCparam(Mvar2CtCParamStruct *Node)
Description:
Free Mvar2CtCParamStruct recursively.
Parameters:
Node: | var2CtCParamStruct node to free.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:1956)
Prototype:
MvarPtStruct *Mvar2CtGetMiddlePt(MvarPtStruct *PtList, int Length)
Description:
Find a middle point of Point list.
Parameters:
PtList: | Linked list of the points.
|
---|
Length: | Length of the list.
|
---|
Returned Value:
MvarPtStruct *: Middle point of the list.
|
---|
See Also:
Keywords:
(mv2ctbvh.c:594)
Prototype:
void Mvar2CtGetParentBVNode(Mvar2CtBVNodeStruct *Node,
CagdRType Min,
CagdRType Max,
Mvar2CtBVNodeStruct **Parent)
Description:
Find smallest bounding volume includes domain range Min~Max.
Parameters:
Node: | Data structure for rotation.
|
---|
Min, Max: | Domain range for testing.
|
---|
Parent: | lace for saving the result.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:207)
Prototype:
void Mvar2CtGetParentCparam(Mvar2CtCParamStruct *Node,
CagdRType Min,
CagdRType Max,
Mvar2CtCParamStruct **Parent)
Description:
Find smallest bounding volume includes the domain Min-Max.
Parameters:
Node: | Data structure for rotation.
|
---|
Min, Max: | Domain range for testing.
|
---|
Parent: | lace for saving the result.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:369)
Prototype:
CagdRType Mvar2CtGetTheta(CagdRType x, CagdRType y)
Description:
Compute a rotation angle in radian correspond (x, y) vector.
Parameters:
x, y: | ector for computing rotation angle.
|
---|
Returned Value:
CagdRType: Rotation angle in radian.
|
---|
See Also:
Keywords:
(mv2ctaux.c:1555)
Prototype:
CagdBType Mvar2CtInDomain(CagdRType *Min,
CagdRType *Max,
MvarPtStruct *MPt)
Description:
Check if a point is located in a given domain.
Parameters:
Min: | inimum values of the domain.
|
---|
Max: | aximum values of the domain.
|
---|
MPt: | oint to check.
|
---|
Returned Value:
CagdBType: TRUE if MPt is in the domain, FALSE otherwise.
|
---|
See Also:
Keywords:
(mv2ctaux.c:998)
Prototype:
CagdBType Mvar2CtIsConnectedNode(Mvar2CtBVNodeStruct *Node1,
Mvar2CtBVNodeStruct *Node2)
Description:
Check if two bounding volumes are connected.
Parameters:
Node1, Node2: | Bounding volumes to test.
|
---|
Returned Value:
CagdBType: TRUE if connected, FALSE otherwise.
|
---|
See Also:
Keywords:
(mv2ctaux.c:1587)
Prototype:
CagdBType Mvar2CtIsPassing(CagdRType *Min,
CagdRType *Max,
MvarPolylineStruct *MPoly)
Description:
Check if a polyline passes a given domain.
Parameters:
Min: | inimum values of the domain.
|
---|
Max: | aximum values of the domain.
|
---|
MPoly: | varPolyline to check.
|
---|
Returned Value:
CagdBType: TRUE if MPoly passes the domain, FALSE otherwise.
|
---|
See Also:
Keywords:
(mv2ctbvh.c:267)
Prototype:
CagdRType Mvar2CtLineLineDist(Mvar2CtLineStruct *A, Mvar2CtLineStruct *B)
Description:
Compute distance between two line segments.
Parameters:
A, B: | wo line segments to compute distance.
|
---|
Returned Value:
CagdRType: Distance between A and B.
|
---|
See Also:
Keywords:
(mv2ctbvh.c:330)
Prototype:
CagdRType Mvar2CtLinePointDist(CagdPType P, CagdPType L[2])
Description:
Compute distance between point and line segment.
Parameters:
P: | oint to compute distance.
|
---|
L: | wo end points of line segment.
|
---|
Returned Value:
CagdRType: Minimum distance between a line segment and a point.
|
---|
See Also:
Keywords:
(mv2ctaux.c:410)
Prototype:
CagdBType Mvar2CtNormalOverlap(Mvar2CtBVNodeStruct *ANode,
Mvar2CtBVNodeStruct *BNode,
CagdRType RMin,
CagdRType RMax)
Description:
Check the tangency condition for 2 contact points using BVH.
Parameters:
ANode, BNode: | Bounding volumes to test.
|
---|
RMin: | Minimum rotation angle in radian.
|
---|
RMax: | Maximum rotation angle in radian.
|
---|
Returned Value:
CagdBType: FALSE if tangency condition does not satisfy TRUE
otherwise.
|
---|
See Also:
Keywords:
(mv2ctaux.c:571)
Prototype:
CagdBType Mvar2CtNormalOverlapBoth(Mvar2CtBVNodeStruct *ANode,
Mvar2CtBVNodeStruct *BNode)
Description:
Check normal overlap for both direction.
Parameters:
ANode, BNode: | Nodes for normal overlapping test.
|
---|
Returned Value:
CagdBType: TRUE if normal cones overlap FALSE otherwise.
|
---|
See Also:
Keywords:
(mv2ctbvh.c:1158)
Prototype:
CagdRType Mvar2CtPenetrationDepth(Mvar2CtBVHStruct *BvhA,
Mvar2CtBVHStruct **BvhBs,
int BSize,
CagdRType Xtrans,
CagdRType Ytrans,
CagdRType Rot)
Description:
Compute a maximum penetration depth of moving curve into obstacle curves
using BVHs.
Parameters:
BvhA: | Bvh for moving curve.
|
---|
BvhBs: | Bvh for obstacle curves.
|
---|
BSize: | Number of obstacle curves.
|
---|
Xtrans: | translation.
|
---|
Ytrans: | translation.
|
---|
Rot: | otation angle in radian.
|
---|
Returned Value:
CagdRType: Maximum penetration depth, negative if moving curve penetrate
obstacle curves positive, otherwise.
|
---|
See Also:
MvarStewartPlatformSolve
Keywords:
(mv2ctaux.c:1153)
Prototype:
void Mvar2CtReduce2CtDomain(Mvar2CtBVNodeStruct *Nodes[4],
Mvar2CtCParamStruct *Cparam,
CagdRType Min[5],
CagdRType Max[5],
int MinMax,
int FixedDir,
CagdRType Tol)
Description:
Reduce the domain for solving 2 contact points at domain boundary using
BVH.
Parameters:
Nodes: | Bounding volumes for curves.
|
---|
Cparam: | Data structure for rotation.
|
---|
Min: | Current minimum domain values.
|
---|
Max: | Current maximum domain values.
|
---|
MinMax: | 0 if fixed parameter is minimum parameter of the bounding
volume, 1 if if fixed parameter is maximum parameter of the
of the bounding volume.
|
---|
FixedDir: | Fixed dimension.
|
---|
Tol: | Subdivision tolerance of checking.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:1308)
Prototype:
void Mvar2CtReduce3CtDomain(Mvar2CtBVNodeStruct *Nodes[6],
Mvar2CtCParamStruct *Cparam,
CagdRType Min[7],
CagdRType Max[7])
Description:
Reduce the domain for solving 3 contact points using BVH.
Parameters:
Nodes: | Bounding volumes for curves.
|
---|
Cparam: | Data structure for rotation.
|
---|
Min: | Current minimum domain values.
|
---|
Max: | Current maximum domain values.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:1404)
Prototype:
void Mvar2CtReduceRotExtremeDomain(Mvar2CtBVNodeStruct *Nodes[4],
Mvar2CtCParamStruct *Cparam,
CagdRType Min[5],
CagdRType Max[5],
CagdRType Tol)
Description:
Reduce the domain for solving rotational extreme point for2 contact
trace using BVH.
Parameters:
Nodes: | Bounding volumes for curves.
|
---|
Cparam: | data structure for rotation.
|
---|
Min: | Current minimum domain values.
|
---|
Max: | Current maximum domain values.
|
---|
Tol: | Subdivision tolerance of checking.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:960)
Prototype:
CagdBType Mvar2CtRejectbyCurvature(Mvar2CtBVNodeStruct *Node1,
Mvar2CtBVNodeStruct *Node2)
Description:
Check if pair of curves satisfy curvature condition for 2 contact.
Parameters:
Node1, Node2: | ounding volumes of curves to test.
|
---|
Returned Value:
CagdBType: TRUE if they don't satisfy the condition, FALSE otherwise.
|
---|
See Also:
Keywords:
(mv2ctbvh.c:563)
Prototype:
void Mvar2CtSetNodeId(Mvar2CtBVNodeStruct *Node, int Id)
Description:
Set id of bounding volume recursively.
Parameters:
Node: | Bounding volume to set id.
|
---|
Id: | id value to set.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:2039)
Prototype:
void Mvar2CtSwapTrace(MvarPolylineStruct *MPoly)
Description:
Swap the first and second parameter with third and fourth value .
Parameters:
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:2085)
Prototype:
void Mvar2CtTraceBBox(CagdRType *Min,
CagdRType *Max,
MvarPtStruct *SPt,
MvarPtStruct *EPt)
Description:
Compute bounding box of a trace.
Parameters:
Min, Max: | inimum and maximum values of Bounding box.
|
---|
SPt, EPt: | Start and end point of the trace.
|
---|
Returned Value:
See Also:
Keywords:
(mv2ctaux.c:1987)
Prototype:
int Mvar2CtTraceCollide(MvarPolylineStruct *Poly1,
MvarPolylineStruct *Poly2)
Description:
Test whether two traces Poly1, Poly2 have common contact point.
Parameters:
Poly1, Poly2: | wo traces to check.
|
---|
Returned Value:
int: 0 if there is no common contact 1~4 depending on the type of common
contact point.
|
---|
See Also:
Keywords:
(mv2ctaux.c:1627)
Prototype:
MvarPtStruct *Mvar2CtValidate2Ct(MvarPtStruct *MPts,
Mvar2CtBVHStruct *BvhA,
Mvar2CtBVHStruct **BvhBs,
int BSize,
CagdCrvStruct *Circle)
Description:
Check whether the 2 contact points cause inter-penetration into obstacle
curves. The 2 contact points having inter-penetration are removed from the
list.
Parameters:
MPts: | Linked list of curvature contacts.
|
---|
BvhA: | Bvh for moving curve.
|
---|
BvhBs: | Bvh for obstacle curves.
|
---|
BSize: | Number of obstacle curves.
|
---|
Circle: | Unit circle.
|
---|
Returned Value:
MvarPtStruct *: Linked list of curvature contact points having no
penetration into obstacle curves.
|
---|
See Also:
Keywords:
(mv2ctaux.c:1697)
Prototype:
MvarPtStruct *Mvar2CtValidateCurvContact(MvarPtStruct *MPts,
Mvar2CtBVHStruct *BvhA,
Mvar2CtBVHStruct **BvhBs,
int BSize,
int BIndex,
CagdCrvStruct *Circle)
Description:
Check whether the curvature contact points cause inter-penetration into
obstacle curves. The curvature contact points having inter-penetration are
removed from the list.
Parameters:
MPts: | Linked list of curvature contacts.
|
---|
BvhA: | Bvh for moving curve.
|
---|
BvhBs: | Bvh for obstacle curves.
|
---|
BSize: | Number of obstacle curves.
|
---|
BIndex: | Index number of obstacle curve.
|
---|
Circle: | Unit circle.
|
---|
Returned Value:
MvarPtStruct *: Linked list of curvature contact points having no
penetration into obstacle curves.
|
---|
See Also:
Keywords:
(mv2ctaux.c:1759)
Prototype:
MvarPolylineStruct *Mvar2CtValidateTraces(MvarPolylineStruct *Polys,
Mvar2CtBVHStruct *BvhA,
Mvar2CtBVHStruct **BvhBs,
int BSize,
CagdCrvStruct *Circle)
Description:
Check if 2contact traces inter-penetrate the obstacle. The trace having
inter-penetration is removed from the list.
Parameters:
Polys: | 2contact traces.
|
---|
BvhA: | Bvh for moving curve.
|
---|
BvhBs: | Bvh for obstacle curves.
|
---|
BSize: | Number of obstacle curves.
|
---|
Circle: | Unit circle.
|
---|
Returned Value:
MvarPolylineStruct *: 2contact motion curves.
|
---|
See Also:
Keywords:
(mvarpack.c:50)
Prototype:
MvarPtStruct *Mvar3CircsInTriangles(const CagdPType Pts[3],
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a triangles in the XY plane, specified by its 3 vertices Pts,
Find the 3 circles packed inside the triangle (and tangent to it while
also tangent to each other.
This problem is also known as the (incorrect solution to the)
"Malfatti Circles" problem.
Parameters:
Pts: | 3 vertices of triangle in the plane (only XY coordinates).
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
---|
NumericTol: | Numeric tolerance of a possible numeric improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPtStruct *: Points in R9 as (X1, Y1, R1, X2, Y2, R2, X3, Y3, R3).
Each such solution is also tagged with "InTriangle"
that is TRUE if all solution is inside the triangle.
|
---|
See Also:
Keywords:
(mvarpck2.c:40)
Prototype:
MvarPtStruct *Mvar6CircsInTriangles(const CagdPType Pts[3],
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a triangles in the XY plane, specified by its 3 vertices Pts,
Find the 6 circles packed inside the triangle (and tangent to it while
also tangent to each other.
The code to this function was synthesized automatically using the code
below.
Parameters:
Pts: | 3 vertices of triangle in the plane (only XY coordinates).
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
---|
NumericTol: | Numeric tolerance of a possible numeric improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPtStruct *: Points in R9 as (x2, x4, x5, y1, y2, y3, y4, y5, y6).
|
---|
See Also:
Keywords:
(selfintr.c:1402)
Prototype:
MvarPolylineStruct *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 improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPolylineStruct *: List of intersection pllns, as (u, v) parameter
pairs into the two surfaces' domains. Points in R^4.
|
---|
See Also:
MvarBspSrfSelfInterDiagFactor
MvarBzrSrfSelfInterDiagFactor
BzrSrfFactorExtremeRowCol
Keywords:
(mvar_aux.c:1768)
Prototype:
CagdBType MvarAre2MVsPossiblySharingBndry(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
int Dir,
CagdBType *MV1Rev,
CagdBType *MV2Rev,
CagdRType Eps)
Description:
A fast detection if the given two multivariates possibly share a Sub-MV
face, in Dir, as boundaries.
Parameters:
MV1, MV2: | o detect if they possibly share a sub-MV in direction Dir.
|
---|
Dir: | To share for similary of a sub-MV along.
|
---|
MV1Rev: | TRUE if MV1 needs to be reversed in Dir to be merged with MV2.
|
---|
MV2Rev: | TRUE if MV2 needs to be reversed in Dir to be merged with MV1.
|
---|
Eps: | Tolerance of approximation.
|
---|
Returned Value:
CagdBType: TRUE if they are likely to share a common sub-MV.
|
---|
See Also:
MvarAre2MVsSharingBndry
Keywords:
(mvar_aux.c:1870)
Prototype:
int MvarAre2MVsSharingBndry(const MvarMVStruct *MV1,
int Dir1,
CagdBType MaxBndry1,
const MvarMVStruct *MV2,
int Dir2,
CagdBType MaxBndry2,
IrtRType Tolerance,
int *Modified)
Description:
Compare designated two boundaries of given two multivariates for
similarity.
Parameters:
MV1: | First multivariate to consider.
|
---|
Dir1: | Axis to extract the sub-manifold boundary. Starts from 0.
|
---|
MaxBndry1: | RUE for the maximal boundary in Dir1, FALSE for minimal.
|
---|
MV2: | Second multivariate to consider.
|
---|
Dir2: | Axis to extract the sub-manifold boundary. Starts from 0.
|
---|
MaxBndry2: | RUE for the maximal boundary in Dir2, FALSE for minimal.
|
---|
Tolerance: | olerance of similarity.
|
---|
Modified: | If MVs requires degree raising, refinements, or reversing.
See MvarMVSame3 for more. N
|
---|
Returned Value:
int: TRUE if similar, FALSE otherwise.
|
---|
See Also:
CagdSrfAre2SrfsSharingBndry
MvarAre2MVsPossiblySharingBndry
MvarMVsSame3
Keywords:
(mvarbbox.c:458)
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:
(mvarbbox.c:311)
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:
(mvarbbox.c:355)
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:
(mvar_sym.c:1370)
Prototype:
MvarMVStruct *MvarBlendConvexMVMV(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
const MvarMVStruct *MVT)
Description:
Given two vector multivariates, MV1, and MV2, and a scalar multivariate,
MVT, return a new multivariate equal to the convex blend function:
MV1 * MVT + MV2 * (1 - MVT).
The function does not verify that MVT is between zero and one.
Parameters:
MV1, MV2: | Two vector multivariates to blend.
|
---|
MVT: | A multivariate indication the blend weight.
|
---|
Returned Value:
MvarMVStruct *: A multivariate representing the blend of MV1 and MV2 by
MVT and 1 - MVT, respectively.
|
---|
See Also:
MvarBlendMVMV
MvarMVMultScalar
MvarMVMult
Keywords:
product
symbolic computation
multivariates
(mvar_sym.c:1335)
Prototype:
MvarMVStruct *MvarBlendMVMV(const MvarMVStruct *MV1,
const MvarMVStruct *Scalar1,
const MvarMVStruct *MV2,
const MvarMVStruct *Scalar2)
Description:
Given two vector multivariates, MV1, and MV2, and two scalar
multivariates, Scalar1, and Scalar2, return a new multivariate equal to
the blend function: MV1 * Scalar1 + MV2 * Scalar2.
Parameters:
MV1: | 1st vector multivariates to blend.
|
---|
Scalar1: | 1st scalar multivariate, used as the blend MV1.
|
---|
MV2: | 2nd vector multivariates to blend.
|
---|
Scalar2: | 2nd scalar multivariate, used as the blend MV2.
|
---|
Returned Value:
MvarMVStruct *: A multivariate representing the blend of MV1 and MV2 by
Scalar1 and Scalar2, respectively.
|
---|
See Also:
MvarMVMultScalar
MvarMVMult
Keywords:
product
symbolic computation
multivariates
(mvarbbox.c:491)
Prototype:
MvarMVStruct **MvarBndryMVsFromMV(const MvarMVStruct *MV)
Description:
Extracts the 2N boundary MVs of the given N dimensional tensor product MV.
Parameters:
MV: | To extract the six boundary surfaces from.
|
---|
Returned Value:
MvarMVStruct **: A pointer to a dynamically allocated vector of 2N MVs
representing the 2N boundaries of the multivariate MV,
in order of U1Min, U1Max, U2Min, U2Max, .....
|
---|
See Also:
TrivBndrySrfsFromTV
CagdBndryCrvsFromSrf
Keywords:
multivariates
(mvbiscon.c:246)
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:124)
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:709)
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:223)
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:49)
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 correspondence 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:142)
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:1045)
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
auxiliary 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:473)
Prototype:
CagdRType *MvarBsctComputeXYFromBisTR(CagdCrvStruct *Crv1,
CagdRType t,
CagdCrvStruct *Crv2,
CagdRType r,
CagdRType *InterPt)
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.
|
---|
InterPt: | Bisector point from given tr.
|
---|
Returned Value:
CagdRType *: Bisector point from given tr. Same as InterPt
|
---|
Keywords:
(mvtrmpcr.c:473)
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:283)
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:258)
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:356)
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:467)
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:82)
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:895)
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:1069)
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:35)
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:175)
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:206)
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:358)
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:553)
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:984)
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:1146)
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:1132)
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:770)
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:115)
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:369)
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_int.c:58)
Prototype:
CagdCrvStruct *MvarBspCrvInterpVecs(const MvarVecStruct *vecList,
int Order,
int CrvSize,
CagdParametrizationType ParamType,
CagdBType Periodic)
Description:
Given a set of points, vecList, computes a Bspline curve of order Order
that interpolates or least square approximates the set of points.
The size of the control polygon of the resulting Bspline curve defaults
to the number of points in PtList (if CrvSize = 0).
However, this number is can smaller to yield a least square
approximation.
The created curve can be parametrized as specified by ParamType.
Parameters:
vecList: | List of points to interpolate/least square approximate.
All points are assumed of same dimension (not tested.).
|
---|
Order: | Of interpolating/approximating curve.
|
---|
CrvSize: | Number of degrees of freedom (control points) of the
interpolating/approximating curve.
|
---|
ParamType: | Type of parametrization.
|
---|
Periodic: | Constructed curve should be Periodic. Periodic
necessitates uniform knot sequence in ParamType.
|
---|
Returned Value:
CagdCrvStruct *: Constructed interpolating/approximating curve.
|
---|
See Also:
BspCrvInterpPts
BspCrvInterpolate
BspCrvInterpPts2
Keywords:
interpolation
least square approximation
(mvar_der.c:176)
Prototype:
MvarMVStruct *MvarBspMVDerive(const MvarMVStruct *MV,
MvarMVDirType Dir,
CagdBType DeriveScalar)
Description:
Given a B-spline 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 without taking into consideration the quotient rule.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
Dir: | Direction of differentiation.
|
---|
DeriveScalar: | TRUE to differentiate each channel independently.
FALSE to treat geometry as a rational differentiation.
|
---|
Returned Value:
MvarMVStruct *: Differentiated multi-variate in direction Dir. A
B-spline multi-variate.
|
---|
See Also:
MvarMVDeriveBound
MvarBzrMVDerive
MvarMVDerive
Keywords:
multi-variates
(mvar_der.c:583)
Prototype:
void MvarBspMVDeriveAllBounds(const MvarMVStruct *MV, IrtMinMaxType *MinMax)
Description:
Given a scalar B-spline multi-variate, computes bounds to its partial
derivative in all directions.
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.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
MinMax: | Bounds on the derivative values of MV in all directions.
|
---|
Returned Value:
See Also:
MvarMVDerive
MvarBzrMVDeriveBound
MvarMVDeriveBound
Keywords:
multi-variates
(mvar_der.c:410)
Prototype:
void MvarBspMVDeriveBound(const MvarMVStruct *MV,
MvarMVDirType Dir,
CagdRType MinMax[2])
Description:
Given a scalar B-spline multi-variate, computes bounds to its partial
derivative 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.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
Dir: | Direction of differentiation.
|
---|
MinMax: | Bounds on the derivative values of MV in direction Dir.
|
---|
Returned Value:
See Also:
MvarMVDerive
MvarBzrMVDeriveBound
MvarMVDeriveBound
Keywords:
multi-variates
(mvbspsym.c:203)
Prototype:
MvarMVStruct *MvarBspMVDeriveRational(const MvarMVStruct *MV,
MvarMVDirType Dir)
Description:
Given a rational B-spline multivariates - computes its derivative surface
in direction Dir, using the quotient rule for differentiation.
Parameters:
MV: | Rational B-spline multivariate to differentiate.
|
---|
Dir: | Direction of Differentiation.
|
---|
Returned Value:
MvarMVStruct *: Differentiated rational B-spline multivariate.
|
---|
See Also:
MvarMVDerive
MvarBzrMVDerive
MvarBspMVDerive
MvarBzrMVDeriveRational
Keywords:
derivatives
(mvar_der.c:283)
Prototype:
MvarMVStruct *MvarBspMVDeriveScalar(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.
For a Euclidean surface this is the same as MvarBzrMVDerive but for a
rational multivar the returned multivar is not the vector field but simply
the derivatives of all the multivar's coefficients, including the weights.
Parameters:
MV: | To differentiate.
|
---|
Dir: | Direction of differentiation. Either U or V.
|
---|
Returned Value:
MvarMVStruct *: Differentiated multi-variate.
|
---|
See Also:
MvarMVDeriveBound
MvarMVDerive
MvarBspMVDerive
MvarBspMVDerive
MvarBzrMVDeriveScalar
Keywords:
derivatives
(mvar_aux.c:1393)
Prototype:
CagdBType MvarBspMVHasOpenEC(const MvarMVStruct *MV)
Description:
Returns TRUE iff the given B-spline multivariate has open end conditions
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
MvarBspMVHasOpenECInDir
MvarBspMVHasOpenECInDir
Keywords:
open end conditions
(mvar_aux.c:1364)
Prototype:
CagdBType MvarBspMVHasOpenECInDir(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Returns TRUE iff the given B-spline multivariate has open end conditions
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
MvarBspMVHasOpenEC
MvarBspMVIsPeriodic
MvarBspMVIsPeriodicInDir
Keywords:
open end conditions
(mvar_aux.c:1487)
Prototype:
int MvarBspMVInteriorKnots(const MvarMVStruct *MV, CagdRType *Knot)
Description:
Returns -1 if the given B-spline multivariate has not interior knots in
no direction. Otherwise, return the direction that has an interior knot
and returns the knot value in Knot.
Parameters:
MV: | To check for interior knots.
|
---|
Knot: | Where to return an interior knot if found one.
|
---|
Returned Value:
int: -1 if MV has no interior knots, Axis of interior knot
otherwise.
|
---|
See Also:
BspCrvHasOpenEC
MvarBspMVHasOpenEC
MvarBspMVHasOpenECInDir
MvarBspMVIsPeriodicInDir
Keywords:
Internal knots
Bezier
(mvar_aux.c:1455)
Prototype:
CagdBType MvarBspMVIsPeriodic(const MvarMVStruct *MV)
Description:
Returns TRUE iff the given B-spline multivariate has periodic end
conditions 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
MvarBspMVHasOpenEC
MvarBspMVHasOpenECInDir
MvarBspMVIsPeriodicInDir
MvarBspMVInteriorKnots
Keywords:
periodic end conditions
(mvar_aux.c:1431)
Prototype:
CagdBType MvarBspMVIsPeriodicInDir(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Returns TRUE iff the given B-spline multivariate has periodic end
conditions 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
MvarBspMVHasOpenEC
MvarBspMVHasOpenECInDir
MvarBspMVIsPeriodic
Keywords:
periodic end conditions
(mvar_ref.c:88)
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:58)
Prototype:
MvarMVStruct *MvarBspMVMult(const MvarMVStruct *CMV1, const MvarMVStruct *CMV2)
Description:
Given two B-spline multivariates - multiply them coordinate-wise.
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 coordinate-wise.
|
---|
Keywords:
product
(mvar_gen.c:173)
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:233)
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
(mvar_sub.c:638)
Prototype:
MvarMVStruct *MvarBspMVSubdivAtParamOneSide(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir,
IrtBType LeftSide)
Description:
Given a B-spline 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.
|
---|
LeftSide: | TRUE to only fetch left half, FALSE to fetch right half.
|
---|
Returned Value:
MvarMVStruct *: A single multi-variate, result of the subdivision.
|
---|
See Also:
MvarMVSubdivAtParam
MvarBzrMVSubdivAtParam
Keywords:
multi-variates
(mvbspsym.c:37)
Prototype:
int MvarBspMultComputationMethod(int BspMultUsingInter)
Description:
Sets method of B-spline product computation.
Parameters:
BspMultUsingInter: | If TRUE, B-spline product is computed by setting an
interpolation problem. Otherwise, by decomposing the
B-spline geometry to Bezier geometry.
|
---|
Returned Value:
Keywords:
product
(selfintr.c:1651)
Prototype:
MvarPolylineStruct *MvarBspSrfSelfInterDiagFactor(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Given a B-spline 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:
MvarPolylineStruct *: List of self intersection pllns, as (u, v)
parameter pairs into the surfaces' domain. Points in R^4.
|
---|
See Also:
MvarAdjacentSrfSrfInter
MvarBzrSrfSelfInterDiagFactor
Keywords:
(mvar_gen.c:270)
Prototype:
MvarMVStruct *MvarBuildParamMV(int Dim, int Dir, CagdRType Min, CagdRType Max)
Description:
Construct an MV that serves as a parameter function in direction Dir.
Parameters:
Dim: | Number of dimensions of the MV parameter function.
|
---|
Dir: | Direction of this parameter (between 0 and Dim-1).
|
---|
Min, Max: | The range of this parameter.
|
---|
Returned Value:
MvarMVStruct *: Constructed parameter MV function.
|
---|
See Also:
Keywords:
(mvar_aux.c:1526)
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:74)
Prototype:
MvarMVStruct *MvarBzrMVDerive(const MvarMVStruct *MV,
MvarMVDirType Dir,
CagdBType DeriveScalar)
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 without taking into consideration the quotient rule.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
Dir: | Direction of differentiation.
|
---|
DeriveScalar: | TRUE to differentiate each channel independently.
FALSE to treat geometry as a rational differentiation.
|
---|
Returned Value:
MvarMVStruct *: Differentiated multi-variate in direction Dir. A
Bezier multi-variate.
|
---|
See Also:
MvarMVDeriveBound
MvarMVDerive
MvarBspMVDerive
MvarBzrMVDeriveScalar
Keywords:
multi-variates
(mvar_der.c:518)
Prototype:
void MvarBzrMVDeriveAllBounds(const MvarMVStruct *MV, CagdMinMaxType *MinMax)
Description:
Given a scalar Bezier multi-variate, computes bounds to its partial
derivative in all directions.
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.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
MinMax: | Bounds on the derivative values of MV in all directions.
|
---|
Returned Value:
See Also:
MvarMVDerive
MvarMVDeriveBound
MvarBspMVDeriveBound
Keywords:
multi-variates
(mvar_der.c:351)
Prototype:
void MvarBzrMVDeriveBound(const MvarMVStruct *MV,
MvarMVDirType Dir,
CagdRType MinMax[2])
Description:
Given a scalar Bezier multi-variate, computes bounds to its partial
derivative 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.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
Dir: | Direction of differentiation.
|
---|
MinMax: | Bounds on the derivative values of MV in direction Dir.
|
---|
Returned Value:
See Also:
MvarMVDerive
MvarMVDeriveBound
MvarBspMVDeriveBound
Keywords:
multi-variates
(mvbzrsym.c:525)
Prototype:
MvarMVStruct *MvarBzrMVDeriveRational(const 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
(mvar_der.c:139)
Prototype:
MvarMVStruct *MvarBzrMVDeriveScalar(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.
For a Euclidean surface this is the same as MvarBzrMVDerive but for a
rational multivar the returned multivar is not the vector field but simply
the derivatives of all the multivar's coefficients, including the weights.
Parameters:
MV: | To differentiate.
|
---|
Dir: | Direction of differentiation. Either U or V.
|
---|
Returned Value:
MvarMVStruct *: Differentiated multi-variate.
|
---|
See Also:
MvarMVDeriveBound
MvarMVDerive
MvarBspMVDerive
MvarBzrMVDerive
MvarBspMVDeriveScalar
Keywords:
derivatives
(mvbzrsym.c:309)
Prototype:
MvarMVStruct *MvarBzrMVMult(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two Bezier multivariates - multiply them coordinate-wise.
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 coordinate-wise.
|
---|
Keywords:
product
(mvar_gen.c:214)
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_aux.c:747)
Prototype:
MvarMVStruct *MvarBzrMVRegionFromMV(const MvarMVStruct *MV,
CagdRType t1,
CagdRType t2,
MvarMVDirType Dir)
Description:
Changing the domain of a multivariate, in direction Dir, such that:
The values of the output multivariate over [0,1] in direction Dir, are
those of the input multivariate over [NewMinDmn,NewMaxDmn].
If required, the user of this function should map back point x from
[0,1] to [NewMinDmn,NewMaxDmn] by the affine domain change:
y[dir] = (1 - x[dir]) * NewMinDmn + x[dir] * NewMaxDmn.
NOTE: when the new domain is always known to be contained in the old
domain, if possible use MvarMVRegionFromMV, which suits B-splines as
well and supports the same operation. This function is made for cases
where a new region is not contained in [0,1].
Parameters:
MV: | The Bezier multivariate, values of which are required over a domain
other than [0,1].
|
---|
t1: | The required min' domain.
|
---|
t2: | The required max' domain.
|
---|
Dir: | he direction to extract the domain.
|
---|
Returned Value:
MvarMVStruct *: The new MV with the required new domain.
|
---|
See Also:
MvarMVRegionFromMV
MvarMVExtension
Keywords:
(mvar_sub.c:179)
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
(mvar_sub.c:574)
Prototype:
MvarMVStruct *MvarBzrMVSubdivAtParamOneSide(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir,
IrtBType LeftSide)
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.
|
---|
LeftSide: | TRUE to only fetch left half, FALSE to fetch right half.
|
---|
Returned Value:
MvarMVStruct *: A single multi-variate, result of the subdivision.
|
---|
See Also:
MvarBspMVSubdivAtParamOneSide
MvarMVSubdivAtParam
Keywords:
multi-variates
(mvbzrsym.c:216)
Prototype:
MvarMVStruct *MvarBzrMultBrnBasis(const MvarMVStruct *MV,
int *MulOrders,
int *MulIndices)
Description:
Given a Bezier multivariate and a Bernstein basis function - multiply them
coordinate-wise.
Parameters:
MV: | A Bezier multivariate.
|
---|
MulOrders: | The orders of the Bernstein basis function to multiply with.
|
---|
MulIndices: | ulIndices[i] is the exponent of the ith variable of the
given Bernstein basis function.
|
---|
Returned Value:
MvarMVStruct *: The product of MV with the given Bernstein basis
monomial, coordinate-wise.
|
---|
Keywords:
product
(selfintr.c:1043)
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:1268)
Prototype:
MvarPolylineStruct *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 singularities 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.
Finally a 7th equations of the form "|| S - S ||^2 = 0 is added for
faster pruning of far regions.
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:
MvarPolylineStruct *: List of self intersection pllns, as (u, v)
parameter pairs into the surfaces' domain. Points in R^4.
|
---|
See Also:
MvarBzrSelfInter4VarDecomp
Keywords:
(mvarjimp.c:299)
Prototype:
MvarPtStruct *MvarCalculateExtremePoints(const MvarMVStruct *MV)
Description:
Calculates list of extreme points of a given scalar function.
Supports up to dimension 3 (i.e. trivariates).
Note that the result, the returned list of parameteric locations, is a
super set of the extreme values MV can assume as we decompose MV into low
dimensional entities (i.e. boundary surfaces and curves) and an extrema in
a lower diemsnional entities does not mean it is an extreme in MV.
Parameters:
MV: | Input scalar function, represented as a multivariate, to
compute parametric locations of extreme values.
|
---|
Returned Value:
MvarPtStruct *: List of extreme multivariate points candidates
returns NULL in case of invalid input.
|
---|
Keywords:
(mvarjimp.c:635)
Prototype:
MvarMVStruct *MvarCalculateTVJacobian(const TrivTVStruct *TV)
Description:
Calculates the Jacobian of a given trivariate.
Parameters:
TV: | The input trivariate.
|
---|
Returned Value:
MvarMVStruct *: The Jacobian in a multi variate representation.
|
---|
See Also:
Symb2DSrfJacobian
MvarTrivJacobianImprove
MvarCalculateExtremePoints
TrivComputeJacobian
Keywords:
(mvarpck3.c:312)
Prototype:
MvarPtStruct *MvarCircAtDirMax(const CagdCrvStruct *Bndry,
CagdPType XBnd,
CagdPType YBnd,
CagdRType Radius,
const CagdPType Dir,
CagdRType NumericTol,
CagdRType SubdivTol)
Description:
Computes all circles which are tangent to a given cirve and have a locally
maximum projection on a given direction. The following set of
multivariates is solved:
< Bndry(u) - (x,y), Bndry(u) - (x, y) > = R^2,
< Bndry(u) - (x,y), Bndry'(u) > = 0,
< Bndry'(u), Dir > = 0
Parameters:
Bndry: | The curve to find the circles that is tangent to.
|
---|
XBnd: | The range of x-coordinate of bounding box of Bndry.
|
---|
YBnd: | The range of y-coordinate of bounding box of Bndry.
|
---|
Radius: | The radius of the circle.
|
---|
Dir: | The direction to project the circle center on.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. The numeric
stage is employed only if NumericTol < SubdivTol.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
---|
Returned Value:
MvarPtStruct *: List of (x,y) solution points.
|
---|
See Also:
MvarCircTanAtTwoPts
Keywords:
(mvarpck3.c:452)
Prototype:
MvarPtStruct *MvarCircOnLineTangToBdry(const CagdCrvStruct *Bndry,
const CagdCrvStruct *InNrml,
CagdRType Radius,
const CagdPType Dir,
const CagdPType Pt,
CagdRType NumericTol,
CagdRType SubdivTol)
Description:
Computes all circles which are tangent to a given curve and whose centers
lie on a given line. Following system of multivariates is solved:
< Pt + c.Dir - Bndry(t), Bndry'(t) > = 0,
< Pt + c.Dir - Bndry(t), Pt + c.Dir - Bndry(t) > - Radius^2= 0.
Parameters:
Bndry: | The curve to find the circles that is tangent to.
|
---|
InNrml: | Normal pointing in the interior of Bndry, or NULL.
|
---|
Radius: | The radius of the circle.
|
---|
Dir: | The direction of the line on which circle center must lie.
|
---|
Pt: | A point through which the line passes.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. The numeric
stage is employed only if NumericTol < SubdivTol.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
---|
Returned Value:
MvarPtStruct *: List of (c,t) solution points.
|
---|
Keywords:
(mvarpck3.c:578)
Prototype:
MvarPtStruct *MvarCircTanAtTwoPts(const CagdCrvStruct *Bndry,
CagdPType XBnd,
CagdPType YBnd,
CagdRType Radius,
CagdRType NumericTol,
CagdRType SubdivTol)
Description:
Computes all circles which are tangent to a given curve at two distinct
points. The following set of multivariates is solved:
< Bndry(u) - (x,y), Bndry(u) - (x, y) > = R^2,
< Bndry(u) - (x,y), Bndry'(u) > = 0,
< Bndry(v) - (x,y), Bndry(v) - (x, y) > = R^2,
< Bndry(v) - (x,y), Bndry'(v) > = 0,
u - v > Eps
Parameters:
Bndry: | The curve to find the circles that is tangent to.
|
---|
XBnd: | The range of x-coordinate of bounding box of Bndry.
|
---|
YBnd: | The range of y-coordinate of bounding box of Bndry.
|
---|
Radius: | The radius of the circle.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. The numeric
stage is employed only if NumericTol < SubdivTol.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
---|
Returned Value:
MvarPtStruct *: List of (x,y) solution points.
|
---|
See Also:
MvarCircAtDirMax
Keywords:
(mvtangnt.c:415)
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 (t, r, x, y), 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 (t, r, x, y).
|
---|
See Also:
SymbCircTanTo2Crvs
MvarCircTanTo3Crvs
Keywords:
bi-tangent
(mvtangnt.c:553)
Prototype:
MvarPtStruct *MvarCircTanTo3Crvs(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
const CagdCrvStruct *Crv3,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType OneSideOrientation)
Description:
Computes all circles that are tangent to given three curves.
Solves for circles' centers P(x, y), using the following process:
Solve, symbolically for P in the following 2x2 system by Cremmer rule:
||C1(u) - P||^2 = ||C2(v) - P||^2,
||C1(u) - P||^2 = ||C3(w) - P||^2,
and substitute P into the following 3 euqations and solve 3 equations
in (u, v, w):
< C1(u) - P, C1'(u) > = 0,
< C2(v) - P, C2'(v) > = 0,
< C3(w) - P, C2'(w) > = 0.
Parameters:
Crv1, Crv2, Crv3: | he two curves to find the circles that is tangent to
both.
|
---|
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.
|
---|
OneSideOrientation: | TRUE to compute tri-tangencies on one side of the
curves only.
|
---|
Returned Value:
MvarPtStruct *: List of (u, v, w) solution points.
|
---|
See Also:
MvarCircTanTo2Crvs
Keywords:
tri-tangent
(mvarpck3.c:760)
Prototype:
MvarPtStruct *MvarCircTanToCircCrv3By3(const CagdCrvStruct *Bndry,
const CagdCrvStruct *InNrml,
CagdPType XBnd,
CagdPType YBnd,
const CagdPType Center,
CagdRType Radius,
CagdBType BndBndryPar,
CagdRType BndryPar,
CagdRType NumericTol,
CagdRType SubdivTol)
Description:
Computes all circles which are tangent to a given circle and also to the
another curve. The following system of multivariats is solved:
< Bndry(u) - (x,y), Bndry(u) - (x,y) > = R^2,
< Center - (x,y), Center - (x,y) > = 4 * R^2,
< Bndry(u) - (x,y), Bndry'(u) > = 0
Parameters:
Bndry: | The curve to find the circles that is tangent to.
|
---|
InNrml: | Normal pointing in the interior of Bndry, or NULL.
|
---|
XBnd: | The range of x-coordinate of bounding box of Bndry.
|
---|
YBnd: | The range of y-coordinate of bounding box of Bndry.
|
---|
Center: | The center of circle to find circle tangent to.
|
---|
Radius: | The radius of the circle.
|
---|
BndBndryPar: | If TRUE, find contact points on boundary curve greater
than the specified value.
|
---|
BndryPar: | The boundary curve parameter to serve as lower bound.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. The numeric
stage is employed only if NumericTol < SubdivTol.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
---|
Returned Value:
MvarPtStruct *: List of (x, y) solution points.
|
---|
Keywords:
(mvarpck3.c:179)
Prototype:
MvarPtStruct *MvarCircTanToCrvXCoord(const CagdCrvStruct *Bndry,
const CagdCrvStruct *InNrml,
CagdPType YBnd,
CagdRType Radius,
CagdRType XCoord,
CagdRType NumericTol,
CagdRType SubdivTol)
Description:
Computes all circles which are tangent to a given curve and have a given
x-coordinate. Following system of bivariates is solved, where the
variables are u and y, while X is fixed:
< Bndry(u) - (X,y), Bndry(u) - (X, y) > = R^2,
< Bndry(u) - (X,y), Bndry'(u) > = 0
Parameters:
Bndry: | The curve to find the circles that is tangent to.
|
---|
InNrml: | Normal pointing in the interior of Bndry, or NULL.
|
---|
YBnd: | The range of y-coordinate of bounding box of Bndry.
|
---|
Radius: | The radius of the circle.
|
---|
XCoord: | The X-coordinate of the center of the circle.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. The numeric
stage is employed only if NumericTol < SubdivTol.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
---|
Returned Value:
MvarPtStruct *: List of (y) solution points.
|
---|
See Also:
MvarCircTanToCrvYCoord
Keywords:
(mvarpck3.c:47)
Prototype:
MvarPtStruct *MvarCircTanToCrvYCoord(const CagdCrvStruct *Bndry,
const CagdCrvStruct *InNrml,
CagdPType XBnd,
CagdRType Radius,
CagdRType YCoord,
CagdRType NumericTol,
CagdRType SubdivTol)
Description:
Computes all circles which are tangent to a given curve and have a given
y-coordinate. Following system of bivariates is solved, where the variables
are u and x, while Y is fixed:
< Bndry(u) - (x,Y), Bndry(u) - (x, Y) > = R^2,
< Bndry(u) - (x,Y), Bndry'(u) > = 0
Parameters:
Bndry: | The curve to find the circles that is tangent to.
|
---|
InNrml: | Normal pointing in the interior of Bndry, or NULL.
|
---|
XBnd: | The range of x-coordinate of bounding box of Bndry.
|
---|
Radius: | The radius of the circle.
|
---|
YCoord: | The Y-coordinate of the center of the circle.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. The numeric
stage is employed only if NumericTol < SubdivTol.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
---|
Returned Value:
MvarPtStruct *: List of (x) solution points.
|
---|
See Also:
MvarCircTanToCrvXCoord
Keywords:
(contacts.c:41)
Prototype:
MvarPtStruct *MvarCntctTangentialCrvCrvC1(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Epsilon)
Description:
Computes tangential contact points of the given two curves by solving
for Ci(t) = (xi(t), yi(t)), i = 1,2:
x1(t) - x2(r) = 0,
y1(t) - y2(r) = 0,
< C1(t) - C2O(r), C1'(t) > = 0,
< C1(t) - C2O(r), C2'(r) > = 0,
where C2O is an offset curve of C2 by amount larger than subdivision tol.
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 r & t coefficients.
|
---|
See Also:
MvarCrvAntipodalPoints
Keywords:
(mvar_gen.c:1645)
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 B-spline multi-variate to convert to Bezier MVs.
|
---|
Returned Value:
MvarMVStruct *: A list of Bezier multi-variate representing the same
geometry as the given B-spline MV.
|
---|
Keywords:
conversion
multi-variate
(mvar_gen.c:1606)
Prototype:
MvarMVStruct *MvarCnvrtBzr2BspMV(const MvarMVStruct *MV)
Description:
Converts a Bezier multi-variate into a B-spline multi-variate by adding
two open end uniform knot vectors to it.
Parameters:
MV: | A Bezier multi-variate to convert to a B-spline MV.
|
---|
Returned Value:
MvarMVStruct *: A Bspline multi-variate representing the same geometry
as the given Bezier MV.
|
---|
Keywords:
conversion
multi-variate
(mvbzrpwr.c:63)
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_pll.c:814)
Prototype:
MvarPtStruct *MvarCnvrtCagdPtsToMVPts(const CagdPtStruct *Pts)
Description:
Converts a list of Cagd points to a list of MV points.
Parameters:
Pts: | Cagd points to convert to MV points.
|
---|
Returned Value:
MvarPtStruct *: MV points.
|
---|
See Also:
MvarCnvrtMVPolysToIritPolys
MvarCnvrtMVPolysToMVPts
Keywords:
(mvareval.c:982)
Prototype:
MvarMVStruct *MvarCnvrtCrvToMV(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
(mvar_aux.c:1311)
Prototype:
MvarMVStruct *MvarCnvrtFloat2OpenMV(const MvarMVStruct *MV)
Description:
Converts a float B-spline multivariate to a B-spline multivariate with
open end conditions.
Parameters:
MV: | B-spline 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:1115)
Prototype:
MvarPolylineStruct *MvarCnvrtIritLinCrvsToMVPolys(const CagdCrvStruct *Crvs)
Description:
Converts a list of mvar polylines into a list of irit curves.
Assumes crvs at most in E3.
Parameters:
Crvs: | List of linear curves to convert to mvar polylines.
|
---|
Returned Value:
MvarPolylineStruct *: A list of polylines.
|
---|
See Also:
MvarCnvrtMVPtsToCtlPts
MvarCnvrtMVPolysToIritPolys2
MvarCnvrtMVPolysToIritCrvs
Keywords:
(mvar_pll.c:876)
Prototype:
struct IPObjectStruct *MvarCnvrtMVPolysToCtlPts(const MvarPolylineStruct
*MVPlls)
Description:
Converts a list of MV polylines to a list of MV control points.
Parameters:
MVPlls: | MV polylines to convert to MV points.
|
---|
Returned Value:
struct IPObjectStruct *: MV control points.
|
---|
See Also:
MvarCnvrtMVPolysToIritPolys
Keywords:
(mvar_pll.c:1058)
Prototype:
CagdCrvStruct *MvarCnvrtMVPolysToIritCrvs(const MvarPolylineStruct *MVPlls,
int Order)
Description:
Converts a list of mvar polylines into a list of irit curves.
Assumes all points of same dimensions.
Parameters:
MVPlls: | List of multivariate polylines to convert to Irit curves.
|
---|
Order: | Order of constructed curves, typically 2 (linear).
|
---|
Returned Value:
CagdCrvStruct *: A list of curves.
|
---|
See Also:
MvarCnvrtMVPtsToCtlPts
MvarCnvrtMVPolysToIritPolys2
MvarCnvrtIritLinCrvsToMVPolys
Keywords:
(mvar_pll.c:912)
Prototype:
IPObjectStruct *MvarCnvrtMVPolysToIritPolys(const MvarPolylineStruct *MVPlls)
Description:
Converts a list of mvar polylines into a list of irit polylines.
Assumes all points of same dimensions.
Parameters:
MVPlls: | List of multivariate polylines to convert to Irit polylines.
|
---|
Returned Value:
IPObjectStruct *: A list object of polylines (as lists of ctlpts).
|
---|
See Also:
MvarCnvrtMVPtsToCtlPts
MvarCnvrtMVPtsToPolys2
MvarCnvrtMVPtsToPolys2
MvarCnvrtMVPolysToIritCrvs
Keywords:
(mvar_pll.c:974)
Prototype:
IPObjectStruct *MvarCnvrtMVPolysToIritPolys2(const MvarPolylineStruct *MVPlls,
int IgnoreIndividualPts)
Description:
Converts a list of mvar polylines into a list of irit polylines.
Assumes all points of same dimensions.
Parameters:
MVPlls: | List of multivariate polylines to convert to Irit polylines.
|
---|
IgnoreIndividualPts: | True to handle only polylines, ignoring points.
|
---|
Returned Value:
IPObjectStruct *: A polylines object, or if have individual points a
list of two objects, as (PllnObjs, PntObjs).
|
---|
See Also:
MvarCnvrtMVPtsToCtlPts
MvarCnvrtMVPtsToPolys2
MvarCnvrtMVPtsToPolys
MvarCnvrtMVPolysToIritCrvs
Keywords:
(mvar_pll.c:845)
Prototype:
MvarPtStruct *MvarCnvrtMVPolysToMVPts(const MvarPolylineStruct *MVPlls)
Description:
Converts a list of MV polylines to a list of MV points.
Parameters:
MVPlls: | MV polylines to convert to MV points.
|
---|
Returned Value:
MvarPtStruct *: MV points.
|
---|
See Also:
MvarCnvrtMVPolysToIritPolys
MvarCnvrtCagdPtsToMVPts
Keywords:
(mvar_pll.c:502)
Prototype:
CagdPtStruct *MvarCnvrtMVPtsToCagdPts(const MvarPtStruct *MVPts)
Description:
Converts a list of multivariate points into a list of cagd E3 points.
Assumes all input points are E1, E2, or E3.
Parameters:
MVPts: | List of multivariate points to convert to list of =points.
|
---|
Returned Value:
CagdPtStruct *: A list of points.
|
---|
See Also:
MvarCnvrtMVPtsToCtlPts
MvarCnvrtMVPtsToPolys
Keywords:
(mvar_pll.c:537)
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
MvarCnvrtMVPtsToCagdPts
Keywords:
MvarCnvrtMVPtsToCagdPts
(mvar_pll.c:605)
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:678)
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:
(mvareval.c:1038)
Prototype:
CagdCrvStruct *MvarCnvrtMVToCrv(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:1171)
Prototype:
CagdSrfStruct *MvarCnvrtMVToSrf(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:1329)
Prototype:
TrivTVStruct *MvarCnvrtMVToTV(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_pll.c:1197)
Prototype:
IPObjectStruct *MvarCnvrtMVTrsToIritPolygons(const MvarTriangleStruct *MVTrs,
int *Coords)
Description:
Converts a list of mvar triangles into a list of irit polygons. If the
list of triangles consists of points of dimension higher than three,
the polygons list is created as the projection on R^3, using the
coordinates specified in Coords.
Assumes all points of same dimensions.
Parameters:
MVTrs: | List of multivariate triangles to convert to Irit polygons.
|
---|
Coords: | The required coordinates, or NULL if the dimension is three.
|
---|
Returned Value:
IPObjectStruct *: A list object of polygons.
|
---|
See Also:
MvarIrit2DTrTo2DMVTrs
MvarCnvrtMVPolysToIritPolys
Keywords:
(mvar_aux.c:1239)
Prototype:
MvarMVStruct *MvarCnvrtPeriodic2FloatMV(const MvarMVStruct *MV)
Description:
Converts a B-spline multivariate into a B-spline multivariate with
floating end conditions.
Parameters:
MV: | B-spline 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:161)
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
(mvareval.c:1097)
Prototype:
MvarMVStruct *MvarCnvrtSrfToMV(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
(mvareval.c:1244)
Prototype:
MvarMVStruct *MvarCnvrtTVToMV(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
(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
(mvcomps2.c:736)
Prototype:
MdlModelStruct *MvarComposeMVMdl(const MvarMVStruct *MV,
const MdlModelStruct *Models)
Description:
Compose a list of B-rep models (Models) into a multivariate (MV),
allowing the surfaces of the models to cross knot values of the mapping
multivariate.
Parameters:
MV: | The mapping multivariate.
|
---|
Models: | The models to compose into MV.
|
---|
Returned Value:
MdlModelStruct *: The composed models.
|
---|
See Also:
MvarTrimComposeMVSrf
MvarUnTrimComposeMVSrf
MvarComposeMVVModel
Keywords:
composition
trimming
multivariates
(mvcomps2.c:813)
Prototype:
VMdlVModelStruct *MvarComposeMVVModel(const MvarMVStruct *MV,
const VMdlVModelStruct *Vmdl)
Description:
Compose a list of V-Models (Vmdl) into a multivariate (MV), allowing
the V-models to cross knot values of the mapping multivariate.
Parameters:
MV: | The mapping multivariate.
|
---|
Vmdl: | The V-models to compose into MV.
|
---|
Returned Value:
VMdlVModelStruct *: The composed V-models.
|
---|
See Also:
MvarTrimComposeMVSrf
MvarUnTrimComposeMVSrf
MvarComposeMVMdl
Keywords:
composition
trimming
multivariates
V-model
(mvcomps2.c:1051)
Prototype:
MvarComposedSrfStruct *MvarComposedSrfAssumeSrf(CagdSrfStruct *Srf)
Description:
Creates a MvarComposedSrfStruct from a given surface. The surface is
NOT copied.
Parameters:
Srf: | The surface on which to base the MvarComposedSrfStruct.
|
---|
Returned Value:
MvarComposedSrfStruct *: A MvarComposedSrfStruct with the given
surface.
|
---|
See Also:
MvarTrimComposeMVSrf
MvarComposedSrfAssumeTSrf
Keywords:
composition
trimming
multivariates
(mvcomps2.c:1082)
Prototype:
MvarComposedSrfStruct *MvarComposedSrfAssumeTSrf(TrimSrfStruct *TSrf)
Description:
Creates a MvarComposedSrfStruct from a given trimmed surface. The
trimmed surface is NOT copied.
Parameters:
TSrf: | The trimmed surface on which to base the MvarComposedSrfStruct.
|
---|
Returned Value:
MvarComposedSrfStruct *: A MvarComposedSrfStruct with the given trimmed
surface.
|
---|
See Also:
MvarTrimComposeMVSrf
MvarComposedSrfAssumeSrf
Keywords:
composition
trimming
multivariates
(mvcomps2.c:1112)
Prototype:
MvarComposedSrfStruct *MvarComposedSrfCopy(const MvarComposedSrfStruct
*CompSrf)
Description:
Copies a single MvarComposedSrfStruct.
Parameters:
CompSrf: | The MvarComposedSrfStruct to copy.
|
---|
Returned Value:
MvarComposedSrfStruct *: A copy of the given MvarComposedSrfStruct.
|
---|
See Also:
MvarTrimComposeMVSrf
MvarComposedSrfCopyList
Keywords:
composition
trimming
multivariates
(mvcomps2.c:1144)
Prototype:
MvarComposedSrfStruct *MvarComposedSrfCopyList(const MvarComposedSrfStruct
*CompSrfs)
Description:
Copies a list of MvarComposedSrfStruct.
Parameters:
CompSrfs: | The list of MvarComposedSrfStruct to copy.
|
---|
Returned Value:
MvarComposedSrfStruct *: A copy of the given list of
MvarComposedSrfStruct.
|
---|
See Also:
MvarTrimComposeMVSrf
MvarComposedSrfCopy
Keywords:
composition
trimming
multivariates
(mvcomps2.c:1237)
Prototype:
MvarComposedTrivStruct *MvarComposedTrivAssumeTV(TrivTVStruct *TV)
Description:
Creates a MvarComposedTrivStruct from a given trivariate. The trivariate
is NOT copied.
Parameters:
TV: | The trivariate on which to base the MvarComposedTrivStruct.
|
---|
Returned Value:
MvarComposedTrivStruct *: A MvarComposedTrivStruct with the given
trivariate.
|
---|
See Also:
MvarTrimComposeMVTV
MvarComposedTrivAssumeVMdl
Keywords:
composition
V-model
multivariates
(mvcomps2.c:1268)
Prototype:
MvarComposedTrivStruct *MvarComposedTrivAssumeVMdl(VMdlVModelStruct *VMdl)
Description:
Creates a MvarComposedTrivStruct from a given V-model. The V-model is
NOT copied.
Parameters:
VMdl: | The V-model on which to base the MvarComposedTrivStruct.
|
---|
Returned Value:
MvarComposedTrivStruct *: A MvarComposedTrivStruct with the given
V-model.
|
---|
See Also:
MvarTrimComposeMVTV
MvarComposedTrivAssumeTV
Keywords:
composition
V-model
multivariates
(mvcomps2.c:1357)
Prototype:
MvarComposedTrivStruct *MvarComposedTrivCopy(const MvarComposedTrivStruct *CTV)
Description:
Copies a single MvarComposedTrivStruct.
Parameters:
CTV: | The MvarComposedTrivStruct to copy.
|
---|
Returned Value:
MvarComposedTrivStruct *: A copy of the given MvarComposedTrivStruct.
|
---|
See Also:
MvarTrimComposeMVTV
MvarComposedTrivCopyList
Keywords:
composition
trimming
multivariates
(mvcomps2.c:1389)
Prototype:
MvarComposedTrivStruct *MvarComposedTrivCopyList(
const MvarComposedTrivStruct *CTVs)
Description:
Copies a list of MvarComposedTrivStruct.
Parameters:
CTVs: | The list of MvarComposedTrivStruct to copy.
|
---|
Returned Value:
MvarComposedTrivStruct *: A copy of the given list of
MvarComposedTrivStruct.
|
---|
See Also:
MvarTrimComposeMVTV
MvarComposedTrivCopy
Keywords:
composition
trimming
multivariates
(mvtrmbis.c:363)
Prototype:
CagdRType *MvarComputeInterMidPoint(CagdCrvStruct *Crv1,
CagdRType t1,
CagdCrvStruct *Crv2,
CagdRType t2,
CagdRType *Inter)
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.
|
---|
Inter: | Point of intersection.
|
---|
Returned Value:
CagdRType *: Point of intersection.
|
---|
Keywords:
(mvcompos.c:1286)
Prototype:
MvarMVStruct **MvarComputeMVPowers(const MvarMVStruct *CMV, int Order)
Description:
Computes the factors of the Bernstein polynomials where MV is a
scalar-range multivariate, for i from 0 to n (degree):
n n n-i i
B (MV(t0,...tm)) = ( ) (1 - MV(t0,...tm)) (MV(t0,...tm))
i i
The multivariate MV(t0,...tm) is a scalar, possibly a rational
multivariate.
If rational, the returned vector, index Order will contain
w MV(t0,...tm)^n.
See: "Freeform surface analysis using a hybrid of symbolic and numeric
computation" by Gershon Elber, PhD thesis, University of Utah, 1992.
Parameters:
CMV: | Multivariate to compute factors for.
|
---|
Order: | Order is n + 1.
|
---|
Returned Value:
MvarMVStruct **: A vector of all possible factors for i equal to
0 to n, allocated dynamically.
|
---|
See Also:
MvarGenerateBspBasisMVs
SymbComputeCurvePowers
SymbComputeSurfacePowers
MvarMVCompose
Keywords:
(ray-trap.c:70)
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:74)
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:143)
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:
(mvcones.c:1579)
Prototype:
CagdBType MvarConesOverlapAux(const MvarNormalConeStruct *ConesList)
Description:
Computes the tangency anti-cones of the set of normal cones,
and returns whether they overlap or not.
Parameters:
ConesList: | ones in a list.
|
---|
Returned Value:
CagdBType: TRUE if overlap, FALSE if not.
|
---|
Keywords:
normals
normal bound
(mv_mat2d.c:72)
Prototype:
CagdCrvStruct *MvarCrv2DMAT(const CagdCrvStruct *OCrv,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType InvertOrientation)
Description:
Computes the (inside) 2D MAT (medial axis transform) of a given closed
planar self-intersection-free oriented B-spline curve.
Parameters:
OCrv: | B-spline curve to compute its 2D planar MAT.
|
---|
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.
|
---|
InvertOrientation: | Flip what is considered inside and outside.
|
---|
Returned Value:
CagdCrvStruct *: The MAT as a list of curves.
|
---|
Keywords:
(selfintr.c:146)
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:
(crv_krnl.c:1014)
Prototype:
IPObjectStruct *MvarCrvArtGalleryPoint(const CagdCrvStruct *Crv,
CagdRType SubEps,
int NumGuards,
int BBoxSubdivDepth)
Description:
Estimates art gallery solution for a given freeform planar closed curve.
The presented algebraic approach is NOT solving the art gallery (due to
constraints being local and visibility is a global problem) but it shows
a possible use of the partial positivity in constraints in the
MV solver.
Parameters:
Crv: | Simple closed curve to estimates art gallery solution for.
|
---|
SubEps: | Subdivision epsilon.
|
---|
NumGuards: | umber of guards to try and place in this art gallery
corevage. NumGuards > 1.
|
---|
BBoxSubdivDepth: | Zero to use regular bounding boxes on constraints.
Positive integer >= 2 for recursive subdivision of this depth
for a more precise BBOx bounds.
|
---|
Returned Value:
IPObjectStruct *: XY locations of all Guards if found, as points in
r^k, k = NumGuards * 2.
NULL if none found.
|
---|
See Also:
MvarCrvKernel
MvarCrvAntipodalPoints
SymbCrvKernel
MvarCrvKernelPoint
Keywords:
(mvbisect.c:1287)
Prototype:
CagdCrvStruct *MvarCrvCrvBisector2D(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType *BBoxMin,
CagdRType *BBoxMax,
CagdBType SupportPrms)
Description:
Computes a bisector curve of two planar curves. Curves are assumed to
to lie in z = 0 plane. The bisector curve is computed inside BBox.
Parameters:
Crv1, Crv2: | Planar curves to compute their bisector.
|
---|
Step: | Stepsize for curve tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
BBoxMin, BBoxMax: | he bounding box, where the bisector is computed.
|
---|
SupportPrms: | TRUE to return a curve in E4 as (X, Y, y1, t2), FALSE
to return a curve in E2 as (X, Y).
|
---|
Returned Value:
CagdCrvStruct *: A (list of) piecewise linear curves that approximates
the bisector curve, or NULL if none.
|
---|
See Also:
MvarCrvDtctSelfInterLocations
Keywords:
(mvarintr.c:594)
Prototype:
MvarPtStruct *MvarCrvCrvContact(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
const CagdCrvStruct *MotionCrv1,
const CagdCrvStruct *ScaleCrv1,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType UseExprTree)
Description:
Computes the contact locations of two C^1 curves in R^3, possibly
with multivariate expression trees. Expression trees could be beneficial
computationally when the geometry is complex (i.e. dozens of control
points or more, in each directions).
Parameters:
Crv1, Crv2: | Two curves to compute contacts over time in R^3.
|
---|
MotionCrv1: | The motion over time Crv1 undergoes. Can be NULL.
|
---|
ScaleCrv1: | The scale over time Crv1 undergoes. Can either be a
scalar function, or vector function in R^3. Can be NULL.
If both MotionCrv1 and Crv1Scale are defined, they better
share their domains.
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured
in the parametric space of the curves.
|
---|
NumericTol: | Numeric tolerance of a possible numeric improvement
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:
MvarCrvCrvInter
MvarSrfSrfSrfInter
MvarSrfSrfContact
Keywords:
(mvarintr.c:80)
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
computationally 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 improvement 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:1107)
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, allocated
dynamically.
|
---|
See Also:
MvarCrvCrvAntipodalPoints
SymbDistCrvPoint
CagdCrvCrvInter
SymbSrfDistCrvCrv
Keywords:
(mv_crvtr.c:224)
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
(crv_krnl.c:476)
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 orthogonally 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
SymbCrvKernel
Keywords:
(offset2.c:1124)
Prototype:
MvarPtStruct *MvarCrvDtctSelfInterLocations(const CagdCrvStruct *Crv,
CagdRType OffsetDist,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Compute the locations where an offset by distance OffsetDist of Crv will
yield self intersections.
Parameters:
Crv: | Curve to detects its self intersection locations, if any.
|
---|
OffsetDist: | he desired offset distance.
|
---|
SubdivTol, NumericTol: | Tolerances of MV solver.
|
---|
Returned Value:
MvarPtStruct *: Locations of self intersection in R^4 as (u, v, x, y),
if any. Can be NULL if none.
|
---|
See Also:
MvarCrvCrvBisector2D
MvarCrvTrimSelfInterLocations
SymbCrvTrimGlblOffsetSelfInter
SymbSrfTrimGlblOffsetSelfInter
MvarCrvTrimGlblOffsetSelfInter
MvarCrvTrimGlblOffsetSelfInter2
Keywords:
(crv_krnl.c:152)
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:266)
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:118)
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 cross prod).
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
SymbCrvDiameter
MvarCrvKernelPoint
MvarCrvKernelPoint
Keywords:
(crv_krnl.c:758)
Prototype:
IPObjectStruct *MvarCrvKernelPoint(const CagdCrvStruct *Crvs,
CagdRType SubEps,
int OneKernelPoint,
IrtRType PreciseBBoundTol)
Description:
Computes a kernel point, if any, for the given curves. Let the input
curve be C_i(t) and let N_i(t) be the normal filed of C_i(t), where i = 1,
..., n. Then:
f_i(t_i, x, y) = < C_i(t)-P(x, y), N_i(t) >.
If f_i(t_i, x, y) > 0, for all t_i and all i, then (x, y) is a kernel
point.
Computed with only one semi-algebraic (inequality) constraints.
Parameters:
Crvs: | Simple closed curve to compute a kernel point for.
|
---|
SubEps: | Subdivision epsilon.
|
---|
OneKernelPoint: | TRUE to return a kernel point, FALSE to return all
points found.
|
---|
PreciseBBoundTol: | Zero to use regular bounding boxes on constraints.
Positive integer >= 2 for recursive subdivision of this depth
for a more precise BBOx bounds. A positive fraction for the
tolerance to use in precise BBox computations.
|
---|
Returned Value:
IPObjectStruct *: XY location(s) of a kernel point if found,
NULL if none found.
|
---|
See Also:
MvarCrvKernel
MvarCrvAntipodalPoints
SymbCrvKernel
MvarCrvArtGalleryPoint
Keywords:
(crv_krnl.c:431)
Prototype:
MvarPolylineStruct *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:
MvarPolylineStruct *: The silhouettes along the third, t, parameter
of the trivariate function f(u, v, t).
|
---|
See Also:
MvarCrvKernel
MvarCrvGammaKernel
Keywords:
(mvarbbox.c:1351)
Prototype:
void MvarCrvListPreciseBBox(const CagdCrvStruct *Crvs,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a list of curves.
Parameters:
Crvs: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
CagdCrvListBBox
MvarCrvPreciseBBox
Keywords:
bbox
bounding box
(mvar_rev.c:464)
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:
(lnsrfdst.c:32)
Prototype:
CagdRType MvarCrvMaxXYOriginDistance(const CagdCrvStruct *Crv,
CagdRType Epsilon,
CagdRType *Param)
Description:
Computes the maximal XY distance location of given curve from origin.
Parameters:
Crv: | To examine for its maximal XY distance for the origin.
|
---|
Epsilon: | Tolerance of computation.
|
---|
Param: | ill be set with the parameter location where this maximum occur.
|
---|
Returned Value:
Keywords:
(mvarbbox.c:1283)
Prototype:
void MvarCrvPreciseBBox(const CagdCrvStruct *Crv,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a curve freeform.
Parameters:
Crv: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MvarMVBBox
MvarMVPreciseBBox
CagdCrvBBox
Keywords:
bbox
bounding box
(selfintr.c:666)
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:483)
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:114)
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:705)
Prototype:
MvarZeroSolutionStruct *MvarCrvSrfBisectorApprox(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
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(t, u, v) = ------------------------
< 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
with simple algebraic manipulation, the following equivalent form is
is obtained, and is a polynomial (not rational) function, assuming the
the input is not rational:
< S(u, v) - C(t), S(u, v) - C(t) > < n(u, v), T(t) > +
2 < C(t) - S(u, v), T(t) > = 0
Finding the zero set of the last equation provides the solution in
(t, u, v) space, and the bisector point is given by:
(x, y, z) = S(u, v) + Alpha(t, u, v) n(u, v)
which is implemented as a post-process mapping.
Parameters:
CMV1: | The univariate (curve) in R^3.
|
---|
CMV2: | The bivariate (surface) in R^3.
|
---|
SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
---|
NumericTol: | olerance of the second zero set finding numeric stage.
|
---|
Returned Value:
MvarZeroSolutionStruct *: An approximation of the bisector surface,
either by polyline loops or triangles.
|
---|
See Also:
MvarMVsBisector
MvarSrfSrfBisector
MvarCrvSrfBisector
MvarSrfSrfBisectorApprox
Keywords:
bisectors
(mvbisect.c:463)
Prototype:
VoidPtr MvarCrvSrfBisectorApprox2(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
(lnsrfdst.c:340)
Prototype:
MvarPtStruct *MvarCrvSrfInter(const CagdCrvStruct *Crv,
const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes intersection points of a surface and a curve.
Parameters:
Crv: | Curve to intersect.
|
---|
Srf: | Surface to intersect.
|
---|
SubdivTol: | Subdivision tolerance of computation.
|
---|
NumericTol: | Numerical tolerance of computation.
|
---|
Returned Value:
MvarPtStruct *: List of intersection points as parameters (t,u,v).
|
---|
See Also:
MvarLineSrfInter
Keywords:
(hasdrf3d.c:864)
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
MvarDistSrfPoint
MvarSrfSrfMinimalDist
Keywords:
(mink_sum.c:286)
Prototype:
struct IPObjectStruct *MvarCrvSrfMinkowskiSum(const CagdCrvStruct *Crv,
const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType CrvTraceStep,
CagdRType NumericTol,
CagdRType OffsetTrimDist)
Description:
Computation of the Minkowski sum of a curve and a surface. The sum is
defined as the locus of points Crv(t) + Srf(u,v) in R^3, for t and (u,v)
in the parameter spaces, such that the corresponding tangent vector
T(t) is orthogonal to the surface normal and N(u,v), i.e. We solve:
*
< Crv_t , Srf_u x Srf_v > = 0.
*
The solution triangles (or polylines) in (t, u, v) space, are then mapped
to the Euclidean space using the post-process mapping Crv(t) + Srf(u,v).
Parameters:
Crv, Srf: | The curve and surface to compute their Minkowski
sum.
|
---|
SubdivTol: | The subdivision tolerance for the solver call.
|
---|
CrvTraceStep: | Univariate curve tracing step size.
|
---|
NumericTol: | The numeric tolerance for the solver call.
|
---|
OffsetTrimDist: | When positive, indicates that the Minkowski sum
is an offset problem, i.e. Srf is a sphere of radius
OffsetTrimDist, and the value is used in the
offset trimming. If negative, trimming is skipped
(the problem is not an offset problem, or any other
reason).
|
---|
Returned Value:
struct IPObjectStruct *: List of polygons or polylines (according to
the setting of the bivariate solver), approximating
the Minkowski sum.
|
---|
See Also:
MvarSrfSrfMinkSumMVs
Keywords:
(offset2.c:119)
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 improvement 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:
(offset2.c:565)
Prototype:
CagdCrvStruct *MvarCrvTrimGlblOffsetSelfInter2(const CagdCrvStruct *Crv,
CagdRType OffsetDist,
int Operation,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Trims regions in the offset curve of planar curve Crv are closer than
TrimAmount to original Crv, bu computing all self intersections in the
ffset curve. Constraints are define ONLY over the original curve.
Then, Split the offset curve at those intersections, and purge offset
curve segments that are too close to original curve.
Parameters:
Crv: | Original curve, assumed to be C1.
|
---|
OffsetDist: | The expected offset distance.
|
---|
Operation: | 0 - return valid curve segments in original curve.
1 - return valid curve segments as offset curves (using
SymbCrvAdapOffset).
2 - merge the offset curve segments (as in Operation = 1)
into one final offset curve.
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
---|
NumericTol: | Numeric tolerance of a possible numeric improvement 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
SymbSrfTrimGlblOffsetSelfInter
MvarCrvTrimGlblOffsetSelfInter
MvarCrvDtctSelfInterOffsetLocCreateOneMV
Keywords:
(offset2.c:1236)
Prototype:
CagdCrvStruct *MvarCrvTrimSelfInterLocations(const CagdCrvStruct *Crv,
CagdRType OffsetDist,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType PurgeSelfInters)
Description:
Clips the regions in an offset by distance OffsetDist of Crv and returns
the proper offset.
Parameters:
Crv: | Curve to detects its self intersection locations, if any.
|
---|
OffsetDist: | he desired offset distance.
|
---|
SubdivTol, NumericTol: | Tolerances of MV solver.
|
---|
PurgeSelfInters: | TRUE to purge self intersecting regions in the offset.
If FALSE, all curves segments are returned after splitting.
|
---|
Returned Value:
CagdCrvStruct *: Offset curve, clipped to non self-intersecting
locations.
|
---|
See Also:
MvarCrvCrvBisector2D
MvarCrvDtctSelfInterLocations
SymbCrvTrimGlblOffsetSelfInter
SymbSrfTrimGlblOffsetSelfInter
MvarCrvTrimGlblOffsetSelfInter
MvarCrvTrimGlblOffsetSelfInter2
Keywords:
(zrmvaux0.c:1274)
Prototype:
CagdPtStruct *MvarCrvZeroSet(const CagdCrvStruct *Curve,
int Axis,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType FilterTangencies)
Description:
Computes the zeros of the given curve in the given axis.
Parameters:
Curve: | To compute its zeros.
|
---|
Axis: | of Crv to seek its zeros: 0 for W, 1 for X, 2 for Y, etc.
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the curves.
|
---|
NumericTol: | umeric tolerance of a possible numeric improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
FilterTangencies: | If TRUE, filter out tangencies at the zeros.
|
---|
Returned Value:
CagdPtStruct *: List of zeros (parametric locations on CUrve).
|
---|
See Also:
MvarSrfZeroSet
MvarMVsZeros0D
Keywords:
(control.c:48)
Prototype:
MvarPtStruct *MvarCtrlComputeCrvNCycle(const CagdCrvStruct *Crv,
int CycLen,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes a cycle of length CycLen of bouncing lines between the given
scalar curve C(t) and the diagonal of the domain.
A ray is bounced 'down' from the diagonal to C and from C, we bounce
a horizontal ray to the diagonal. Let Di, i == 1,k be the diagonal points
and Ci, i == 1,k the points on C. Then, the cycle of length k = CycLen
is: (D1, C1, D2, C2, ... Dk, Ck). The following algebraic constraints
can be imposed:
Ci(y) = Di+1(y), for all i, (horizontal move from curve to diagonal)
Di(x) = Ci(x), for all i. (vertical move from diagonal to curve)
Over all, we have 2n equations and 2n dofs. We can reduce them to n
equations and dofs (eliminating the diagonals):
Ci(y) = Ci+1(x), for all i.
Over all, we have now n equations and n dofs (n different parameters of C).
Parameters:
Crv: | A curve to compute a cycle of length CycLen for.
|
---|
CycLen: | Length of sought cycle (also k above).
|
---|
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.
|
---|
Returned Value:
MvarPtStruct *: Linked list of solutions, each holding the parameter
values of the different Cycles, if any.
|
---|
See Also:
MvarCtrlComputeSrfNCycle
Keywords:
(control.c:186)
Prototype:
MvarPtStruct *MvarCtrlComputeSrfNCycle(const CagdSrfStruct *Srf,
int CycLen,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes a cycle of length CycLen of bouncing lines between the given
surface S(u, v) = (S1(u, v), S2(u, v)).
The cycle of length k = CycLen is:
S(u1, v1) -> (u2, v)
S(ui, vi) -> (u(i+1), v(i+1))
S(uk, vk) -> (u1, v1)
Over all, we have 2n equations and 2n dofs.
Parameters:
Srf: | A surface to compute a cycle of length CycLen for.
|
---|
CycLen: | Length of sought cycle (also k above).
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surface.
|
---|
NumerTol: | Numeric tolerance of a possible numeric improvment stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPtStruct *: Linked list of solutions, each holding the parameter
values of the different Cycles, if any.
|
---|
See Also:
MvarCtrlComputeCrvNCycle
Keywords:
(mvar_dbg.c:28)
Prototype:
void MvarDbg(const 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_dbg.c:74)
Prototype:
void MvarDbgDsp(const void *Obj)
Description:
Views multivariates in a display device. Should be linked to programs for
debugging purposes, so multivariates may be inspected from the debugger.
Parameters:
Obj: | A multivariate - to be displayed.
|
---|
Returned Value:
Keywords:
debugging
(mvar_dbg.c:168)
Prototype:
void MvarDbgInfo(const void **Objs, int Size)
Description:
Prints multi-variates statistics to stderr. Should be linked to programs
for debugging purposes, so multi-variates may be inspected from a debugger.
Parameters:
Objs: | A vector of multi-variate - to print statistics on to stderr.
|
---|
Size: | Size of vector.
|
---|
Returned Value:
Keywords:
debugging
(zrmvaux1.c:403)
Prototype:
void MvarDbgMVZR1DExamineSegmentBndry(MvarPtStruct *PtList,
const MvarMVStruct *MV)
Description:
Verify the given segment is closed or on MV's boundary.
Parameters:
PtList: | One traced segment to examine...
|
---|
MV: | If PtList starting/ending on MV boundary or closed.
|
---|
Returned Value:
Keywords:
(zrmvaux1.c:368)
Prototype:
void MvarDbgMVZR1DPrintEndPtPlList(MvarPolylineStruct *PolyList)
Description:
Print the end points of a list of polylines.
Parameters:
PolyList: | List of polylines.
|
---|
Returned Value:
Keywords:
(mvar_err.c:110)
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 invocation 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
(pdvl_alg.c:838)
Prototype:
IPObjectStruct *MvarDevelopSrfFromCrvSrf(const CagdSrfStruct *Srf,
const CagdCrvStruct *Crv,
const CagdCrvStruct *OrientField,
int CrvSizeReduction,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType Euclidean)
Description:
Computes a developable scroll between the given curve, Crv, and surface,
Srf. The developable scroll will be tangent to both Crv and Srf and will
be a ruled surface in between (with same surface normal along rulings).
Computed by solving the following two equations with three unknowns:
< C(t) - S(u, v), n(u, v) > = 0,
< n(u, v), C'(t) > = 0.
Parameters:
Srf: | A general surface to compute developable scroll from it to Crv.
|
---|
Crv: | A general curve to compute developable scroll from it to Srf.
|
---|
OrientField: | If exists, prescribes where to look for solutions of the
next developable in the surface (u, v) space, along Crv params.
Assumed to have the same parameterization as Crv.
|
---|
CrvSizeReduction: | reduction in size of traced curve while ensuring
the Tolerance, conservatively.
|
---|
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.
|
---|
Euclidean: | TRUE to return the construct developable scroll(s) in the
Euclidean space, FALSE to return the result in (u, v, t) space.
|
---|
Returned Value:
IPObjectStruct *: A developable scroll surface in Euclidean space if
Euclidean (or a linked list of such), or a (list of) curve in
(u, v, t) parametric space of the scroll(s), or NULL if none.
|
---|
See Also:
MvarDevelopSrFfromCrvSrfMakeSrfs
Keywords:
(pdvl_alg.c:1009)
Prototype:
CagdSrfStruct *MvarDevelopSrfFromCrvSrfMakeSrfs(const CagdCrvStruct *Crv,
const CagdSrfStruct *Srf,
const CagdCrvStruct *UVTCrvs,
int CrvSizeReduction)
Description:
Evaluate the given solution to curve(s) in (u, v, t) space to surfaces
between the Crv and (tangential point on) Srf.
Parameters:
Crv: | A general curve to compute developable scroll from it to Srf.
|
---|
Srf: | A general surface to compute developable scroll from it to Crv.
|
---|
UVTCrvs: | he solution as polylines in (u, v, t) space.
|
---|
CrvSizeReduction: | reduction in size of traced curve while ensuring
the Tolerance, conservatively.
|
---|
Returned Value:
CagdSrfStruct *: Euclidean space developable surface.
|
---|
See Also:
MvarDevelopSrfFromCrvSrf
Keywords:
(mvardist.c:2295)
Prototype:
CagdCrvStruct *MvarDistCrvOfPtFromSrf(const CagdRType *Pt,
const CagdSrfStruct *Srf,
CagdRType Dist,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumerTol,
int LstSqrFit)
Description:
Computes curve(s) on Srf that are at a Euclidean distance Dist from Pt.
Solves the following equation in two variables:
|| Srf(u, v) - Pt ||^2 = Dist^2.
Parameters:
Pt: | Point in Euclidean space to compute the fixed distance
curve(s) for.
|
---|
Srf: | Surface to compute the fixed distance curve(s) on.
|
---|
Dist: | Euclidean distance of the curves.
|
---|
Step: | Step size during the numeric tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumerTol: | The numerical tolerance to use.
|
---|
LstSqrFit: | Number of control points to allow in fit, zero to disable.
|
---|
Returned Value:
CagdCrvStruct *: Computed curves in UV space or NULL if not found.
|
---|
Keywords:
(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:
(mvar_int.c:241)
Prototype:
IrtRType MvarDistPointLine(const MvarVecStruct *Point,
const MvarVecStruct *Pl,
const MvarVecStruct *Vl)
Description:
Routine to compute the minimal point distance to a given line in R^n.
The line is prescribed using a point on it (Pl) and a unit vector (Vl).
Parameters:
Point: | To find the closest to on the line.
|
---|
Pl, Vl: | Position and direction that defines the line. Vl is
assumed a unit length vector.
|
---|
Returned Value:
IrtRType: The computed minimal distance.
|
---|
See Also:
GMDistPointLine
Keywords:
point line distance
(mvardist.c:465)
Prototype:
CagdRType *MvarDistSrfLine(const CagdSrfStruct *Srf,
const CagdPType LnPt,
const CagdVType LnDir,
CagdBType MinDist,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdUVType ExtremeDistUV)
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.
|
---|
ExtremeDistUV: | arameter value in the parameter space of Srf of the
nearest (farthest) point to line Line.
|
---|
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:99)
Prototype:
CagdRType *MvarDistSrfPoint(const CagdSrfStruct *Srf,
void *SrfPtPrepHandle,
const CagdPType Pt,
MvarPtStruct *InitialSol,
CagdBType MinDist,
CagdRType SubdivTol,
CagdRType NumericTol,
MvarPtStruct **ExtremePts,
CagdRType *ExtremeDistUV,
CagdPointType DistSpace)
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.
|
---|
SrfPtPrepHandle: | If not NULL, holds pre-processed data to speed up the
surface - points distance computations, for multiple
surface - point tests (same surface for all points).
See MvarDistSrfPointPrep and MvarDistSrfPointFree.
|
---|
Pt: | The point to find the nearest (farthest) point on Srf to it.
|
---|
InitialSol: | ptional initial guess for a solution in which case we aim
to improve numerically to within NumericTol. If successful,
this solution is returned (in place here and the return
value). Otherwise, the full solver is invoked.
|
---|
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.
|
---|
ExtremePts: | f not NULL, will be set to hold all dist solution, as can
be more than one.
|
---|
ExtremeDistUV: | V Parameter values in the parameter space of Srf of the
nearest (farthest) point to point Pt.
|
---|
DistSpace: | The (point) space to compute the distance to surface.
|
---|
Returned Value:
CagdRType *: UV Parameter values in the parameter space of Srf of the
nearest (farthest) point to point Pt.
|
---|
Keywords:
surface point distance
(mvardist.c:305)
Prototype:
void MvarDistSrfPointFree(void *SrfPtPrepHandle)
Description:
Free the pre-processed data structure, given using Handle.
Parameters:
SrfPtPrepHandle: | Handle on the preprocessed surface for multiple
point - curve test, to free.
|
---|
Returned Value:
See Also:
MvarLclDistSrfPoint
MvarDistSrfPointPrep
Keywords:
curve point distance
(mvardist.c:258)
Prototype:
void *MvarDistSrfPointPrep(const CagdSrfStruct *CSrf)
Description:
Given a curve, pre-process it so many curve-distance test can be
efficiently made.
Parameters:
CSrf: | The curve to pre-process for multi-point - curve tests.
|
---|
Returned Value:
void *: A handle on a structure to boost multi-point - curve tests.
|
---|
See Also:
MvarDistSrfPointFree
MvarLclDistSrfPoint
Keywords:
curve point distance
(mvar_dbg.c:207)
Prototype:
void MvarETDbg(const 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 expression tree - to be printed to stderr.
|
---|
Returned Value:
Keywords:
debugging
(mvarextr.c:1585)
Prototype:
int MvarETDomain(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, or -1
to evaluate the domain in all direction (Min and Max should
be vectors of size ET -> Dim). m
|
---|
Returned Value:
int: TRUE for successful computation, FALSE otherwise.
|
---|
See Also:
MvarExprTreeDomain
Keywords:
(mvarextr.c:1765)
Prototype:
int MvarETUpdateConstDegDomains(MvarExprTreeStruct **MVETs, int n)
Description:
Compute the shared domain of all given expression trees and update all
expression trees leafs to that domain, in their constant directions.
Only constant degree directions can be updated. Higher order degree of
similar directions in two different (sub) expression trees must be sharing
the same domain (or otherwise an error will be returned).
Parameters:
MVETs: | vectors of expression tree MVs to update.
|
---|
n: | Size of vector MVETs.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
MvarMVUpdateConstDegDomains
Keywords:
(zrsolver.c:663)
Prototype:
MvarPtStruct *MvarETsZeros0D(MvarZeroPrblmSpecStruct *ZeroProblemSpec)
Description:
Interface function for a MV expression trees solver, 1D solutions.
Computes the simultaneous solution of the given set of NumOfMVs
expression trees constraints. A constraint can be equality or inequality
as prescribed by the Constraints vector.
All multivariates are assumed to be in the same parametric domain size
and dimension.
Parameters:
ZeroProblemSpec: | Specification of the 0D ET problem, which includes the
number of constraints, the multivariates constraints,
constraints types, tolerances, call back functions, etc.
|
---|
Returned Value:
MvarPtStruct *: List of points on the solution set. Dimension of the
points will be the same as the dimensions of all MVETs.
|
---|
See Also:
MvarMVsZeros0D
Keywords:
(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
(mvardist.c:1901)
Prototype:
CagdCrvStruct *MvarEucCrvOffsetOnSrf(const CagdCrvStruct *Crv,
const CagdSrfStruct *Srf,
CagdRType Dist,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumerTol,
int Orient,
int LstSqrFit)
Description:
Computes curve(s) on Srf that are at a Euclidean distance Dist from Crv.
Such curves can be consider Euclidean offset curves of Crv on Srf.
Solves the following set of two equations in three variables:
|| Crv(t) - Srf(u, v) ||^2 = Dist^2.
< Crv(t) - Srf(u, v), Crv'(t) > = 0.
and optionally:
< (Crv'(t) x (Crv(t) - Srf(u, v)), N(u, v) > > 0,
where N(u, v) is the normal field of Srf.
Parameters:
Crv: | Curve in E3 to compute its Euclidean offset curves on Srf,
assumed C^1.
|
---|
Srf: | Surface on which to seek parallel Euclidean offset curve(s)
to Crv.
|
---|
Dist: | Euclidean distance of the offset.
|
---|
Step: | Step size during the numeric tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumerTol: | The numerical tolerance to use.
|
---|
Orient: | +/-1 to request left/right orientation inequality filter,
or 0 to disable.
|
---|
LstSqrFit: | Number of control points to allow in fit, zero to disable.
|
---|
Returned Value:
CagdCrvStruct *: Computed curves in UVT space or NULL if not found.
|
---|
See Also:
MvarSpiralCrvOnSrf
Keywords:
(mvarextr.c:1873)
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:739)
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:1362)
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:2085)
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:2149)
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:2756)
Prototype:
MvarBBoxStruct *MvarExprTreeCompositionDerivBBox(MvarExprTreeStruct *ET,
MvarBBoxStruct *BBox)
Description:
Bounds the derivative of the composition function.
Currently only scalar composition allowed.
Parameters:
ET: | To evaluate its gradient at given Params parametric location.
|
---|
BBox: | Where the result will be written to.
|
---|
Returned Value:
MvarBBoxStruct *: Returns the same result (for convinience).
|
---|
See Also:
MvarExprTreeBBox
Keywords:
(mvcones.c:2171)
Prototype:
CagdBType MvarExprTreeConesOverlap(MvarExprTreeEqnsStruct *Eqns)
Description:
Computes the tangency anti-cones of the set of multivariate constraints,
and returns whether they overlap or not.
Parameters:
Eqns: | The MVETs constraints formated into equations with *
common expressions. *
|
---|
Returned Value:
CagdBType: TRUE if overlap, FALSE if not.
|
---|
See Also:
MVarExprTreeNormalCone
MvarConesOverlapAux
Keywords:
(mvarextr.c:390)
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:1039)
Prototype:
MvarExprTreeStruct *MvarExprTreeCos(MvarExprTreeStruct *Left)
Description:
Cosine of subexpression tree into a new expression tree.
Parameters:
Left: | The expression tree to take cosine of. The sub tree
is used in place, so duplicate before calling this
function if you like to keep the original Left.
|
---|
Returned Value:
MvarExprTreeStruct *: Cosine expression tree, "Cos(Left)".
|
---|
See Also:
Keywords:
(mvarextr.c:947)
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:912)
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:
(zret0d.c:354)
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:
(zret0d.c:310)
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:
(zret0d.c:395)
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:
(mvarextr.c:2318)
Prototype:
CagdRType *MvarExprTreeEval(const MvarExprTreeStruct *ET,
CagdRType *Params,
CagdRType *Pt)
Description:
Evaluate the expression tree at the given parametric location.
Parameters:
ET: | Expression tree to evaluate.
|
---|
Params: | Parameter values to evaluate the expression at.
|
---|
Pt: | Evaluation result.
|
---|
Returned Value:
CagdRType *: Evaluation result.
Note entry zero is reserved to the rational (weight) value.
|
---|
See Also:
MvarExprTreeGrad
Keywords:
(mvarextr.c:2709)
Prototype:
MvarPlaneStruct *MvarExprTreeEvalTanPlane(const MvarExprTreeStruct *ET,
CagdRType *Params)
Description:
Evaluates 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 dynamically. The tangent
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:981)
Prototype:
MvarExprTreeStruct *MvarExprTreeExp(MvarExprTreeStruct *Left)
Description:
Exponent of subexpression tree into a new expression tree.
Parameters:
Left: | The expression tree to exponent. The sub tree
is used in place, so duplicate before calling this
function if you like to keep the original Left.
|
---|
Returned Value:
MvarExprTreeStruct *: Exponentiated expression tree, "e^Left".
|
---|
See Also:
Keywords:
(mvarextr.c:554)
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:482)
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:47)
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:112)
Prototype:
MvarExprTreeStruct *MvarExprTreeFromMV(const MvarMVStruct *MV,
int NewDim,
int StartAxis)
Description:
Converts the input multivariate 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:142)
Prototype:
MvarExprTreeStruct *MvarExprTreeFromMV2(const MvarMVStruct *MV)
Description:
Converts the input multivariate 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:79)
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:2479)
Prototype:
CagdRType *MvarExprTreeGradient(const MvarExprTreeStruct *ET,
CagdRType *Params,
int *Dim,
CagdRType *GradData,
CagdRType *V)
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.
|
---|
GradData: | Storage for gradient evaluation
|
---|
V: | Place to save auxiliary evaluated result. Of size
MVAR_MAX_PT_COORD^2. If the returned gradient vector is of
dimension n, it will be saved in entries [0] to [n-1].
|
---|
Returned Value:
CagdRType *: Evaluation result. Same as V.
|
---|
See Also:
MvarExprTreeEval
Keywords:
(mvarextr.c:2209)
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:337)
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 constructed representation.
|
---|
See Also:
Keywords:
(mvarextr.c:1701)
Prototype:
int MvarExprTreeLeafDomain(MvarExprTreeStruct *ET,
CagdRType *Min,
CagdRType *Max,
int Axis)
Description:
Computes the domain of the expression tree variable (leaf) 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:277)
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:1010)
Prototype:
MvarExprTreeStruct *MvarExprTreeLog(MvarExprTreeStruct *Left)
Description:
Logarithm of subexpression tree into a new expression tree.
Parameters:
Left: | The expression tree to take log of. The sub tree
is used in place, so duplicate before calling this
function if you like to keep the original Left.
|
---|
Returned Value:
MvarExprTreeStruct *: Logarithm'ed expression tree, "Log(Left)".
|
---|
See Also:
Keywords:
(mvarextr.c:842)
Prototype:
MvarExprTreeStruct *MvarExprTreeMergeScalar(MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right)
Description:
Concatenates two scalar sub expression tree into one new expression tree.
Left and Right are assumed to be scalar ET function.
Parameters:
Left, Right: | The two expression trees to merge. 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:807)
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:878)
Prototype:
MvarExprTreeStruct *MvarExprTreeMultScalar(MvarExprTreeStruct *Left,
MvarExprTreeStruct *Right)
Description:
Multiplies two sub expression tree into one new expression tree.
Right is assumed to be a scalar ET function.
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:1128)
Prototype:
MvarExprTreeStruct *MvarExprTreeNPow(MvarExprTreeStruct *Left, int Power)
Description:
Subexpression tree to a power of Power.
Parameters:
Left: | The expression tree to to raise to power. The sub tree
is used in place, so duplicate before calling this
function if you like to keep the original Left.
|
---|
Power: | he power to raise the expression to.
|
---|
Returned Value:
MvarExprTreeStruct *: Square expression tree, "Left^power".
|
---|
See Also:
Keywords:
(mvcones.c:1985)
Prototype:
MvarNormalConeStruct *MvarExprTreeNormalConeMul(
const MvarNormalConeStruct *ConeF,
const MvarNormalConeStruct *ConeG,
const MvarBBoxStruct *BBoxF,
const MvarBBoxStruct *BBoxG,
int Dim)
Description:
Constructs a normal cone of a multiplication.
Parameters:
ConeF: | ormal cone of the first term.
|
---|
ConeG: | ormal cone of the second term.
|
---|
BBoxF: | ounding box of the first term.
|
---|
BBoxG: | ounding box of the second term.
|
---|
Dim: | Dimensions.
|
---|
Returned Value:
MvarNormalConeStruct *: The resulting normal cone.
|
---|
See Also:
MVarExprTreeNormalCone
MvarExprTreeNormalConeSum
MvarExprTreeNormalConeScale
Keywords:
(mvcones.c:2028)
Prototype:
MvarNormalConeStruct *MvarExprTreeNormalConeScale(
const MvarNormalConeStruct *ConeF,
const MvarBBoxStruct *BBoxGPrime,
int Dim)
Description:
Scales normal cone (for composition and multiplication).
Parameters:
ConeF: | Normal cone of the function.
|
---|
BBoxGPrime: | Bounding box of the scale factor.
|
---|
Dim: | Dimensions.
|
---|
Returned Value:
MvarNormalConeStruct *: New scaled cone.
|
---|
See Also:
MVarExprTreeNormalCone
MvarExprTreeNormalConeMul
Keywords:
(mvcones.c:1946)
Prototype:
MvarNormalConeStruct *MvarExprTreeNormalConeSub(
const MvarNormalConeStruct *ConeF,
const MvarNormalConeStruct *ConeG,
int Dim)
Description:
Constructs a normal cone of a difference.
Parameters:
ConeF: | ormal cone of the minuend.
|
---|
ConeG: | ormal cone of the subtrahend.
|
---|
Dim: | Dimensions.
|
---|
Returned Value:
MvarNormalConeStruct *: The resulting normal cone.
|
---|
See Also:
MVarExprTreeNormalCone
MvarExprTreeNormalConeSum
Keywords:
(mvcones.c:1758)
Prototype:
MvarNormalConeStruct *MvarExprTreeNormalConeSum(
const MvarNormalConeStruct *ConeF,
const MvarNormalConeStruct *ConeG,
int Dim)
Description:
Constructs a normal cone of a sum.
Parameters:
ConeF: | ormal cone of the the first summand.
|
---|
ConeG: | ormal cone of the second summand.
|
---|
Dim: | Dimensions.
|
---|
Returned Value:
MvarNormalConeStruct *: The resulting normal cone.
|
---|
See Also:
MVarExprTreeNormalCone
HyperplaneOrthoSystem
Keywords:
(mvarextr.c:1928)
Prototype:
void MvarExprTreePrintInfo(const MvarExprTreeStruct *ET,
CagdBType CommonExprIdx,
CagdBType PrintMVInfo,
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.
|
---|
PrintMVInfo: | TRUE to print information on MV leafs.
|
---|
PrintFunc: | Call back function to print a string.
|
---|
Returned Value:
See Also:
Keywords:
(mvarextr.c:1159)
Prototype:
MvarExprTreeStruct *MvarExprTreeRecip(MvarExprTreeStruct *Left)
Description:
Reciprocation of subexpression tree into a new expression tree.
Parameters:
Left: | The expression tree to reciprocate. The sub tree
is used in place, so duplicate before calling this
function if you like to keep the original Left.
|
---|
Returned Value:
MvarExprTreeStruct *: Reciprocation expression tree, "1.0/Left".
|
---|
See Also:
Keywords:
(mvarextr.c:580)
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:1097)
Prototype:
MvarExprTreeStruct *MvarExprTreeSqr(MvarExprTreeStruct *Left)
Description:
Square of subexpression tree into a new expression tree.
Parameters:
Left: | The expression tree to take square of. The sub tree
is used in place, so duplicate before calling this
function if you like to keep the original Left.
|
---|
Returned Value:
MvarExprTreeStruct *: Square expression tree, "Square(Left)".
|
---|
See Also:
Keywords:
(mvarextr.c:1068)
Prototype:
MvarExprTreeStruct *MvarExprTreeSqrt(MvarExprTreeStruct *Left)
Description:
Square root of subexpression tree into a new expression tree.
Parameters:
Left: | The expression tree to take square root of. The sub tree
is used in place, so duplicate before calling this
function if you like to keep the original Left.
|
---|
Returned Value:
MvarExprTreeStruct *: Sqrt expression tree, "Sqrt(Left)".
|
---|
See Also:
Keywords:
(mvarextr.c:773)
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:1194)
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 successful, FALSE otherwise.
|
---|
See Also:
Keywords:
(mvarextr.c:164)
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 *: Multivariate representing the expression tree.
|
---|
See Also:
Keywords:
(zret0d.c:1162)
Prototype:
int MvarExprTreeZerosCnvrtBezier2MVs(int Bezier2MVs)
Description:
Sets the way expression trees of Bezier MVs are treated. If TRUE, the
ETs are converted into MVs and the regular MV zero solver is invoked. If
FALSE, the ETs are subdivided all the way to SUbdivTol.
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:
(zret0d.c:1132)
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:637)
Prototype:
CagdBType MvarExprTreesSame(const MvarExprTreeStruct *ET1,
const MvarExprTreeStruct *ET2,
CagdRType Eps)
Description:
A comparison function to test for similarity (up to Eps) two expression
trees.
Parameters:
ET1, ET2: | Two expression trees to compare.
|
---|
Eps: | Tolerance of approximation.
|
---|
Returned Value:
CagdBType: TRUE if the same ETs (up to Eps), FALSE otherwise.
|
---|
See Also:
Keywords:
(mvarextr.c:698)
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:
(mvar_ftl.c:57)
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
(selfintr.c:1978)
Prototype:
MvarPtStruct *MvarFindSrfMiterPoints(const CagdSrfStruct *Srf,
int Axis,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType Euclidean)
Description:
Given a surface S(u,v), compute the singular or miter points, the
points on the self-intersection curves of the surface that changes the
normal direction abruptly. Specifically, it finds location where the
normal (or Jacobian) is vanishing as the solutions of one of three
systems of equations, using the multivariate solvers -
Nx(u, v) = Ny(u, v) = 0
or
Ny(u, v) = Nz(u, v) = 0
or
Nz(u, v) = Nx(u, v) = 0
where Ni(u, v) is i-th coordinate (x, y or z) of the unnormalized
normal of the surface. Miter points satisfy all the three systems
simultaneously.
Parameters:
Srf: | Surface to compute miter points.
|
---|
Axis: | System to compute the miter points.
If Axis = 1, solve Nx(u, v) = Ny(u, v) = 0.
If Axis = 2, solve Ny(u, v) = Nz(u, v) = 0.
If Axis = 3, solve Nz(u, v) = Nx(u, v) = 0.
If Axis = 0, find the miter points satisfying all three
systems.
|
---|
SubdivTol: | Subdivion tolerance used in the solver.
|
---|
NumericTol: | Numeric tolerance used in the solver.
|
---|
Euclidean: | If FALSE, find the UV coordinates of miter points.
Otherwise, compute the XYZ coordinates.
|
---|
Returned Value:
MvarPtStruct *: A list of miter points satisfying the constraint
equations.
|
---|
See Also:
MvarFindSrfMiterPointsPartial
SymbSrfNormalSrf
Keywords:
Surface self-intersection
Miter points
singularities
Jacobian
(selfintr.c:1849)
Prototype:
MvarPtStruct *MvarFindSrfMiterPointsPartial(const CagdSrfStruct *Srf,
const CagdSrfStruct *NrmlSrf,
int Axis1,
int Axis2,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType UVDiffTol,
CagdBType Euclidean)
Description:
Given a surface S(u,v), compute the singular or miter points, the
points on the self-intersection curves of the surface that changes the
normal direction abruptly. Specifically, it finds location where the
normal (or Jacobian) is vanishing as the solutions of one of three
systems of equations, using the multivariate solvers:
Nx(u, v) = Ny(u, v) = 0
or
Ny(u, v) = Nz(u, v) = 0
or
Nz(u, v) = Nx(u, v) = 0
where Ni(u, v) is i-th coordinate (x, y or z) of the unnormalized
normal of the surface. Miter points satisfy all the three systems
simultaneously.
Parameters:
Srf: | Surface to compute miter points.
|
---|
NrmlSrf: | Normal surface. If NULL, then compute the surface inside
this routine.
|
---|
Axis1: | First axis of normal equation in the system (1-3).
|
---|
Axis2: | Second axis of normal equation in the system (1-3).
|
---|
SubdivTol: | Subdivion tolerance used in the solver.
|
---|
NumericTol: | Numeric tolerance used in the solver.
|
---|
UVDiffTol: | If positive, merge the solution points within the
tolerance.
|
---|
Euclidean: | If FALSE, find the UV coordinates of miter points.
Otherwise, compute the XYZ coordinates.
|
---|
Returned Value:
MvarPtStruct *: A list of miter points satisfying the constraint
equations.
|
---|
See Also:
MVFindMiterPoints
SymbSrfNormalSrf
Keywords:
Surface self-intersection
Miter points
singularities
Jacobian
(mvaccess.c:480)
Prototype:
MvarMVStruct **MvarFlecnodalCrvsCreateMVCnstrnts(const CagdSrfStruct *CSrf)
Description:
Computes the MV constraints of flecnodal curves on surface 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 (MV constraints of the) flecnodals for.
|
---|
Returned Value:
MvarMVStruct **: The set of 3 constraints in 4 unknowns to derive the
flecnodal curves of CSrf.
|
---|
See Also:
SymbSrfGaussCurvature
UserSrfTopoAspectGraph
SymbEvalSrfAsympDir
MvarSrfSilhInflections
MvarSrfFlecnodalCrvs
Keywords:
(mvar_pll.c:270)
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:1543)
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:1099)
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:1151)
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:155)
Prototype:
MvarPtStruct *MvarHFDistAntipodalCrvCrvC1(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Epsilon)
Description:
Computes the antipodal points of the given two curves by solving:
< C1(t) - C2(r), C1'(t) > = 0,
< C1(t) - C2(r), C2'(r) > = 0.
< C1(t) - C2O(r), C1'(t) > = 0, (Only during subdivision step)
< C1(t) - C2O(r), C2'(r) > = 0, (Only during subdivision step)
where C2O is an offset curve of C2 by amount larger than subdivison tol.
The last two equations are used to purge intersection locations as they
cause the first two equations to vanish.
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 t & r coefficients.
|
---|
See Also:
MvarCrvAntipodalPoints
MvarCntctTangentialCrvCrvC1
Keywords:
(hasdrf3d.c:139)
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:404)
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:582)
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:1051)
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:864)
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:293)
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:331)
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:653)
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:597)
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:350)
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:615)
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:43)
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:
MvarDistSrfPoint
Keywords:
(hasdrf3d.c:364)
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:819)
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:97)
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:86)
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:
MvarLclDistSrfPoint
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:901)
Prototype:
CagdCrvStruct *MvarInverseCrvOnSrfProj(const CagdCrvStruct *E3Crv,
const CagdSrfStruct *Srf,
void *SrfPrepHandle,
CagdRType ApproxTol,
const CagdRType *PrevUVPt,
int *RedundantSol)
Description:
Compute the inverse projection of a Euclidean curve on surface to the UV
values of the surface.
Parameters:
E3Crv: | E3 Curve to compute its inverse projection onto Srf.
If none linear, curve is approximated as a piecewise linear
curve first using ApproxTol.
|
---|
Srf: | The Surface E3Crv is on.
|
---|
SrfPrepHandle: | Hold pre-processed data by MvarInverseCrvOnSrfProjPrep
to speed up the crv on srf projections.
See MvarInverseCrvOnSrfProjPrep/MvarInverseCrvOnSrfProjFree.
|
---|
ApproxTol: | Tolerance of piecewise linear approximation if so needed.
|
---|
PrevUVPt: | Optional parameter of previous UV location from the end
location of last UV crv. NULL to ignore.
|
---|
RedundantSol: | ill be set to true if solution was redundant - I.e. on a
shared boundary seam. NULL to ignore.
|
---|
Returned Value:
CagdCrvStruct *: The UV curve representing E3Crv on Srf.
|
---|
See Also:
MvarInverseCrvOnSrfProjPrep
MvarInverseCrvOnSrfProjFree
MvarLclDistSrfPoint
MvarDistSrfPoint
MvarMVOrthoCrvProjOnSrf
MvarProjCrvOnSrf
Keywords:
distance
inverse
projection
(mvardist.c:814)
Prototype:
void MvarInverseCrvOnSrfProjFree(void *SrfPrepHandle)
Description:
Free the prepared data structure by MvarInverseCrvOnSrfProjPrep.
Parameters:
SrfPrepHandle: | Prep data struct by MvarInverseCrvOnSrfProjPrep to free.
|
---|
Returned Value:
See Also:
MvarInverseCrvOnSrfProj
MvarInverseCrvOnSrfProjPrep
Keywords:
distance
inverse
projection
(mvardist.c:785)
Prototype:
void *MvarInverseCrvOnSrfProjPrep(const CagdSrfStruct *Srf)
Description:
Do the necessary preparations for the inverse projection of a Euclidean
curve on surface to the UV values of the surface.
Parameters:
Srf: | The Surface to prepare curve projection onto.
|
---|
Returned Value:
void *: A structure holding the prepared data.
|
---|
See Also:
MvarInverseCrvOnSrfProj
MvarInverseCrvOnSrfProjFree
Keywords:
distance
inverse
projection
(mvar_pll.c:1280)
Prototype:
MvarTriangleStruct *MvarIrit2DTrTo2DMVTrs(IPObjectStruct *ObjTrs)
Description:
Converts a list of irit planar triangles (given as polygon objects)
into a list of Mvar planar (2D) triangle structures.
Parameters:
Returned Value:
MvarTriangleStruct *: A list triangles.
|
---|
See Also:
MvarCnvrtMVTrsToIritPolygons
MvarCnvrtMVPolysToIritPolys
Keywords:
(mvardist.c:535)
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:361)
Prototype:
MvarPtStruct *MvarLclDistSrfPoint(const CagdSrfStruct *CSrf,
void *SrfPtPrepHandle,
const CagdPType Pt,
MvarPtStruct *InitialSol,
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.
|
---|
SrfPtPrepHandle: | If not NULL, holds pre-processed data to speed up the
surface - points distance computations, for multiple
surface - point tests (same surface for all points).
See MvarDistSrfPointPrep and MvarDistSrfPointFree.
|
---|
Pt: | The point to find the extreme distance locations from Srf.
|
---|
InitialSol: | ptional initial guess for a solution in which case we aim
to improve numerically to within NumericTol. If successful,
this solution is returned (in place here and the return
value). Otherwise, the full solver is invoked.
|
---|
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:
MvarDistSrfPointPrep
MvarDistSrfPointFree
Keywords:
surface point distance
(mvar_int.c:280)
Prototype:
CagdRType MvarLineFitToPts(const MvarVecStruct *VecList,
MvarVecStruct *LineDir,
MvarVecStruct *LinePos)
Description:
Given set of vecs, VecList, fits a line using least squares fit to them.
Parameters:
VecList: | List of vectors to interpolate/least square approximate.
|
---|
LineDir: | A unit vector of the line.
|
---|
LinePos: | A point on the computed line.
|
---|
Returned Value:
CagdRType: Average distance between a vector and the fitted line,
or IRIT_INFNTY if failed.
|
---|
See Also:
CagdLineFitToPts
Keywords:
interpolation
least square approximation
(mvar_vec.c:711)
Prototype:
MvarVecStruct *MvarLinePlaneInter(const MvarVecStruct *P,
const MvarVecStruct *V,
const MvarPlaneStruct *Pln,
CagdRType *Param)
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.
|
---|
Param: | Will be updated with the parameter along which the intersection
has occurred, as Inter = P + V * t.
|
---|
Returned Value:
MvarVecStruct *: The intersection point.
|
---|
Keywords:
(lnsrfdst.c:283)
Prototype:
MvarPtStruct *MvarLineSrfInter(const CagdPType LinePt,
const CagdVType LineDir,
const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes intersection points of a surface and a line specified as
intersection of two implicitly defined planes.
Parameters:
LinePt, LineDir: | Line specification.
|
---|
Srf: | Surface to intersect.
|
---|
SubdivTol: | Subdivision tolerance of computation.
|
---|
NumericTol: | Numerical tolerance of computation.
|
---|
Returned Value:
MvarPtStruct *: List of intersection points as surface parameters (u,v).
|
---|
See Also:
MvarCrvSrfInter
Keywords:
(ms_circ.c:232)
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:64)
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:
(mvar_sym.c:38)
Prototype:
MvarMVStruct *MvarMVAdd(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariates - add them coordinate-wise.
The two multivariates are promoted to same point type before the
operation can take place. Furthermore, order and continuity are
matched as well.
Parameters:
MV1, MV2: | Two multivariate to add up coordinate-wise.
|
---|
Returned Value:
MvarMVStruct *: The summation of MV1 + MV2 coordinate-wise.
|
---|
See Also:
MvarMVSub
MvarMeshAddSub
MvarMVMult
Keywords:
addition
symbolic computation
multivariates
(mvar_aux.c:284)
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:385)
Prototype:
int MvarMVAuxDomainSlotGet(const MvarMVStruct *MV,
CagdRType *Min,
CagdRType *Max,
int Dir)
Description:
Gets one aux. domain range in the given Direction. The Min/Max arrays
are assumed to be of sufficiently large enough space to hold all
dimensions, if Axis == -1.
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:252)
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:322)
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:352)
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:2260)
Prototype:
CagdRType MvarMVAvgArcLenMesh(const MvarMVStruct *MV, MvarMVDirType Dir)
Description:
Computes the average arc length of the mesh of MV in direction Dir.
Parameters:
MV: | Multi-Variate to compute its mesh's arc-length in Dir.
|
---|
Dir: | Direction of arc length estimation.
|
---|
Returned Value:
CagdRType: Avarage arc-length of the mesh of MV in directuion Dir.
|
---|
See Also:
MvarMVDerive
CagdCrvArcLenPoly
Keywords:
multi-variates
(mvarbbox.c:41)
Prototype:
MvarBBoxStruct *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:
MvarBBoxStruct *: The computed BBox. Same as the BBox parameter.
|
---|
Keywords:
bbox
bounding box
(mvtangnt.c:1180)
Prototype:
MvarPtStruct *MvarMVBiTangentLine(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes the bi-tangent line of two freeform curves. If Crv1 == Crv2,
the self bi-tangent is computed.
Parameters:
Crv1, Crv2: | The 2 curves to compute their bi-tangent lines for.
If Crv1 == Crv2, the self bi-tangent is 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 *: Pairs of parameter values on both curves, each pair
defines a single bi-tangent.
|
---|
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents
MvarMVBiTangents2
MvarMVTriTangentLineCreateMVs
MvarMVTriTangentLine
Keywords:
bi-tangent
(mvtangnt.c:65)
Prototype:
MvarPolylineStruct *MvarMVBiTangents(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 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
Parameters:
CMV1, CMV2: | The two multivariates to compute the bi-tangents for.
|
---|
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:
MvarPolylineStruct *: Pllns on the bi-tangents of the two multivariates.
|
---|
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents2
MvarMVTriTangents
MvarMVTriTangentLine
Keywords:
bi-tangent
(mvar_der.c:902)
Prototype:
MvarMVGradientStruct *MvarMVBoundGradient(const MvarMVStruct *MV)
Description:
Provides a set of vectors that bounds the gradient function of given MV
Parameters:
MV: | Input MV function to compute bounds on its gradient.
|
---|
Returned Value:
MvarMVGradientStruct *: Holding the set of vectors bounding the
gradient of MV in the MVGrad slot.
|
---|
See Also:
MvarMVDerive
MvarMVFreeGradient
MvarMVPrepGradient
MvarMVEvalGradient
MvarMVEvalGradient2
Keywords:
(mvcompos.c:132)
Prototype:
MvarMVStruct *MvarMVCompose(const MvarMVStruct *TargetMV,
const MvarMVStruct *ReParamMV,
const int *DimMapping,
CagdBType DoMerge)
Description:
The main interface function for composition of multivariates. Given two
multivariates TargetMV and ReParamMV, it returns their composition
TargetMV(ReParamMV(t0,...,tn)) . The composition is possible if the range
of the reparametrization multivariate is contained in a patch of the
target multivariate that doesn't have internal knots. If the
reparametrization multivariate is B-spline, it is subdivided at the knots,
and the resulting composed multivariates are either merged into a single
multivariate, or returned as a linked list, depending on the flag DoMerge.
Parameters:
TargetMV: | The target multivariate.
|
---|
ReParamMV: | The reparametrization multivariate.
|
---|
DimMapping: | he mapping from ReParamMV's range dimensions to TargetMV's
domain dimensions. Of length of dimension of range of
ReParamMV and holds indices into the domain of TargetMV.
If NULLm assumes the trivial mapping - range of ReParamMV
is mapped to the domain of TargetMV.
|
---|
DoMerge: | A flag indicating whether to merge the results into a single
multivariate (applies if the reparametrization is B-spline,
and was subdivided).
|
---|
Returned Value:
MvarMVStruct *: The composed multivariate TargetMV(ReParamMV(t0,...,tn))
or a list of composed multivariates.
|
---|
See Also:
MvarComputeMVPowers
MvarGenerateBspBasisMVs
TrivComposeTVCrv
TrivComposeTVCrv
SymbComposeCrvCrv
SymbComposeSrfCrv
SymbComposeSrfSrf
Keywords:
composition
(mvcomps2.c:1580)
Prototype:
IPObjectStruct *MvarMVCompose2(const MvarMVStruct *MVMapping,
const MvarMVStruct *MVToCompose,
int HandleCrossKVLines)
Description:
Compose two multivariate functions: MVMapping(MVToCompose). The function
chooses the most general type of composition given the dimensions of the
parameters.
Parameters:
MVMapping: | The mapping multivariate function.
|
---|
MVToCompose: | The multivariate function to compose.
|
---|
HandleCrossKVLines: | henever possible, TRUE to divide first Obj at all
locations it crosses knot lines in MVMapping, and
treat the crossing of knot lines correctly.
|
---|
Returned Value:
IPObjectStruct *: The composed function.
|
---|
See Also:
MvarMVCompose
MvarMVCompose3
Keywords:
composition
multivariates
(mvcomps2.c:1431)
Prototype:
IPObjectStruct *MvarMVCompose3(const IPObjectStruct *MappingFunction,
const IPObjectStruct *Obj,
int HandleCrossKVLines)
Description:
Compose two geometric structures: MappingFunction(Obj).
The function chooses the most general type of composition (including
knot-crossing), given the types of the parameters.
Parameters:
MappingFunction: | The geometry representing the mapping function.
|
---|
Obj: | The geometry to compose.
|
---|
HandleCrossKVLines: | henever possible, TRUE to divide first Obj at all
locations it crosses knot lines in MVMapping, and
treat the crossing of knot lines correctly.
|
---|
Returned Value:
IPObjectStruct *: The composed geometry.
|
---|
See Also:
MvarMVCompose
MvarMVCompose2
Keywords:
composition
multivariates
(mvcones.c:1703)
Prototype:
CagdBType MvarMVConesOverlap(MvarMVStruct **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 tangency anti-cones.
|
---|
NumOfZeroMVs: | Size of the vector MVs.
|
---|
Returned Value:
CagdBType: TRUE if overlap, FALSE if not.
|
---|
See Also:
MVarMVNormalCone
MvarConesOverlapAux
Keywords:
(mvar_gen.c:301)
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:428)
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
(mvarbbox.c:124)
Prototype:
void MvarMVCornersMinMax(const MvarMVStruct *MV,
int Coord,
CagdRType *Min,
CagdRType *Max)
Description:
Computes the minimum and maximum values of the control points at the
corners of the control mesh of a multivariate. Can be applied to a
specific coordinate or to all the coordinates of the multivariate.
Parameters:
MV: | In which to find the minimum and maximum at the corners of
the control mesh.
|
---|
Coord: | The coordinate of the minimum/maximum values that need to be
found, or -1 for all coordinates.
|
---|
Min, Max: | Output parameters. Pointers into which the minimum and
maximum values are written. If more than one coordinate is
requested, then Min and Max must be arrays of sufficient
lengths for all the coordinates.
|
---|
Returned Value:
See Also:
MvarMVMinMax
Keywords:
(mvar_sym.c:647)
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
MvarMVCrossProdZ
Keywords:
product
cross product
multivariates
mbolic computation
(mvar_sym.c:744)
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
MvarMVCrossProdZ
Keywords:
product
cross product
multivariates
mbolic computation
(mvar_sym.c:602)
Prototype:
MvarMVStruct *MvarMVCrossProdZ(const MvarMVStruct *MV1,
const MvarMVStruct *MV2)
Description:
Given two multivariates - computes the Z component of the cross product.
Returned multivariate is a scalar multivariate representing the Z
component of the cross product of the two given multivariates.
Parameters:
MV1, MV2: | Two multivariate to multiply and compute a Z component of
cross product for.
|
---|
Returned Value:
MvarMVStruct *: A scalar multivariate representing the Z component of
the cross product of MV1 x MV2.
|
---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd
MvarMVCrossProd2D
Keywords:
product
cross product
multivariates
symbolic computation
(zrdcm_main.c:2695)
Prototype:
MvarMVDDecompositionModeType MvarMVDSetDecompositionMode(
MvarMVDDecompositionModeType m)
Description:
Sets the decomposition mode used by the multivariate solver. The possible
decomposition modes are:
MVAR_MVD_NO_DECOMPOSITION - no decomposition
MVAR_MVD_DECOMPOSITION_COMPOSITION - decomposition and propagation of the
partial solutions using functional
composition.
MVAR_MVD_DECOMPOSITION_POINT_TRACING - decomposition and point-by-point
tracing of the complete solution
from the solution to the first
univariate problem. THIS MODE IS
UNTESTES AND UNRECOMMENDED FOR USE
Parameters:
m: | The new decomposition mode.
|
---|
Returned Value:
MvarMVDDecompositionModeType: The previous decomposition mode.
|
---|
Keywords:
MvarZeroSolverWithDecomposition
(mvarrais.c:323)
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:358)
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:440)
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:34)
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:228)
Prototype:
MvarMVStruct *MvarMVDegreeRaiseN2(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
MvarMVDegreeRaiseN
Keywords:
degree raising
(mvar_der.c:33)
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.
|
---|
See Also:
MvarMVDeriveBound
MvarBzrMVDerive
MvarBspMVDerive
Keywords:
multi-variates
(mvar_der.c:483)
Prototype:
void MvarMVDeriveAllBounds(const MvarMVStruct *MV, CagdMinMaxType *MinMax)
Description:
Given a multi-variate, computes its partial derivative multi-variate in
all directions.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
MinMax: | Bounds on the derivative values of MV in all directions.
|
---|
Returned Value:
See Also:
MvarMVDerive
MvarBzrMVDeriveBound
MvarBspMVDeriveBound
Keywords:
multi-variates
(mvar_der.c:313)
Prototype:
void MvarMVDeriveBound(const MvarMVStruct *MV,
MvarMVDirType Dir,
CagdRType MinMax[2])
Description:
Given a multi-variate, computes its partial derivative multi-variate in
direction Dir.
Parameters:
MV: | Multi-Variate to differentiate.
|
---|
Dir: | Direction of differentiation.
|
---|
MinMax: | Bounds on the derivative values of MV in direction Dir.
|
---|
Returned Value:
See Also:
MvarMVDerive
MvarBzrMVDeriveBound
MvarBspMVDeriveBound
Keywords:
multi-variates
(mvar_det.c:296)
Prototype:
MvarMVStruct *MvarMVDeterminant(const MvarMVStruct * const *MVsMatrix,
int MatSize)
Description:
Computes the expression of a determinant of MVs, recursively.
Expansion is always using the first row. Does not check for a better
option, such as a row with more zeros, etc. (Existing zeros means the zero
function as a multivariate).
Parameters:
MVsMatrix: | The matrix of MVs, as a linear array, with the following
double index to linear index convention -
[i][j] <----> [(i - 1) * MatSize + (j - 1)],
where i, j = 1, 2, ..., MatSize (double index as in the
usual linear algebra convention).
|
---|
MatSize: | The size in each of the dimensions of the square MVs matrix.
|
---|
Returned Value:
MvarMVStruct *: A scalar field representing the determinant computation.
|
---|
See Also:
MvarMVDeterminant2
Keywords:
determinant
(mvar_det.c:42)
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:81)
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:138)
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:220)
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:603)
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
MvarProjCrvOnSrf2
Keywords:
curve surface distance
(mvardist.c:698)
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:49)
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: | Multivariate 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:147)
Prototype:
void MvarMVDomainAlloc(const 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:174)
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:494)
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
(mvar_der.c:809)
Prototype:
CagdRType *MvarMVEvalGradient(const MvarMVGradientStruct *MVGrad,
const CagdRType *Params,
int Axis,
CagdRType *Grad)
Description:
Evaluates the gradient function at the given parametric 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.
|
---|
Grad: | The gradient at Params.
|
---|
Returned Value:
CagdRType *: The gradient at Params.
|
---|
See Also:
MvarMVDerive
MvarMVFreeGradient
MvarMVPrepGradient
MvarMVEvalGradient2
MvarMVBoundGradient
Keywords:
(mvareval.c:559)
Prototype:
CagdRType *MvarMVEvalGradient2(const MvarMVStruct *MV,
const CagdRType *Params,
int *HasOrig,
CagdRType *Grad)
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.
|
---|
Grad: | A vector holding all the coefficients of all components
of the multi-variate's point type.
|
---|
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). Same as Grad.
|
---|
See Also:
MvarMVEval
MvarMVEvalTanPlane
MvarMVEvalGradient
Keywords:
evaluation
multi-variates
gradient
(mvareval.c:517)
Prototype:
CagdRType *MvarMVEvalMalloc(const MvarMVStruct *MV, const 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:
MvarMVEvalGradient
MvarMVEvalGradient2
MvarMVEvalToData
Keywords:
evaluation
multi-variates
(mvareval.c:642)
Prototype:
MvarPlaneStruct *MvarMVEvalTanPlane(const MvarMVStruct *MV,
const 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
(mvareval.c:43)
Prototype:
void MvarMVEvalToData(const MvarMVStruct *MV,
const CagdRType *Params,
CagdRType *Pt)
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.
|
---|
Pt: | 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).
|
---|
Returned Value:
See Also:
MvarMVEvalGradient
MvarMVEvalGradient2
MvarMVEvalMalloc
Keywords:
evaluation
multi-variates
(mvar_gen.c:1891)
Prototype:
MvarMVStruct *MvarMVExtension(const MvarMVStruct *OrigMV,
const CagdBType *ExtMins,
const CagdBType *ExtMaxs,
const CagdRType *Epsilons)
Description:
Extension of a B-spline muiltivariate, in any of the 2 * Dim optional
directions of the Dim dimensional domain. The extension is such that
the image coincides with the original image over the original domain.
Assumes open end conditions (in all knot vectors).
OrigNV can have "ExtntSclU", "ExtntSclV" and/or "ExtntSclW" (or for
all axes "ExtndScl") real attributes to scale the extension in Euclidean
space (for same Epsilon parametric extension).
Parameters:
OrigMV: | The multivariate to be extended.
|
---|
ExtMins: | A vector of Dim Boolean values to set the extension
directions in the Min side. Direction i is extended in its
Min side if ExtMins[i] is TRUE, or if ExtMins is NULL.
|
---|
ExtMaxs: | A vector of Dim Boolean values to set the extension
directions in the Max side. Direction i is extended in its
Max side if ExtMaxs[i] is TRUE, or if ExtMaxs is NULL.
|
---|
Epsilons: | A vector of real numbers representing the length of the
extension in each direction (both Min and Max).
|
---|
Returned Value:
MvarMVStruct *: The new extended MV.
|
---|
See Also:
BspCrvExtensionOneSide
BspCrvExtraKnotRmv
BspCrvExtension
BspSrfExtension
Keywords:
(mvar_sym.c:1156)
Prototype:
MvarMVStruct *MvarMVFactorRMinusT(const MvarMVStruct *MV, int RIdx, int TIdx)
Description:
Removes a (r - t) factor from the given scalar multivariate which
is assumed to be of dimension greater than 3. The r, t parameters are
the RIdx and TIdx parameters of the multivariate.
Parameters:
MV: | multivariate to factor out (r - t) term from.
|
---|
RIdx, TIdx: | Indices of the r and t axes inside MV.
|
---|
Returned Value:
MvarMVStruct *: Factored out multivariate.
|
---|
See Also:
BspSrfFactorUMinusV
BzrSrfFactorUMinusV
MvarMVFactorUMinusV
Keywords:
(mvar_sym.c:1213)
Prototype:
MvarMVStruct *MvarMVFactorUMinusV(const MvarMVStruct *MV)
Description:
Removes a (u - v) factor from the given scalar multivariate which
is assumed to be of dimension 2 or more. The u, v parameters are
the first and second parameters of the multivariate.
Parameters:
MV: | Multivariate to factor out (u - v) term from.
|
---|
Returned Value:
MvarMVStruct *: Factored out multivariate.
|
---|
See Also:
BspSrfFactorUMinusV
BzrSrfFactorUMinusV
MvarMVFactorRMinusT
Keywords:
(mvar_gen.c:460)
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:763)
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:523)
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:695)
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:877)
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:591)
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:289)
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
(mvarbbox.c:206)
Prototype:
int MvarMVIsConstant(const MvarMVStruct *MV, IrtRType Eps)
Description:
Checks if this MV is a constant multi-variate freeform function.
Parameters:
MV: | To verify if constant or not..
|
---|
Eps: | Tolerance of equality allowed.
|
---|
Returned Value:
int: TRUE if indeed a constant(s) valued multi-variate.
|
---|
Keywords:
bbox
bounding box
(mvar_gen.c:2170)
Prototype:
CagdBType MvarMVIsMeshC0DiscontAt(const MvarMVStruct *MV,
int Dir,
CagdRType t)
Description:
Examines the mesh at given parametric location for a C0 discontinuity.
Parameters:
MV: | Multivariate to examine for C0 discontinuity.
|
---|
Dir: | Parametric direction to examine at.
|
---|
t: | Parameter value to examine at.
|
---|
Returned Value:
CagdBType: TRUE if MV has a C0 discontinuity at parameter t in
direction Dir, FALSE otherwise.
|
---|
See Also:
MvarMVMeshC0Continuous
MvarMVKnotHasC0Discont
Keywords:
(mvar_gen.c:2313)
Prototype:
CagdBType MvarMVIsMeshC1DiscontAt(const MvarMVStruct *MV,
int Dir,
CagdRType t)
Description:
Examines the mesh at given parametric location for a C1 discontinuity.
Parameters:
MV: | Multivariate to examine for C1 discontinuity.
|
---|
Dir: | Parametric direction to examine at.
|
---|
t: | Parameter value to examine at.
|
---|
Returned Value:
CagdBType: TRUE if MV has a C1 discontinuity at parameter t in
direction Dir, FALSE otherwise.
|
---|
See Also:
MvarMVMeshC1Continuous
MvarMVKnotHasC1Discont
Keywords:
(mvar_gen.c:2067)
Prototype:
CagdBType MvarMVKnotHasC0Discont(const MvarMVStruct *MV,
int *Dir,
CagdRType *t)
Description:
Searches the given MV for parameter locations that are C0 discont, based
on the given knot vector of the MV.
If found update Dir and t to this finding and returns TRUE.
Parameters:
MV: | The multivariate.
|
---|
Dir: | If a non-negative value, only that direction will be
checked for C0 discontinuity.
If a negative value, all directions in the domain will
be searched for a C0 discont, if has one. The detected
direction will be returned here if found.
|
---|
t: | The parameter at the C0 discont. if has one.
|
---|
Returned Value:
CagdBType: TRUE if found a C0 discont., FALSE otherwise.
|
---|
See Also:
MvarMVMeshC0Continuous
MvarMVIsMeshC0DiscontAt
Keywords:
(mvar_gen.c:2207)
Prototype:
CagdBType MvarMVKnotHasC1Discont(const MvarMVStruct *MV,
int *Dir,
CagdRType *t)
Description:
Searches the given MV for parameter locations that are C1 discont, based
on the given knot vector of the MV.
If found update Dir and t to this finding and returns TRUE.
Parameters:
MV: | The multivariate.
|
---|
Dir: | If a non-negative value, only that direction will be
checked for C0 discontinuity.
If a negative value, all directions in the domain will
be searched for a C0 discont, if has one. The detected
direction will be returned here if found.
|
---|
t: | The parameter at the C1 discont. if has one.
|
---|
Returned Value:
CagdBType: TRUE if found a C1 discont., FALSE otherwise.
|
---|
See Also:
MvarMVMeshC1Continuous
MvarMVIsMeshC1DiscontAt
Keywords:
(mvarbbox.c:237)
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:1537)
Prototype:
MvarMVStruct *MvarMVListMatTransform(const MvarMVStruct *MVs, CagdMType Mat)
Description:
Transforms the given list of MVs as specified by homogeneous matrix
Mat.
Parameters:
MVs: | To be transformed.
|
---|
Mat: | Defining the transformation.
|
---|
Returned Value:
MvarMVStruct *: Transformed MVs.
|
---|
See Also:
MvarMVMatTransform
MvarMVMatTransform2
CagdSrfListMatTransform
Keywords:
scaling
rotation
translation
transformations
(mvarbbox.c:821)
Prototype:
void MvarMVListPreciseBBox(const MvarMVStruct *MVs,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a list of multi-variate freeform
function.
Parameters:
MVs: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MvarMVListBBox
MvarMVPreciseBBox
Keywords:
bbox
bounding box
(mvar_gen.c:1490)
Prototype:
MvarMVStruct *MvarMVMatTransform(const MvarMVStruct *MV, CagdMType Mat)
Description:
Transforms the given MV as specified by homogeneous matrix Mat.
Parameters:
MV: | Multi-variate to transform.
|
---|
Mat: | Homogeneous transformation to apply to MV.
|
---|
Returned Value:
MvarMVStruct *: Transformed MV.
|
---|
See Also:
MvarMVListMatTransform
MvarMVMatTransform2
CagdSrfListMatTransform
Keywords:
multi-variates
(mvar_gen.c:1567)
Prototype:
void MvarMVMatTransform2(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:
See Also:
MvarMVMatTransform
MvarMVListMatTransform
CagdSrfListMatTransform
Keywords:
multi-variates
(mvar_sym.c:1068)
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_gen.c:2121)
Prototype:
CagdBType MvarMVMeshC0Continuous(const MvarMVStruct *MV,
int Dir,
int Idx)
Description:
Examine the mesh of the given surface across direction Dir in index
of mesh Index for a real discontinuity in the mesh.
This index will typically be for a knot multiplicity potential discont.
Parameters:
MV: | To examine its potential discontinuity across Dir.
|
---|
Dir: | Direction to examine the discontinuity across.
|
---|
Idx: | Index where to examine the discontinuity.
|
---|
Returned Value:
CagdBType: TRUE if continuous there, FALSE otherwise.
|
---|
See Also:
MvarMVKnotHasC0Discont
MvarMVIsMeshC0DiscontAt
Keywords:
(mvar_gen.c:2260)
Prototype:
CagdBType MvarMVMeshC1Continuous(const MvarMVStruct *MV,
int Dir,
int Idx)
Description:
Examine the mesh of the given surface across direction Dir in index
of mesh Index for a real discontinuity in the mesh.
This index will typically be for a knot multiplicity potential discont.
Parameters:
MV: | To examine its potential discontinuity across Dir.
|
---|
Dir: | Direction to examine the discontinuity across.
|
---|
Idx: | Index where to examine the discontinuity.
|
---|
Returned Value:
CagdBType: TRUE if continuous there, FALSE otherwise.
|
---|
See Also:
MvarMVKnotHasC1Discont
MvarMVIsMeshC1DiscontAt
Keywords:
(mvarbbox.c:71)
Prototype:
void MvarMVMinMax(const MvarMVStruct *MV,
int Axis,
CagdRType *Min,
CagdRType *Max)
Description:
Computes a min max bound on a multivariate in a given axis.
The multivariate is not coerced to anything and the given axis is tested
directly where 0 is the W axis and 1, 2, 3 are the X, Y, Z etc.
Parameters:
MV: | To test for minimum/maximum.
|
---|
Axis: | 0 for W, 1 for X, 2 for Y etc.
|
---|
Min: | Where minimum found value should be place.
|
---|
Max: | Where maximum found value should be place.
|
---|
Returned Value:
Keywords:
bbox
bounding box
minimum
maximum
(mvar_sym.c:214)
Prototype:
MvarMVStruct *MvarMVMult(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariates - multiply them coordinate-wise.
The two multivariates are promoted to same point type before the
multiplication can take place.
Parameters:
MV1, MV2: | Two multivariate to multiply coordinate-wise.
|
---|
Returned Value:
MvarMVStruct *: The product of MV1 * MV2 coordinate wise.
|
---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVScalarScale
MvarMVMultScalar
MvarMVInvert
Keywords:
product
symbolic computation
multivariates
(mvar_sym.c:827)
Prototype:
MvarMVStruct *MvarMVMultBlend(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
CagdRType Blend)
Description:
Blend two multivariates assumed to share a domain and point type.
Parameters:
MV1, MV2: | wo multivariates to blend as "MV1 * Blend + MV2 * (1-Blend)".
|
---|
Blend: | Blending factor.
|
---|
Returned Value:
MvarMVStruct *: Blended multivariate.
|
---|
See Also:
Keywords:
(mvar_sym.c:433)
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. Note MV2 is a scalar field.
|
---|
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:29)
Prototype:
MvarMVStruct *MvarMVMultiLinearMV(const IrtRType *Min,
const IrtRType *Max,
int Dim)
Description:
Constructs a multi-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:61)
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
(mvcones.c:1440)
Prototype:
MvarNormalConeStruct *MvarMVNormal2Cones(const MvarMVStruct *MV,
CagdRType ExpandingFactor,
int NumOfZeroMVs,
MvarNormalConeStruct **Cone1,
MvarNormalConeStruct **Cone2)
Description:
Computes a 2cones bound to the normal field of multivariate MV.
The 2cones bounds the normal field in the common intersection space.
The 2cones are computed using the regular normal cone by expanding in the
direction orthogonal to the cone axis and its main principal component.
The expansion is done an amount that is equal to regular cone radius
times ExpandingFactor.
Parameters:
MV: | To compute the normal 2cones for.
|
---|
ExpandingFactor: | actor to expand placement of 2cones axes locations.
|
---|
NumOfZeroMVs: | Number of zero type MVs in the problem we solve.
|
---|
Cone1, Cone2: | The two cones to compute or ConeAngle = M_PI if error.
Can be NULL in which case no 2cones are computed -
only the regular cone is computed.
|
---|
Returned Value:
MvarNormalConeStruct *: Regular normal cone if successful,
NULL otherwise.
|
---|
See Also:
SymbNormalConeForSrf
MvarNormalConeOverlap
Keywords:
normals
normal bound
(mvar_aux.c:803)
Prototype:
MvarMVStruct *MvarMVOpenEnd(const MvarMVStruct *MV)
Description:
Returns a multivar with open end conditions, similar to given multivar.
Open end multivar is computed by extracting a subregion from multivar
that is the entire multivar's parametric domain, by inserting multiple
knots at the domain's boundary.
Parameters:
MV: | To convert to a new multivar with open end conditions. Input
can also be periodic.
|
---|
Returned Value:
MvarMVStruct *: Same multivar as MV but with open end conditions.
|
---|
See Also:
BspCrvOpenEnd
BspSrfOpenEnd
Keywords:
open end conditions
(mvarproj.c:236)
Prototype:
MvarPolylineStruct *MvarMVOrthoCrvProjOnModel(const CagdCrvStruct *Crv,
const MdlModelStruct *Mdl,
CagdRType Tol,
TrimSrfStruct **TSrfs)
Description:
Computes the orthogonal projection of a curve C(t) on a model.
computes the tensor product projection and then clip to the trimming zone.
if TSrfs is not NULL, because the curves are returned in the UV space of
the (trimmed) surfaces in the model, each such UV plln will have a
"trimsrf" attribute that references the corresponding trimmed surfaces,
that are returned in TSrfs.
Parameters:
Crv: | The curve to project on Srf, orthogonally.
|
---|
Mdl: | The model to project Crv on.
|
---|
Tol: | Tolerance of the computation.
|
---|
TSrfs: | Optional pointer to return the trimmed surfaces the
computed UV curves are on, if not NULL.
|
---|
Returned Value:
MvarPolylineStruct *: The projections in UV space of Srf.
|
---|
See Also:
MvarMVOrthoIsoCrvProjOnSrf
MvarInverseCrvOnSrfProj
MvarMVOrthoCrvProjOnSrf
MvarMVOrthoCrvProjOnTrimSrf
Keywords:
projection
(mvarproj.c:49)
Prototype:
MvarPolylineStruct *MvarMVOrthoCrvProjOnSrf(const CagdCrvStruct *Crv,
const CagdSrfStruct *Srf,
CagdRType Tol)
Description:
Computes the orthogonal projection of a curve C(t) on a surface S(u, v).
That is, the projection is along the normal lines of the surface S.
Computed as the univariate solution to the following two equations:
dS
< C(t) - S(u, v), ----- > = 0,
du
dS
< C(t) - S(u, v), ----- > = 0.
dv
Parameters:
Crv: | The curve to project on Srf, orthogonally.
|
---|
Srf: | The surface to project Crv on.
|
---|
Tol: | Tolerance of the computation.
|
---|
Returned Value:
MvarPolylineStruct *: The projections in UV space of Srf.
|
---|
See Also:
MvarMVOrthoIsoCrvProjOnSrf
MvarInverseCrvOnSrfProj
MvarMVOrthoCrvProjOnModel
MvarMVOrthoCrvProjOnTrimSrf
Keywords:
projection
(mvarproj.c:179)
Prototype:
MvarPolylineStruct *MvarMVOrthoCrvProjOnTrimSrf(const CagdCrvStruct *Crv,
const TrimSrfStruct *TSrf,
CagdRType Tol)
Description:
Computes the orthogonal projection of a curve C(t) on a trimmed surface.
computes the tensor product projection and then clip to the trimming zone.
Parameters:
Crv: | The curve to project on Srf, orthogonally.
|
---|
TSrf: | The trimmed surface to project Crv on.
|
---|
Tol: | Tolerance of the computation.
|
---|
Returned Value:
MvarPolylineStruct *: The projections in UV space of Srf.
|
---|
See Also:
MvarMVOrthoIsoCrvProjOnSrf
MvarInverseCrvOnSrfProj
MvarMVOrthoCrvProjOnModel
MvarMVOrthoCrvProjOnSrf
Keywords:
projection
(mvarproj.c:306)
Prototype:
MvarPolylineStruct *MvarMVOrthoIsoCrvProjOnSrf(const CagdSrfStruct *Srf1,
const CagdRType RVal,
const CagdRType CrvT0,
const CagdRType CrvT1,
CagdSrfDirType Dir,
const CagdSrfStruct *Srf2,
CagdRType Tol)
Description:
Computes the orthogonal projection of a region of an isoparametric curve
of surface S1(r, t) at a fixed parameter value, RVal, into surface
S2(u, v).
The projection is along the normal lines of S1, that contains the curve.
Computed as the univariate solution to the following two equations:
dS1
< S2(u, v) - S1(r, t), ----- > | = 0,
dr | (r=RVal)
dS1
< S2(u, v) - S1(r, t), ----- > | = 0.
dt | (r=RVal)
Parameters:
Srf1: | The surface to project from, orthogonally.
|
---|
RVal: | The isoparametric value of the curve of Srf1 to project.
|
---|
CrvT0: | Minimal parametric value of the curve region.
|
---|
CrvT1: | Maximal parametric value of the curve region.
|
---|
Dir: | Direction of isoparametric curve of S1.
|
---|
Srf2: | The surface to project to.
|
---|
Tol: | Computation tolerance.
|
---|
Returned Value:
MvarPolylineStruct *: The projections in UV space of Srf2.
|
---|
See Also:
MvarMVOrthoCrvProjOnSrf
Keywords:
projection
(mvar_rev.c:265)
Prototype:
MvarMVStruct *MvarMVParamShift(const MvarMVStruct *MV, int AxisSrc, int AxisTar)
Description:
Reorders the axes (or variables) of the given MV, so that AxisSrc moves
to the index AxisTar. The order of all the other axes is preserved.
Parameters:
MV: | Multi-Variate in which the axes are to be reordered.
|
---|
AxisSrc: | The axis to move.
|
---|
AxisTar: | The required new index of AxisSrc.
|
---|
Returned Value:
MvarMVStruct *: Reordered multi-variate.
|
---|
See Also:
MvarMVShiftAxes
MvarMVReverse
Keywords:
multi-variates
(mvarbbox.c:547)
Prototype:
MvarPtStruct *MvarMVPreciseBBox(const MvarMVStruct *MV,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a multi-variate freeform function.
The precise bbox is computed by:
1. Deriving the MV with respect to all parameters, in all direction and
seeking all the interior local extrema.
2. Recursively extract the boundaries as one-less dimensional MV and
call recursively, until it is a curve, in which case its two end points
are considered.
Parameters:
MV: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
If NULL, all computed extrema are returned instead.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
MvarPtStruct *: If BBox is NULL, all extrema locations identified are
returned here. Otherwise a NULL is returned.
|
---|
See Also:
MvarMVBBox
Keywords:
bbox
bounding box
(mvar_der.c:702)
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 multivariate functions each representing DMV/Dui, i from 0 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:568)
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:42)
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 exactly 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:663)
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.
|
---|
See Also:
MvarMVExtension
MvarBzrMVRegionFromMV
Keywords:
multi-variates
(mvar_rev.c:32)
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_rev.c:101)
Prototype:
MvarMVStruct *MvarMVReverseDir(const MvarMVStruct *MV, int Axis)
Description:
Reverses the direction of the mesh of the given MV in direction Axis (and
also reverse the knot vector if B-spline.
Parameters:
MV: | Multi-Variate to reverse.
|
---|
Axis: | Direction to reverse.
|
---|
Returned Value:
MvarMVStruct *: Reversed multi-variate.
|
---|
See Also:
MvarPromoteMVToMV
MvarMVShiftAxes
MvarMVReverse
Keywords:
multi-variates
(mvar_sym.c:787)
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:351)
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_sym.c:391)
Prototype:
MvarMVStruct *MvarMVScalarScale2(const MvarMVStruct *CMV,
const CagdRType *Scale)
Description:
Given a multivariate, scale each of its coordinates by a given factor.
Parameters:
CMV: | A multivariate to scale by magnitude Scale.
|
---|
Scale: | The scaling factors.
|
---|
Returned Value:
MvarMVStruct *: A multivariates scaled by Scale compared to MV.
|
---|
See Also:
MvarMVDotProd
MvarMVVecDotProd
MvarMVMult
MvarMVMultScalar
MvarMVInvert
MvarMVCrossProd
MvarMVScalarScale
Keywords:
scaling
symbolic computation
multivariates
(mvar_aux.c:430)
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, it is coerced to a Bspline first (and if InPlace
TRUE, the original Bezier is freed).
Parameters:
MV: | Multivariate 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
(mvcompos.c:1900)
Prototype:
CagdBType MvarMVSetCompositionCheckDomains(CagdBType NewValue)
Description:
Set the flag which determines if domain checks are performed in
multivariate composition. If set to TRUE, the composition algorithm will
verify that all of the Bezier patches of the reparametrization
multivariate are fully contained (by bounding box) in the parametric
domain of the target multivariate. If FALSE, then these checks are
skipped.
Parameters:
NewValue: | The new value to set to the flag.
|
---|
Returned Value:
CagdBType: The previous value of the flag.
|
---|
See Also:
MvarMVCompose
MvarMVComposeBzrBzr
MvarComposeExtractTargetSubdomain
Keywords:
(mvcompos.c:1932)
Prototype:
CagdBType MvarMVSetCompositionPropagateHigherDims(CagdBType NewValue)
Description:
Set the flag which determines if tiles with higher dimensions (more than
the deformation function's domain) will propagate their higher dimensions
to the output or not.
Parameters:
NewValue: | The new value to set to the flag.
|
---|
Returned Value:
CagdBType: The previous value of the flag.
|
---|
See Also:
MvarMVCompose
MvarMVComposeBzrBzr
MvarComposeExtractTargetSubdomain
MvarMVSetCompositionPropagateHigherDims
Keywords:
(mvar_aux.c:207)
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 B-spline first.
Parameters:
MV: | Multivariate 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 B-spline, 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:170)
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:1014)
Prototype:
void MvarMVSplitScalar(const MvarMVStruct *MV, MvarMVStruct **MVs)
Description:
Given a multivariate, splits it to its scalar component multivariates.
Parameters:
MV: | Multivariate to split.
|
---|
MVs: | An array to hold the newly dynamically allocated scalar MVs.
The zero entry would hold the W, or NULL otherwise. The
first entry would hold X axis, etc.
This vector should have MVAR_MAX_PT_COORD coordinates.
|
---|
Returned Value:
See Also:
MvarMVMergeScalar
Keywords:
split
multivariates
symbolic computation
(mvar_sym.c:116)
Prototype:
MvarMVStruct *MvarMVSub(const MvarMVStruct *MV1, const MvarMVStruct *MV2)
Description:
Given two multivariates - subtract them coordinate-wise.
The two multivariates are promoted to same point type before the
operation can take place. Furthermore, order and continuity are
matched as well.
Parameters:
MV1, MV2: | Two multivariate to subtract coordinate-wise.
|
---|
Returned Value:
MvarMVStruct *: The difference of MV1 - MV2 coordinate-wise.
|
---|
See Also:
MvarMVAdd
MvarMeshAddSub
MvarMVMult
Keywords:
subtraction
symbolic computation
multivariates
(mvar_sub.c:48)
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
(mvar_sub.c:431)
Prototype:
MvarMVStruct *MvarMVSubdivAtParamOneSide(const MvarMVStruct *MV,
CagdRType t,
MvarMVDirType Dir,
IrtBType LeftSide)
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.
|
---|
LeftSide: | TRUE to only fetch left half, FALSE to fetch right half.
|
---|
Returned Value:
MvarMVStruct *: A single multi-variate, result of the subdivision.
|
---|
See Also:
MvarBspMVSubdivAtParamOneSide
MvarBzrMVSubdivAtParamOneSide
MvarMVSubdivAtParam
Keywords:
multi-variates
(mvar_gen.c:1455)
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:1318)
Prototype:
CagdCrvStruct *MvarMVTriTangentLine(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
const CagdSrfStruct *Srf3,
CagdRType StepSize,
CagdRType SubdivTol,
CagdRType NumericTol,
int Euclidean)
Description:
Computes the tri-tangent line of three freeform bivariate. In other
words, computes the tangent line at three different points to the three
surface(s). The result is a univariate (describing the line tri-tangent
to the surfaces as it slides over the three surfaces).
Parameters:
Srf1, Srf2, Srf3: | he 3 bivariates to compute the tri-tangent lines for.
Assumed Bsplines surfaces with Open End Cond.
|
---|
StepSize: | Tolerance of numeric tracing of univariate solution.
|
---|
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.
|
---|
Euclidean: | True to return the result in Euclidean space, FALSE to
return it in parameteric space.
|
---|
Returned Value:
CagdCrvStruct *: Triplets of univariate solutions (three curves on the
three surfaces) of tri-tangent lines.
|
---|
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents
MvarMVBiTangents2
MvarMVTriTangentLineCreateMVs
Keywords:
tri-tangent
(mvtangnt.c:1065)
Prototype:
void MvarMVTriTangentLineCreateETs(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
const MvarMVStruct *CMV3,
MvarExprTreeStruct **ETs,
MvarConstraintType *Constraints)
Description:
Computes the constraints to solve for the tri-tangent line of three
freeform bivariate. In other words, to compute the tangent line at three
different points to the three surface(s).
Let,
DMV12 = MV1(u, v) - MV2(s, t)
DMV13 = MV1(u, v) - MV3(a, b)
DMV23 = MV2(s, t) - MV3(a, b)
Then, compute the simultaneous solution of the following five equations:
d MV1 d MV1
< ----- x -----, DMV13 > = 0,
du dv
*
d MV2 d MV2
< ----- x -----, DMV13 > = 0,
dr ds
*
d MV3 d MV3
< ----- x -----, DMV13 > = 0,
da db
*
d MV1 d MV1
< ----- x -----, DMV12 > = 0,
du dv
*
d MV3 d MV3
< ----- x -----, DMV23 > = 0,
da db
Parameters:
CMV1, CMV2, CMV3: | he 3 bivariates to compute the tri-tangent lines for.
|
---|
ETs: | To be populated with the computed ETs constraints.
|
---|
Constraints: | To be populated with the constraints' types.
|
---|
Returned Value:
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents
MvarMVBiTangents2
MvarMVTriTangentLine
MvarMVTriTangentLineCreateMVs
Keywords:
tri-tangent
(mvtangnt.c:925)
Prototype:
void MvarMVTriTangentLineCreateMVs(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
const MvarMVStruct *CMV3,
MvarMVStruct **MVs,
MvarConstraintType *Constraints)
Description:
Computes the constraints to solve for the tri-tangent line of three
freeform bivariate. In other words, to compute the tangent line at three
different points to the three surface(s).
Let,
DMV12 = MV1(u, v) - MV2(s, t)
DMV13 = MV1(u, v) - MV3(a, b)
DMV23 = MV2(s, t) - MV3(a, b)
Then, compute the simultaneous solution of the following five equations:
d MV1 d MV1
< ----- x -----, DMV13 > = 0,
du dv
*
d MV2 d MV2
< ----- x -----, DMV13 > = 0,
dr ds
*
d MV3 d MV3
< ----- x -----, DMV13 > = 0,
da db
*
d MV1 d MV1
< ----- x -----, DMV12 > = 0,
du dv
*
d MV3 d MV3
< ----- x -----, DMV23 > = 0,
dx dy
Parameters:
CMV1, CMV2, CMV3: | he 3 bivariates to compute the tri-tangent lines for.
|
---|
MVs: | To be populated with the computed MVS constraints.
|
---|
Constraints: | To be populated with the constraints' types.
|
---|
Returned Value:
See Also:
SymbTangentToCrvAtTwoPts
MvarMVBiTangents
MvarMVBiTangents2
MvarMVTriTangentLine
Keywords:
tri-tangent
(mvtangnt.c:218)
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, compute 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 == MV3 == 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
MvarMVTriTangentLine
Keywords:
tri-tangent
(mvar_gen.c:1394)
Prototype:
MvarMVStruct *MvarMVUnitMaxCoef(MvarMVStruct *MV)
Description:
Normalize in place the given multivariate so its maximal coefficient
is of unit size. Each axis is treated independently, including W.
Parameters:
MV: | Multivariate to normalize in place its coefficients.
|
---|
Returned Value:
MvarMVStruct *: Normalized multivariate, in place.
|
---|
See Also:
MvarSrfUnitMaxCoef
MvarCrvUnitMaxCoef
Keywords:
(mvar_aux.c:549)
Prototype:
void MvarMVUpdateConstDegDomains(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:
See Also:
MvarETUpdateConstDegDomains
Keywords:
(mvar_sym.c:548)
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
(mvar_aux.c:112)
Prototype:
IrtRType MvarMVVolumeOfDomain(MvarMVStruct * const MVs, int Dim)
Description:
Compute the volume of a multivariate's domain.
Parameters:
MVs: | The multivariate.
|
---|
Dim: | Number of dimensions.
|
---|
Returned Value:
IrtRType: Volume of domain.
|
---|
Keywords:
(zrmvaux1.c:85)
Prototype:
MvarPolylineStruct *MvarMVZR1DMergeTwoPoly(MvarPolylineStruct *Poly1,
MvarPolylineStruct *Poly2,
CagdRType Tol)
Description:
Merges two neighboring polylines together, in place.
Parameters:
Poly1: | 1st polyline.
|
---|
Poly2: | 2nd polyline.
|
---|
Tol: | The tolerance under which two points are proclaimed to be
identical.
|
---|
Returned Value:
MvarPolylineStruct *: If the start/endpoint of Poly1 coincides with the
start/endpoint of Poly2, up to Tol, they are merged.
|
---|
See Also:
MvarMVZR1DPrelimLink
Keywords:
(zrmvaux1.c:279)
Prototype:
MvarPolylineStruct *MvarMVZR1DPrelimLink(MvarPolylineStruct **PolyList,
MvarPolylineStruct *Poly,
CagdRType Tol,
const MvarMVStruct *MV)
Description:
Finds a polyline in the list, which is to be merged to a given polyline
and remove it from the input list.
Parameters:
PolyList: | List of polylines (found poly is removed from, in place).
|
---|
Poly: | Polyline, to be merged with the one from the list.
|
---|
Tol: | The tolerance under which two points are proclaimed to
be identical.
|
---|
MV: | Optional parameter that, when not NULL, defines the
domain where no merges close to boundary will take place.
|
---|
Returned Value:
MvarPolylineStruct *: Polyline which is suitable for Poly to be merged,
NULL, if no such polyline exist.
|
---|
See Also:
MvarMVZR1DMergeTwoPoly
Keywords:
(mvbisect.c:45)
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
(zrsolver.c:555)
Prototype:
CagdBType MvarMVsDetectZeros(MvarMVStruct * const *MVs,
MvarConstraintType *Constraints,
int NumOfMVs,
CagdRType SubdivTol,
CagdRType NumericTol,
int HighDimBndry)
Description:
Interface function for determining whether or not a MV equation has a
solution.
Constructs the generic problem structure, calls the solver in the
detection-only mode.
The set of NumOfMVs constraints may consist of equality or inequality
constraints, as prescribed by the constraints vector. All multivariates
are assumed to 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. Can be NULL in which case all constraints
are equality.
|
---|
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. Measured in
the image space of the constraints function.
|
---|
HighDimBndry: | TRUE if invoked when solving boundary of a higher
dimensional problem, FALSE otherwise.
|
---|
Returned Value:
CagdBType: Whether or not a solution to the zero problem exists.
|
---|
See Also:
MvarMVsZeros0D
MvarMVsZerosNormalConeTest
MvarMVsZerosDomainReduction
MvarMVsZerosVerifier
MvarETsZeros0D
MvarMVsZeros1D
MvarMVsZeros2D
Keywords:
(mvar_gen.c:1765)
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 otherwise.
|
---|
See Also:
CagdSrfsSame
CagdCrvsSame
TrivTVsSame
MvarMVsSame3
MvarMVsSameSpace
VMdlVModelsSame
Keywords:
(mvar_gen.c:1808)
Prototype:
CagdBType MvarMVsSame3(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
CagdRType Eps,
int *Modified)
Description:
Compare the two multivariates for similarity. If the MVs are curves or
surfaces, performs all possible reflections, searching for similarity, and
bring them to common function spaces.
Parameters:
MV1, MV2: | The two multivariates to compare.
|
---|
Eps: | Tolerance of equality.
|
---|
Modified: | Tags how MVs are reflected (See CagdSrfsSame3 and
CagdCrvsSame for sub-MVs that are curves or surfaces).
Can be NULL in which case it is ignored.
|
---|
Returned Value:
CagdBType: TRUE if multivariates are the same, FALSE otherwise.
|
---|
See Also:
CagdSrfsSame3
CagdCrvsSame3
TrivTVsSame
MvarMVsSame
MvarMVsSameSpace
Keywords:
(mvar_gen.c:1713)
Prototype:
CagdBType MvarMVsSameSpace(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
CagdRType Eps)
Description:
Compare the two multivariates to be in the same function space.
Parameters:
MV1, MV2: | The two multivariates to compare.
|
---|
Eps: | Tolerance of equality.
|
---|
Returned Value:
CagdBType: TRUE if multivariates are in the same sapce, FALSE otehrwise.
|
---|
See Also:
MvarMVsSame
Keywords:
(zrsolver.c:90)
Prototype:
MvarPtStruct *MvarMVsZeros0D(MvarZeroPrblmSpecStruct *ZeroProblemSpec)
Description:
Interface function for a generic MV equation solver, 0D solutions:
constructs the generic problem structure, calls the solver and extracts
the solution point list from the generic solution structure.
The set of NumOfMVs constraints may consist of equality or inequality
constraints, as prescribed by the constraints vector. All multivariates
are assumed to be in the same parametric domain size and dimension.
Parameters:
ZeroProblemSpec: | Specification of the 0D problem, which includes the
number of constraints, the multivariates constraints,
constraints types, tolerances, call back functions, etc.
|
---|
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
MvarETsZeros0D
MvarMVsZeros1D
MvarMVsZeros2D
Keywords:
(zrsolver.c:217)
Prototype:
MvarPtStruct *MvarMVsZeros0DNumeric(MvarMVStruct * const *MVs,
int NumOfMVs,
CagdRType NumericTol,
MvarPtStruct *ZeroPt)
Description:
Interface function for a numeric solution, as part of the MV equation
solver, for 0D solutions. An initial guess must be provided and note that
solution is not guaranteed, even if one exists.
Parameters:
MVs: | Vector of multivariate constraints.
|
---|
NumOfMVs: | Size of the MVs and Constraints vector.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. Measured in the
image space of the constraints function.
|
---|
ZeroPt: | An initial guess. The closer this guess to the precise
solution the better chance it will converge.
|
---|
Returned Value:
MvarPtStruct *: Preicse solution if successful or NULL if failed (the
improved solution is not within NumericTol).
|
---|
See Also:
MvarMVsZerosNormalConeTest
MvarMVsZerosDomainReduction
MvarMVsZerosVerifier
MvarETsZeros0D
MvarMVsZeros1D
MvarMVsZeros2D
MvarZero0DNumeric
Keywords:
(zrsolver.c:334)
Prototype:
MvarPolylineStruct *MvarMVsZeros1D(MvarZeroPrblmSpecStruct *ZeroProblemSpec)
Description:
Interface function for a generic MV equation solver, 1D solutions:
constructs the generic problem structure, calls the solver and extracts
the list of solution polylines from the generic solution structure.
The set of NumOfMVs constraints may consist of equality or inequality
constraints, as prescribed by the constraints vector. All multivariates
are assumed to be in the same parametric domain size and dimension.
Parameters:
ZeroProblemSpec: | Specification of the 1D problem, which includes the
number of constraints, the multivariates constraints,
constraints types, tolerances, call back functions, etc.
|
---|
Returned Value:
MvarPolylineStruct *: The solution, either holding list of polylines
which approximate the intersection curve, or a
list of polylines of length 1, which represent the
critical points of the problem.
In the intersection polyline case, each polyline
corresponds to the topologically isolated
component of the curve and is in R^k, the
unioned parametric spaces of all input MVs.
|
---|
See Also:
MvarSrfSrfInter
MvarMVsZeros1DMergeSingularPts
MvarMVsZeros0D
MvarETsZeros0D
MvarMVsZeros2D
MvarMVsZeros1DTrace2Pts
Keywords:
(zrmv1d.c:980)
Prototype:
int MvarMVsZeros1DMergeSingularPts(int MergeSingularPts)
Description:
Sets the state of the singular points merger:
If 0, singular locations are ignored (skipped).
If 1, singular locations are merged using the subdivision tolerance
which improves the changes of a complete long merged curves.
If 2, singular locations are merged using the numeric tolerances
(like every other case) which means most likely they will be left
as isolated points.
Parameters:
MergeSingularPts: | Set the desired state of singular points mergers.
|
---|
Returned Value:
See Also:
MvarSrfSrfInter
MvarMVsZeros1D
Keywords:
(zrsolver.c:411)
Prototype:
MvarPolylineStruct *MvarMVsZeros1DTrace2Pts(MvarMVStruct * const *MVs,
MvarConstraintType *Constraints,
int NumOfMVs,
MvarPtStruct *StartEndPts,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Interface function similar to MvarMVsZeros1D but only for tracing a
single univariate component between StartEndPts.
Parameters:
MVs: | Vector of multivariate constraints.
|
---|
Constraints: | Either an equality or an inequality type of constraint.
Can be NULL in which case all constraints are equality.
|
---|
NumOfMVs: | Size of the MVs and Constraints vector.
|
---|
StartEndPts: | Start/end points for the polyline solution to trace.
|
---|
Step: | Step size to use in the numeric tracing.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the multivariates.
|
---|
NumericTol: | Numeric tolerance of the numeric stage. Measured in the
image space of the constraints function.
|
---|
Returned Value:
MvarPolylineStruct *: The traced polyline which approximates solution,
in R^k.
|
---|
See Also:
MvarSrfSrfInter
MvarMVsZeros1DMergeSingularPts
MvarMVsZeros0D
MvarETsZeros0D
MvarMVsZeros2D
MvarMVsZeros1D
Keywords:
(zrsolver.c:488)
Prototype:
MvarZeroSolutionStruct *MvarMVsZeros2D(MvarZeroPrblmSpecStruct *ZeroProblemSpec)
Description:
Interface function for a generic MV equation solver, 2D solutions:
constructs the generic problem structure, calls the solver and extracts
the list of either solution triangles or solution polylines from the
generic solution structure.
The set of NumOfMVs constraints must consist of equality constraints,
prescribed by the constraints vector (inequalities not supported). All
multivariates are assumed to be in the same parametric domain size and
dimension.
Parameters:
ZeroProblemSpec: | Specification of the 2D problem, which includes the
number of constraints, the multivariates constraints,
constraints types, tolerances, call back functions, etc.
|
---|
Returned Value:
MvarZeroSolutionStruct *: The list of either triangles or polylines,
according to the required output types, which
approximate the surface.
|
---|
See Also:
MvarSrfSrfInter
MvarMVsZeros0D
MvarETsZeros0D
MvarMVsZeros1D
Keywords:
(zrsolver.c:251)
Prototype:
MvarPtStruct *MvarMVsZeros2DBy0D(MvarZeroPrblmSpecStruct *ZeroProblemSpec)
Description:
Interface function for a generic MV equation solver, 2D solutions, in
the temporary case where the problem is solved using the 0D solver and
then surface fitting to the solution points.
Constructs the generic problem structure, calls the solver and extracts
the solution point list from the generic solution structure. The surface
fitting step is done by the specific problem algorithm outside the solver
environment.
The set of NumOfMVs constraints may consist of equality or inequality
constraints, as prescribed by the constraints vector. All multivariates
are assumed to be in the same parametric domain size and dimension.
Parameters:
ZeroProblemSpec: | Specification of the 0D problem, which includes the
number of constraints, the multivariates constraints,
constraints types, tolerances, call back functions, etc.
|
---|
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:
MvarCrvSrfBisectorApprox
Keywords:
(zrmv2dTs.c:1535)
Prototype:
int MvarMVsZeros2DCornersOnly(int Is2DSolutionCornersOnly)
Description:
Sets the filter state of the polyline loops, when tagging loop points
for later triangulation. If set to TRUE, the only chosen points are domain
corners and points added due to T-Junction handling. Otherwise,
intermediate solution points will be selected as well.
NOTE: if set to TRUE, then the MVAR_ZRMV2D_LIMIT_EDGE_LEN flag must be
set to FALSE. Otherwise black holes can appear in the mesh.
Parameters:
Is2DSolutionCornersOnly: | New setting for the filter state.
|
---|
Returned Value:
int: Old setting for the filter state.
|
---|
See Also:
MvarZeroSolverOrganizeSol2DMVs
MvarZeroTagSegmentForTr
Keywords:
(zrmv2dTp.c:708)
Prototype:
int MvarMVsZeros2DPolylines(int IsPolyLines2DSolution)
Description:
Sets the output type of the bivariate solver: either a collection of
loops (polylines) or a collection of triangles.
Parameters:
IsPolyLines2DSolution: | New setting for the output type.
|
---|
Returned Value:
int: Old setting for the output type.
|
---|
See Also:
MvarZeroSolverInseparableProblem
MvarZeroSolverOne2OneProjMVs
Keywords:
(zrsolver.c:3120)
Prototype:
int MvarMVsZerosCrtPts(int CrtPtsDetection)
Description:
Controls the critical points detection task of the solver. If FALSE,
the main problem is solved, disregarding the question of critical points.
Otherwise, the main problem is not solved, but is converted to its
critical points detection problem, and this is the problem solved.
Parameters:
CrtPtsDetection: | New setting for the critical points detection.
|
---|
Returned Value:
int: Old setting of the critical points detection.
|
---|
See Also:
MvarZeroSolverInseparableProblem
Keywords:
(zrsolver.c:2407)
Prototype:
CagdRType MvarMVsZerosDmnExt(CagdRType DmnExt)
Description:
Sets the tolerance (or zero to disable) of the domain extension inside
the multivariate subdivisions' zero set solver.
Parameters:
DmnExt: | New setting for domain extension usage.
|
---|
Returned Value:
CagdRType: Old extensions tolerance for domain extension usage.
|
---|
See Also:
MvarZeroSolverInseparableProblem
MvarMVsZerosDomainReduction
MvarMVsZerosGradPreconditioning
Keywords:
(zrmvaux0.c:118)
Prototype:
int MvarMVsZerosDomainReduction(int DomainReduction)
Description:
Sets the use (or not) of the domain reduction option - Bezier (and
(B-spline) 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
Keywords:
(zrmvaux0.c:87)
Prototype:
int MvarMVsZerosGradPreconditioning(int GradPreconditioning)
Description:
Sets the use (or not) of gradient precondition 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
Keywords:
(zrmvkant.c:794)
Prototype:
int MvarMVsZerosKantorovichTest(int KantorovichTest)
Description:
Sets the use (or not) of the Kantorovich test inside the multivariate
subdivisions' zero set solver.
Parameters:
KantorovichTest: | New setting for normal cone testing usage.
|
---|
Returned Value:
int: Old setting for normal cone testing usage.
|
---|
See Also:
MvarMVsZeros
MvarMVsZerosDomainReduction
MvarMVsZerosGradPreconditioning
Keywords:
(zrmvaux0.c:56)
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
Keywords:
(zrsolver.c:3089)
Prototype:
int MvarMVsZerosNormalizeConstraints(int NormalizeConstraints)
Description:
Controls the option of normalizing the constraints on every recursive
call. Might be useful for constraints that are very steep on one side and
shallow in another.
Parameters:
NormalizeConstraints: | New setting for the constraints normalization.
|
---|
Returned Value:
int: Old setting of the constraints normalization.
|
---|
See Also:
MvarZeroSolverInseparableProblem
MvarMVsZerosCrtPts
Keywords:
(zrmvaux0.c:148)
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
Keywords:
(zrmvaux0.c:178)
Prototype:
CagdBType MvarMVsZerosSameSpace(MvarMVStruct **MVs, int NumOfMVs)
Description:
Make sure all given MVs are in the same function space.
Parameters:
MVs: | Vector of multivariate constraints.
|
---|
NumOfMVs: | Size of the MVs vector.
|
---|
Returned Value:
CagdBType: TRUE if in same function space, FALSE otherwise.
|
---|
See Also:
MvarMVsSameSpace
Keywords:
(zrmvaux0.c:935)
Prototype:
void MvarMVsZerosVerifier(MvarMVStruct * const *MVs,
int NumOfZeroMVs,
MvarPtStruct *Sols,
CagdRType NumerEps)
Description:
A verification function to test the correctness of the solutions.
For mostly 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:
MvarZeroSolver
Keywords:
(mvardist.c:1744)
Prototype:
int MvarMakeCrvsOnSrfsMatchSpeed(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdCrvStruct **UVCrv1,
CagdCrvStruct **UVCrv2)
Description:
Given surfaces Srf1/2 and curves UVCrv1/2 in the domain of the surfaces
so that the trace the same shape, recreate UVCrv1 and UVCrv2 so the move
along the trace at the same speed, or Srf1(UVCrv1) = Srf2(UVCrv2), and
the two curve are in the same function space.
Parameters:
Srf1: | First surface to consider.
|
---|
Srf2: | Second surface to consider.
|
---|
UVCrv1: | First curve in the domain of Srf1 to modify, in place.
|
---|
UVCrv2: | Second curve in the domain of Srf2 to modify, in place.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
MvarProjUVCrvOnE3CrvMatchSpeed
TrimMatch2ndCrvLenSpeedAs1stCrv
Keywords:
(mvarcmpt.c:40)
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
(If SameOrder TRUE).
4. Refining them to a common knot vector (If Bspline and SameOrder TRUE).
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.
|
---|
See Also:
MvarMakeMVsCompatible2
CagdMakeCrvsCompatible
CagdMakeSrfsCompatible
Keywords:
compatibility
(mvarcmpt.c:90)
Prototype:
CagdBType MvarMakeMVsCompatible2(MvarMVStruct **MV1,
MvarMVStruct **MV2,
CagdBType SameOrders,
CagdBType SameKVs)
Description:
Given two multi-variates, makes them compatible by:
1. Making them have the same multi-variate type.
2. Raising the degree of the lower one to be the same as the higher
(If SameOrder TRUE).
3. Refining them to a common knot vector (If Bspline and SameOrder TRUE).
Note 2 is performed if SameOrder TRUE, 3 if SameKV TRUE.
Both multi-variates are modified IN PLACE.
Note here point type can be different and will stay different.
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.
|
---|
See Also:
MvarMakeMVsCompatible
CagdMakeCrvsCompatible
CagdMakeSrfsCompatible
Keywords:
compatibility
(mvarcmpt.c:234)
Prototype:
CagdBType MvarMakeMVsOneDimCompatible(MvarMVStruct **MV1,
MvarMVStruct **MV2,
int Dim,
CagdBType SameOrders,
CagdBType SameKVs)
Description:
Given two multi-variates, makes one of their directions compatible by:
1. Making them have the same multi-variate type (Bezier or B-spline).
2. Raising the degree of the lower one to be the same as the higher
in Dim (If SameOrder TRUE).
3. Refining them to a common knot vector in Dim (If Bspline and SameOrder
TRUE).
Note 2 is performed if SameOrder TRUE, 3 if SameKV TRUE.
Both multi-variates are modified IN PLACE.
Note here point type can be different and will stay different.
Parameters:
MV1, MV2: | Two surfaces to be made compatible, in place.
|
---|
Dim: | The dimension in which MV1 and MV2 are to be made compatible.
|
---|
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.
|
---|
See Also:
MvarMakeMVsCompatible
CagdMakeCrvsCompatible
CagdMakeSrfsCompatible
Keywords:
compatibility
(mvarjimp.c:241)
Prototype:
void MvarMakeUniquePointsList(MvarPtStruct **PtList, CagdRType Tol)
Description:
Removes duplicated points in a given multivariate points list, in place.
Parameters:
PtList: | nput point list to make unique in place.
|
---|
Tol: | Equality tolerance on the different coefficient of the points.
|
---|
Returned Value:
Keywords:
unique
(mvar_pll.c:470)
Prototype:
MvarPolylineStruct *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:
MvarPolylineStruct *: Connected multivariate polylines, upto MaxTol
tolerance.
|
---|
See Also:
GMMatchPointListIntoPolylines2
Keywords:
(mvarbbox.c:1132)
Prototype:
void MvarMdlTrimSrfListPreciseBBox(const MdlTrimSrfStruct *TSrfs,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a list of mdl trimmed surfaces.
Parameters:
TSrfs: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MdlSrfListPreciseBBox
MdlTrimSrfPreciseBBox
CagdSrfListBBox
MdlSrfPreciseBBox
Keywords:
bbox
bounding box
(mvarbbox.c:1074)
Prototype:
void MvarMdlTrimSrfPreciseBBox(const MdlTrimSrfStruct *TSrf,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a model trimmed surface.
Parameters:
TSrf: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MvarSrfPreciseBBox
MvarTrimSrfPreciseBBox
MVarMdlrimSrfListPreciseBBox
MdlMVPreciseBBox
CagdSrfBBox
Keywords:
bbox
bounding box
(mvarbbox.c:273)
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
(mvar_aux.c:2196)
Prototype:
MvarMVStruct *MvarMergeMVList(MvarMVStruct *MVList,
int Dir,
IrtRType Tolerance,
int InterpDiscont)
Description:
Merges a list of multivariates by connecting shared boundaries that are
(almost) the same, in place. Uses the generic merging package in geom_lib.
Parameters:
MVList: | To connect into larger multivariates. Expected to be open
ended. Merge is performed in-place - MVList is freed.
|
---|
Dir: | Axis direction to merge. First axis is 0.
|
---|
Tolerance: | To consider two shared boundaries the same.
|
---|
InterpDiscont: | f TRUE, linearly interpolate discontinuity.
|
---|
Returned Value:
MvarMVStruct *: The merged multivariates, or NULL if error.
|
---|
See Also:
CagdMergeMVList
CagdMergeMVList3
GMMergeSameGeometry
Keywords:
merge
(mvar_aux.c:1578)
Prototype:
MvarMVStruct *MvarMergeMVMV(const MvarMVStruct *MV1,
const MvarMVStruct *MV2,
MvarMVDirType Dir,
CagdBType Discont)
Description:
Merges two multivariates in the requested direction Dir.
It is assumed that last Sub-MV of MV1 is identical to first Sub-MV of
MV2 in Dir.
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:
MV1: | To connect to CMV2's starting boundary at its end.
|
---|
MV2: | 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:1918)
Prototype:
MvarMVStruct *MvarMergeMVMV2(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
MvarMVDirType Dir,
CagdBType Discont)
Description:
Merges two multivariates in the requested direction Dir.
It is assumed that first/last Sub-MV of MV1 is identical to first/last
Sub-MV of MV2, in Dir, up to all possible reflections on other directions.
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, or NULL if failed.
|
---|
See Also:
CagdMergeSrfSrf
MvarMergeMVMV
MvarAre2MVsPossiblySharingBndry
MvarAre2MVsSharingBndry
Keywords:
merge
multivariate
(mvtrivar.c:896)
Prototype:
TrivTVStruct *MvarMergeTVList(const TrivTVStruct *TVList,
int Dir,
IrtRType Tolerance,
int InterpDiscont)
Description:
Merges a list of trivariates by connecting shared boundaries that are
(almost) the same, in place. Uses the generic merging package in geom_lib.
Parameters:
TVList: | To connect into larger trivariates. Expected to be
open ended.
|
---|
Dir: | Axis direction to merge. First axis is 0.
|
---|
Tolerance: | To consider two shared boundaries the same.
|
---|
InterpDiscont: | f TRUE, linearly interpolate discontinuity.
|
---|
Returned Value:
TrivTVStruct *: The merged trivariates, or NULL if error.
|
---|
See Also:
CagdMergeMVList
MvarMergeMVList
GMMergeSameGeometry
TrivMergeTVTV
Keywords:
merge
(mvarcoer.c:153)
Prototype:
MvarPointType MvarMergeTwoPointTypes(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:1205)
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:565)
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:325)
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:254)
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:125)
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
MvarNormalConeCopyList
MvarNormalConeFree
Keywords:
(mvcones.c:161)
Prototype:
MvarNormalConeStruct *MvarNormalConeCopyList(const MvarNormalConeStruct
*NormalCones)
Description:
Copy a list of multivariate normal cones' structures.
Parameters:
NormalCones: | List of multivariate normal cones to duplicate.
|
---|
Returned Value:
MvarNormalConeStruct *: Duplicated list of multivariate normal cones.
|
---|
See Also:
MvarNormalConeNew
MvarNormalConeCopy
MvarNormalConeFree
Keywords:
multi-variates
(mvcones.c:193)
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:219)
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:93)
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:
(mvardist.c:1589)
Prototype:
int MvarNumericImporveSharedPoints(const CagdSrfStruct *Srf1,
void *DistSrfPointPreps1,
CagdRType *UV1,
const CagdSrfStruct *Srf2,
void *DistSrfPointPreps2,
CagdRType *UV2)
Description:
Numerically improve UV1 and UV2, in Srf1 and Srf2 domains, respectively,
so that Srf1(UV1) = Srf2(UV2).
Parameters:
Srf1: | Surface holding UV1 in its domain.
|
---|
DistSrfPointPreps1: | oint projection on Srf1 prep struct.
|
---|
UV1: | First surface location (on Srf1).
|
---|
Srf2: | Surface holding UV2 in its domain.
|
---|
DistSrfPointPreps2: | oint projection on Srf1 prep struct.
|
---|
UV2: | Second surface location (on Srf2).
|
---|
Returned Value:
int: TRUE if improved, FALSE otherwise.
|
---|
See Also:
Keywords:
(mvar_aux.c:472)
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:500)
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
(pdvl_alg.c:108)
Prototype:
CagdSrfStruct *MvarPiecewiseDvlpAlgApproxLineAnalyze(
const CagdSrfStruct *Srf,
CagdRType Tolerance,
CagdCrvStruct **StripBoundriesUV,
int CrvSizeReduction,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType SrfExtent,
int DvlpSteps)
Description:
Computes piecewise developable strips to Srf, within Tolerance.
That is, every location on Srf is within tolerance to at least one
developable surface position.
Computation is performed starting from the VMin boundary of Srf.
Parameters:
Srf: | To compute piecewise developable approximation for.
|
---|
Tolerance: | Maximal allowed distance from Srf to developables.
|
---|
StripBoundriesUV: | f points to a curve, used as first curve to develop
from. This curve is considered a UV curve in Srf.
Otherwise, will be initialized with VMin curve.
Will be updated with the list of UV curves in the
parametric domain of Srf that delineates the
boundaries of the developable strips.
|
---|
CrvSizeReduction: | reduction in size of traced curve while ensuring
the Tolerance, conservatively.
|
---|
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.
|
---|
SrfExtent: | Amount to extend the surface so the developable sheet
will span it all. Zero to ignore.
|
---|
DvlpSteps: | Number of double-strip constructions to perform from
the VMin boundary.
|
---|
Returned Value:
CagdSrfStruct *: List of piecewise developables approximation of Srf
to within Tolerance.
|
---|
See Also:
MvarPiecewiseDvlpAlgApproxBuildDvlpSrfs
SymbSrfDevelopableCrvOnSrf
MvarPiecewiseRuledAlgApproxBuildRuledSrfs
MvarPiecewiseRuledAlgApproxLineAnalyze
Keywords:
(prld_alg.c:862)
Prototype:
IPObjectStruct *MvarPiecewiseRuledAlgApproxBuildRuledSrfs(
const IPObjectStruct *Srf,
const IPObjectStruct *UVRld)
Description:
Build ruled surfaces from the extracted UV curves.
Parameters:
Srf: | Input surfaces. Can be either a regular or a trimmed surface.
|
---|
UVRld: | The computed ruled surfaces approximation for Srf, as UV curves.
|
---|
Returned Value:
IPObjectStruct *: A list of ruled surface depicting the result.
If input Srf is trimmed, will be a set of trimmed
surfaces as well.
|
---|
See Also:
MvarPiecewiseRuledAlgApproxLineAnalyze
MvarPiecewiseDvlpAlgApproxLineAnalyze
MvarPiecewiseDvlpAlgApproxBuildDvlpSrfs
Keywords:
(prld_alg.c:97)
Prototype:
CagdCrvStruct *MvarPiecewiseRuledAlgApproxLineAnalyze(
const CagdSrfStruct *Srf,
CagdRType Tolerance,
CagdCrvStruct **StripBoundriesUV,
int CrvSizeReduction,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes piecewise ruled strips to Srf that can, for example be used for
gouging-free flanked milling, within Tolerance. That is, every location
on Srf is within tolerance to at least one ruled surface position.
Note we assume the tool radius is zero for flanked milling application,
as surface can be offset by tool radius, reducing tool to a line.
Also computation is performed from VMin boundary of Srf.
Parameters:
Srf: | To compute piecewise ruling approximation for.
|
---|
Tolerance: | Maximal allowed distance between Srf and rulings.
|
---|
StripBoundriesUV: | ist of UV curves in the parametric domain of Srf
that delineates the boundaries of the strips.
|
---|
CrvSizeReduction: | reduction in size of traced curve while ensuring
the Tolerance conservatively.
|
---|
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:
CagdCrvStruct *: List of UV curves in the parametric domain of Srf that
define the piecewise ruling approximation of Srf to
within Tolerance.
|
---|
See Also:
MvarPiecewiseRuledAlgApproxBuildRuledSrfs
MvarPiecewiseDvlpAlgApproxLineAnalyze
MvarPiecewiseDvlpAlgApproxBuildDvlpSrfs
Keywords:
(mvar_gen.c:1284)
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:1310)
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:1342)
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:1366)
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:1250)
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:
(mvar_vec.c:668)
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_int.c:198)
Prototype:
void MvarPointFromPointLine(const MvarVecStruct *Point,
const MvarVecStruct *Pl,
const MvarVecStruct *Vl,
MvarVecStruct *ClosestPoint)
Description:
Routine to compute the closest point on a line to point, in R^n.
The line is prescribed using a point on it (Pl) and a unit vector (Vl).
Parameters:
Point: | To find the closest to on the line.
|
---|
Pl, Vl: | Position and direction that defines the line. Vl is
assumed a unit length vector.
|
---|
ClosestPoint: | Where closest point found on the line is to be saved.
|
---|
Returned Value:
See Also:
GMPointFromPointLine
Keywords:
point line distance
(mvar_pll.c:220)
Prototype:
MvarPolylineStruct *MvarPolyMergePolylines(MvarPolylineStruct *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: | Epsilon of similarity to merge multivariate polylines at.
|
---|
Returned Value:
MvarPolylineStruct *: Merged as possible multivariate polylines.
|
---|
See Also:
GMMergePolylines
Keywords:
merge
polyline
(mvar_gen.c:741)
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_gen.c:801)
Prototype:
MvarPolylineStruct *MvarPolylineCopy(const MvarPolylineStruct *Poly)
Description:
Allocates and duplicates all slots of a multi-variate polyline structure.
Parameters:
Poly: | Multi-Variate polyline to duplicate.
|
---|
Returned Value:
MvarPolylineStruct *: Duplicated multi-variate polyline.
|
---|
Keywords:
(mvar_gen.c:824)
Prototype:
MvarPolylineStruct *MvarPolylineCopyList(MvarPolylineStruct *PolyList)
Description:
Duplicates a list of multi-variate polyline structures.
Parameters:
PolyList: | List of multi-variate polylines to duplicate.
|
---|
Returned Value:
MvarPolylineStruct *: Duplicated list of multi-variate polylines.
|
---|
Keywords:
multi-variates
(mvar_gen.c:931)
Prototype:
void MvarPolylineFree(MvarPolylineStruct *Poly)
Description:
Deallocates and frees all slots of a multi-variate polyline structure.
Parameters:
Poly: | Multivariate polyline to free.
|
---|
Returned Value:
See Also:
MvarPolylineNew
Keywords:
(mvar_gen.c:951)
Prototype:
void MvarPolylineFreeList(MvarPolylineStruct *PolyList)
Description:
Deallocates and frees a list of multi-variate polyline structures.
Parameters:
PolyList: | Multi-Variate polyline list to free.
|
---|
Returned Value:
Keywords:
(mvar_gen.c:775)
Prototype:
MvarPolylineStruct *MvarPolylineNew(MvarPtStruct *Pl)
Description:
Allocates the memory required for a new multi-variate polyline.
Parameters:
Pl: | List of points forming the polyline.
|
---|
Returned Value:
MvarPolylineStruct *: A new multi-variate polyline.
|
---|
See Also:
MvarPolylineFree
Keywords:
(mvardist.c:1429)
Prototype:
CagdCrvStruct *MvarProjCrvOnSrf(const CagdCrvStruct *Crv,
const CagdSrfStruct *Srf,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol,
void *SrfPrepHandle,
CagdBType GenUVCrv)
Description:
Checks if given curve is precisely contained in the given surface.
returns a UV curve in Srf that represent it if indeed on Srf.
Computation is done by sampling points on the curve and projecting
these points on the surface.
Parameters:
Crv: | E3 Curve to check if precisely contained inside Srf.
|
---|
Srf: | Surface to check if Crv is precisely contained in it.
|
---|
Step: | Distance (step) in direction of tangent vec., while tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | he numerical tolerance to use.
|
---|
SrfPrepHandle: | Hold pre-processed data by MvarInverseCrvOnSrfProjPrep
to speed up the crv on srf projections.
See MvarInverseCrvOnSrfProjPrep/MvarInverseCrvOnSrfProjFree.
Optional and can be NULL.
|
---|
GenUVCrv: | If TRUE, a UV curve on the surface is generated and
returned, if precisely on Srf.
If FALSE, and precisely on Srf, Crv is returned.
|
---|
Returned Value:
CagdCrvStruct *: The (UV) curve representation of Crv that is found to
be precisely on Srf or NULL otherwise.
|
---|
See Also:
MvarMVDistCrvSrf
SymbSrfDistCrvCrv
SymbSrfDistFindPoints
MvarMVDistSrfSrf
MvarMVDistCrvSrf
MvarProjCrvOnSrf1
MvarProjCrvOnSrf2
MvarSrfSrfInter
MvarInverseCrvOnSrfProj
Keywords:
(mvardist.c:1285)
Prototype:
MvarPolylineStruct *MvarProjCrvOnSrf1(const CagdCrvStruct *Crv1,
const CagdSrfStruct *Srf2,
int Axes,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Checks if given curve is precisely (partially) contained in the given
surface and returns the portion that is indeed on Srf, if any.
Computation is done by computing the distance field as a trivariate and
finding the zeros of two out of three components of this distance field.
Parameters:
Crv1, Srf2: | he two entities, Crv1(t) and Srf2(u, v), to find their
common domains.
|
---|
Axes: | One of 12, 13, 23 for XY, XZ, YZ solution.
|
---|
Step: | Distance (step) in direction of tangent vec., while tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | he numerical tolerance to use.
|
---|
Returned Value:
MvarPolylineStruct *: Location where distance function square
d2(t, u, v) of Crv1(t) and Srf2(u, v) is zero,
as (t, u, v) tuples.
|
---|
See Also:
MvarMVDistCrvSrf
SymbSrfDistCrvCrv
SymbSrfDistFindPoints
MvarMVDistSrfSrf
MvarMVDistCrvSrf
MvarProjCrvOnSrf
MvarProjCrvOnSrf2
MvarCrvSrfInter
MvarSrfSrfInter
Keywords:
curve surface distance
(mvardist.c:1364)
Prototype:
MvarPolylineStruct *MvarProjCrvOnSrf2(const CagdCrvStruct *Crv1,
const CagdSrfStruct *Srf2,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Checks if given curve is precisely (partially) contained in the given
surface and returns the portion that is indeed on Srf, if any.
Computation is done by computing the distance field as a trivariate and
finding the zeros of the derivatives of this distance field with respect
to the two surface parameters.
Parameters:
Crv1, Srf2: | he two entities, Crv1(t) and Srf2(u, v), to find their
common domains.
|
---|
Step: | Distance (step) in direction of tangent vec., while tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | he numerical tolerance to use.
|
---|
Returned Value:
MvarPolylineStruct *: Location where distance function square
d2(t, u, v) of Crv1(t) and Srf2(u, v) is zero,
as (t, u, v) tuples.
|
---|
See Also:
MvarMVDistCrvSrf
SymbSrfDistCrvCrv
SymbSrfDistFindPoints
MvarMVDistSrfSrf
MvarMVDistCrvSrf
MvarProjCrvOnSrf
MvarProjCrvOnSrf1
MvarCrvSrfInter
MvarSrfSrfInter
Keywords:
curve surface distance
(mvardist.c:1660)
Prototype:
CagdCrvStruct *MvarProjUVCrvOnE3CrvMatchSpeed(const CagdCrvStruct *UVLinCrv1,
const CagdSrfStruct *Srf1,
const CagdCrvStruct *UVCrv2,
const CagdSrfStruct *Srf2)
Description:
Projects all vertices of Srf1(UVLinCrv1) (UVLinCrv1 is in the UV space
of Srf1) onto EucCrv2 = Sf2(UCrv2) and reconstruct another linear curve of
same length as UVLinCrv1 for Srf2 that matches positions and speeds.
That is, Srf2(NewUVLinCrv2) = Srf1(UVLinCrv1).
The new returned curve is forced to interpolate end points of UVCrv2.
Parameters:
UVLinCrv1: | The linear curve in the UV domain of Srf1.
|
---|
Srf1: | Surface holding UVLinCrv1 in its domain.
|
---|
UVCrv2: | The UV curve in the UV domain of Srf2.
|
---|
Srf2: | Surface holding UVCrv2 in its domain.
|
---|
Returned Value:
CagdCrvStruct *: Reconstructed matching linear UVCrv2 for Srf2.
|
---|
See Also:
TrimMatch2ndCrvLenSpeedAs1stCrv
Keywords:
(mvar_rev.c:363)
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:407)
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:302)
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.
2 is returned if the dimensions are different.
|
---|
See Also:
MvarPtDistTwoPoints
MvarPtDistSqrTwoPoints
MvarVecCmpTwoVectors
Keywords:
(mvar_gen.c:636)
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:661)
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:432)
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:372)
Prototype:
CagdRType MvarPtDistTwoPoints(const MvarPtStruct *P1, const MvarPtStruct *P2)
Description:
Compute the Euclidean 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:693)
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:717)
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:397)
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:550)
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:590)
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:881)
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:242)
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
(mvarpole.c:35)
Prototype:
MvarPolylineStruct *MvarRationalSrfsPoles(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes the poles of a rational surface, solving for the zeros of the
surface's denominator.
Parameters:
Srf: | Rational surface to extract its poles.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
Returned Value:
MvarPolylineStruct *: The poles, as piecewise linear approximations.
|
---|
See Also:
CagdPointsHasPoles
SymbCrvsSplitPoleParams
Keywords:
(mvtangnt.c:1514)
Prototype:
CagdCrvStruct *MvarRoundChamferCrvAtC1Discont(const CagdCrvStruct *Crv,
CagdCrvCornerType CornerType,
CagdRType Radius)
Description:
Round all C1 discontinuities in the given curve Crv by an arc of radius
Radius.
Parameters:
Crv: | The curve to round all its C1 discontinuities.
|
---|
CornerType: | Corner type desired.
|
---|
Radius: | The desired radius of rounding.
|
---|
Returned Value:
CagdCrvStruct *: Rounded curve.
|
---|
See Also:
MvarCircTanTo2Crvs
MvarRoundChamferCrvAtC1DiscontArc
Keywords:
bi-tangent
(mvtangnt.c:1419)
Prototype:
CagdCrvStruct *MvarRoundChamferCrvAtC1DiscontArc(CagdCrvStruct **Crv1,
CagdCrvStruct **Crv2,
CagdCrvCornerType CornerType,
CagdRType Radius)
Description:
Build bridging arc in the C^1 discontinuity - i.e an arc or a chamfer.
If a bridging arc between the end of Crv1 and the beginning of Crv2 is
indeed found, Crv1/2 are also trimmed to the proper location of the arc.
Parameters:
Crv1, Crv2: | The two curves to bridge.
|
---|
CornerType: | Corner type desired.
|
---|
Radius: | The desired radius of rounding.
|
---|
Returned Value:
CagdCrvStruct *: Constructed bridging arc.
|
---|
See Also:
MvarCircTanTo2Crvs
MvarRoundChamferCrvAtC1Discont
Keywords:
bi-tangent
(mvar_cvr.c:1321)
Prototype:
MvarPtStruct *MvarSCvrBiNormals(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdBType ElimDiagonals,
CagdRType RadiusLB,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes binormals to the given curves, i.e., the pair of points on
curves C1 and C2 such that the line-segment joining these points is
orthogonalto C1 and C2 at those points.
This is done by solving the following system of two equations in two
unknowns.
< C1(u) - C2(v), C1'(u) > = 0
< C1(u) - C2(v), C2'(v) > = 0
Diagonal solutions are eliminated, if requested, by factoring out the
(u - v) term from the above multivariates.
Parameters:
Crv1, Crv2: | The input curves to which binormals are to be computed.
Can be the same curve for self-bisectors (turn
ElimDiagonals on then).
|
---|
ElimDiagonals: | If TRUE, the diagonal solutions are eliminated.
|
---|
RadiusLB: | Lower-bound on radius of circles - the diameter between
the two intersecting points of the binormal and curves.
|
---|
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 *: The list of solutions which consists of points of the
form (u, v).
|
---|
See Also:
MvarCircTanTo2Crvs
Keywords:
bi-normal
(mvar_cvr.c:186)
Prototype:
MvarPtStruct *MvarSCvrCircTanTo2CrvsCntrOnCrv(const CagdCrvStruct *Crv,
const CagdCrvStruct *CntrOnCrv,
CagdRType RadiusLB,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes all circles that are tangent to given curve at two points and
whose centers lie on the given third curve. The following system of
multivariats is solved. The last positivity constraint is added in
order to eliminate the diagonal solutions.
< Crv(u) - CntrCrv(w), Crv'(u) > = 0,
< Crv(v) - CntrCrv(w), Crv'(v) > = 0,
|| Crv(u) - CntrCrv(w) || - || Crv(v) - CntrCrv(w) || = 0
u - v - SubdivTol*10 > 0
Parameters:
Crv: | The curves to find the circles that is tangent to at two
points.
|
---|
CntrOnCrv: | The curve on which the center of circle should lie.
|
---|
RadiusLB: | Lower-bound on radius of circle.
|
---|
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 *: List of (u, v, w) solution points.
|
---|
See Also:
MvarSCvrCircTanToCrvEndPtCntrOnCrv
MvarCircTanTo2Crvs
Keywords:
(mvar_cvr.c:711)
Prototype:
MvarPtStruct *MvarSCvrCircTanTo2CrvsEndPtNoDiag(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
const CagdPType Pt3,
CagdBType ElimDiagonals,
CagdRType RadiusLB,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes all circles that are tangent to given two curves and pass
through the given point.
Solves for circles' Centers P(x, y), using the following process:
Solve, symbolically for P in the following 2x2 system by Cremmer rule:
||C1(u) - P||^2 = ||C2(v) - P||^2,
||C1(u) - P||^2 = ||Pt3 - P||^2,
and substitute P into the following 2 euqations and solve 2 equations
in (u, v):
< C1(u) - P, C1'(u) > = 0,
< C2(v) - P, C2'(v) > = 0,
Parameters:
Crv1, Crv2: | The two curves to find the circles that is tangent to
both.
Can be the same curve for self-bisectors (turn
ElimDiagonals on then).
|
---|
Pt3: | The point through which circles should pass.
|
---|
ElimDiagonals: | liminate diagonal solutions if TRUE.
|
---|
RadiusLB: | Lower-bound on radius of circles.
|
---|
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 *: List of (u, v) solution points.
|
---|
See Also:
MvarSCvrCircTanTo3CrvsExprTreeNoDiagonal
MvarCircTanTo2Crvs
Keywords:
(mvar_cvr.c:351)
Prototype:
MvarPtStruct *MvarSCvrCircTanTo3CrvsExprTreeNoDiagonal(
const CagdCrvStruct *Crv,
CagdRType RadiusLB,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes all circles that are tangent to given curve at three points.
Diagonal solutions are eleminated. The computation is done using
expression trees. Use this for big problems which otherwise require
a lot of memory.
Solves for circles' Centers P(x, y), using the following process:
Solve, symbolically for P in the following 2x2 system by Crammer rule:
||C1(u) - P||^2 = ||C1(v) - P||^2,
||C1(u) - P||^2 = ||C1(w) - P||^2,
and substitute P into the following 3 euqations and solve 3 equations
in (u, v, w):
< C1(u) - P, C1'(u) > = 0,
< C1(v) - P, C1'(v) > = 0,
< C1(w) - P, C1'(w) > = 0.
Diagonal solutions are eliminated by adding the following two constraints.
u - v - SubdivTol*10 > 0,
v - w - SubdivTol*10 > 0.
Parameters:
Crv: | The curves to find the circles that is tangent to at three
points.
|
---|
RadiusLB: | Lower-bound on the radius of circles.
|
---|
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 *: List of (u, v, w) solution points.
|
---|
See Also:
MvarSCvrCircTanTo3Crvs
MvarCircTanTo3Crvs
Keywords:
tri-tangent
(mvar_cvr.c:1138)
Prototype:
MvarPtStruct *MvarSCvrCircTanToCrv2EndPt(const CagdCrvStruct *Crv1,
const CagdPType Pt2,
const CagdPType Pt3,
CagdRType RadiusLB,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes all circles that are tangent to the given curve and
pass through the given two points.
Parameters:
Crv1: | The curve to find the circles that is tangent to.
|
---|
Pt2, Pt3: | The two points through which the circles should pass.
|
---|
RadiusLB: | Lower-bound on radius of circles.
|
---|
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 *: List of (u) solution points.
|
---|
See Also:
MvarCircTanTo2Crvs
Keywords:
(mvar_cvr.c:1047)
Prototype:
MvarPtStruct *MvarSCvrCircTanToCrvEndPt(const CagdCrvStruct *Crv1,
const CagdPType Pt2,
CagdRType RadiusLB,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes all the circles tangent to a given curve and passing throuth the
the given point. The line-segment joining the given point and the ponit on
the curve passes through the center of the circle.
This is done by solving the following univariate.
< C(u) - Pt2, C'(u) > = 0
Parameters:
Crv1: | The input curve to which the circles should be tangent.
|
---|
Pt2: | The point through which the circles should pass.
|
---|
RadiusLB: | Lower-bound on radius of circle.
|
---|
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 *: The list of solutions which consists of points of the
form (u).
|
---|
See Also:
MvarSCvrCircTanTo2CrvEndpt
MvarSCvrCircTanToCrvEndPt
MvarSCvrBinormals
Keywords:
(mvar_cvr.c:59)
Prototype:
MvarPtStruct *MvarSCvrCircTanToCrvEndPtCntrOnCrv(
const CagdCrvStruct *Crv1,
const CagdPType Pt2,
const CagdCrvStruct *CntrOnCrv,
CagdRType RadiusLB,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes all circles that are tangent to a given curve, are passing
through a given point and whose centers lie on another curve.
The following system of multivariates is solved.
< Crv1(u) - CntrCrv(v), Crv1'(u) > = 0,
|| Crv1(u) - CntrCrv(v) || = || Pt - CntrCrv(v) ||
Parameters:
Crv1: | The curve to find the circles that is tangent to.
|
---|
Pt2: | The point through which the circle should pass.
|
---|
CntrOnCrv: | The curve on which the center of circle should lie.
|
---|
RadiusLB: | Lower-bound on radius of circle.
|
---|
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 *: List of (u, v) solution points.
|
---|
See Also:
MvarSCvrCircTanTo2CrvsCntrOnCrv
Keywords:
(mvar_cvr.c:1659)
Prototype:
CagdSrfStruct *MvarSCvrPromoteCrvToSrfWithOtherCrv(
const CagdCrvStruct *Crv,
CagdSrfDirType Dir,
const CagdCrvStruct *OtherCrv)
Description:
Creating a degenerate surface out of the given curve and parametrize
the other direction of the surface to follow the parametrization of
OtherCrv.
Parameters:
Crv: | Curve to promote to a surfaces.
|
---|
Dir: | Direction in surface where Crv will be.
|
---|
OtherCrv: | Curve from which the other direction's parametrization
is to be taken from.
|
---|
Returned Value:
CagdSrfStruct *: Created surfaces or NULL if error.
|
---|
See Also:
MvarSCvrUMinusVSrf
Keywords:
bilinear
(mvar_cvr.c:1599)
Prototype:
CagdSrfStruct *MvarSCvrUMinusVSrf(const CagdRType *TMin, const CagdRType *TMax)
Description:
Creates a scalar surface in R^1 which is given by the following map
(u, v) |-> (u - v).
Parameters:
TMin: | rray containing the two lower bounds of the domain.
|
---|
TMax: | rray containing the two upper bounds of the domain.
|
---|
Returned Value:
CagdSrfStruct *: The surface.
|
---|
See Also:
MvarSCvrPromoteCrvToSrfWithOtherCrv
Keywords:
bilinear
(mvar_ftl.c:29)
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:176)
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:240)
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:259)
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:55)
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:112)
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:85)
Prototype:
CagdRType MvarSkel2DSetMZeroTols(CagdRType SubdivTol, CagdRType NumerTol)
Description:
Sets the tolerances to be used in this module for the 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
(mvardist.c:2152)
Prototype:
CagdCrvStruct *MvarSpiralCrvOnSrf(const CagdSrfStruct *Srf,
CagdSrfDirType Dir,
CagdRType Pitch,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumerTol,
int OutputType)
Description:
Construct a spiraling curve (mostly in Dir up to Pitch) on Srf. Srf is
assumed to be closed/periodic in Dir.
Parameters:
Srf: | Surface on which to seek a Euclidean spiral curve.
|
---|
Dir: | The U or V direction of the spirals This Dir min and max
should be the same (Srf is closed in Dir).
|
---|
Pitch: | Euclidean advancement in one spiral round surface.
|
---|
Step: | Step size during the numeric tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumerTol: | The numerical tolerance to use.
|
---|
OutputType: | - curves in UVT space,
1 - curves in Euclidean space,
2 - merged curves in Euclidean space.
|
---|
Returned Value:
CagdCrvStruct *: Created curve on Srf.
|
---|
See Also:
MvarEucCrvOffsetOnSrf
Keywords:
(mvaccess.c:47)
Prototype:
MvarPolylineStruct *MvarSrfAccessibility(const CagdSrfStruct *CPosSrf,
const CagdSrfStruct *COrientSrf,
const CagdSrfStruct *CCheckSrf,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Derives the visibility domain of CPosSrf, when accessed from the
direction that is specified by COrientSrf, not gouging into CCheckSrf.
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 as CPosSrf.
If NULL, the normal field of CPosSrf is employed.
|
---|
CCheckSrf: | The surface to check gouging against.
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
---|
NumerTol: | Numeric tolerance of a possible numeric improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPolylineStruct *: The boundary of the accessible regions of CPosSrf.
|
---|
Keywords:
(selfintr.c:287)
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:
(ln_access_hyper.c:163)
Prototype:
int MvarSrfCalcAsympDirsCones(const CagdSrfStruct *Srf,
SymbNormalConeStruct *DirsCones)
Description:
Computes bounding cones of the asymptotic directions of a surface. Up to
two cones can be found.
Parameters:
Srf: | The surface for which to find the bounds of the asymptotic
directions.
|
---|
DirsCones: | Out parameter: the array of bounding cones of the asymptotic
directions of the surface. The array must be long enough to
contain up to two cones.
|
---|
Returned Value:
int: The number of asymptotic directions on the surface.
|
---|
See Also:
MvarSrfCalcAsympDirsVolume
MvarSrfCalcAsympDirsCoeffs
Keywords:
asymptotic directions
bounding volume
(ln_access_hyper.c:39)
Prototype:
MvarMVStruct *MvarSrfCalcAsympDirsVolume(const CagdSrfStruct *Srf)
Description:
Computes bounding volumes of the asymptotic directions of a surface, as
multivariates. The general form of the multivariates is:
a(r) * Su(u,v) + b(r) * Sv(u,v), where Su, Sv, are the partial derivatives
of the surface, and a(r), b(r) are the ranges of the coefficients of the
asymptotic directions expressed as a function of parameter r. For more
information on the computation of a(r), b(r), see:
SymbSrfCalcAsympDirsCoeffs.
Parameters:
Srf: | The surface for which to find the bounds of the asymptotic
directions.
|
---|
Returned Value:
MvarMVStruct *: The multivariates which bound the asymptotic directions
of the surface. A list of up to two multivariates can be
returned.
|
---|
See Also:
MvarSrfCalcAsympDirsCoeffs
Keywords:
asymptotic directions
bounding volume
(self_inter_ofst.c:907)
Prototype:
IPObjectStruct *MvarSrfFindOffsetSelfInter(const CagdSrfStruct *Srf,
CagdRType OffsetDist,
CagdRType SubdivTol,
CagdRType NumericTol,
int OutputType)
Description:
Main routine to find the unfiltered global self-intersection curves in
offset surface by solving multi-variate constraints equations with
inequality constraints.
*
Example experiment setting used:
SubdiviTol = 0.01, NumericTol = 1e-8
Currently StepSize and UVRTInequalityTol (eps used to remove trivial
solutions) is 0.2 * SubdivTol and 5.0 * SubdivTol, resepctively.
Parameters:
Srf: | Base surface to be offset.
|
---|
OffsetDist: | Distance between the offset surface and the base surface.
|
---|
SubdivTol: | The subdivision tolerance for the solver.
|
---|
NumericTol: | The numeric tolerance for the solver.
|
---|
OutputType: | 0 - return UVST coordinates of solution curves
1 - return UV coordinates of solution curves
2 - return XYZ coordinates of solution curves
|
---|
Returned Value:
IPObjectStruct *: A list of unfiltered global self intersection curves
of the given offset surface.
|
---|
Keywords:
(mvaccess.c:637)
Prototype:
MvarPolylineStruct *MvarSrfFlecnodalCrvs(const CagdSrfStruct *Srf,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumerTol)
Description:
Computes the flecnodal curves on surface Srf = S(u, v). Uses the
univariate MV solver.
Parameters:
Srf: | To compute the flecnodal curves for.
|
---|
Step: | Step size in the curve-tracing stage.
|
---|
SubdivTol: | Accuracy of the subdivision stage of the approximation.
|
---|
NumerTol: | Accuracy of numeric approx.
|
---|
Returned Value:
MvarPolylineStruct *: Flecnodal curves as polylines in (a, b, u, v)
space.
|
---|
See Also:
MvarFlecnodalCrvsCreateMVs
MvarSrfFlecnodalCrvs
Keywords:
(mvaccess.c:717)
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:
(ln_access_hyper.c:227)
Prototype:
CagdBType MvarSrfHyperbolicLocallyAccessibleDirs(
const CagdSrfStruct *Srf,
const CagdVType SrfVAxis,
SymbNormalConeStruct *AccessibleCones)
Description:
Compute a range of locally-accessible directions of a hyperbolic surface
patch. The function computes cones containing all its asymptotic
directions. These cones separate the tangent space of the surface patch
into ranges of directions with negative normal curvature (accessible) and
positive normal curvature (inaccessible). The locally-accessible
directions are represented as cones.
Parameters:
Srf: | The surface for which to find the locally accessible
directions.
|
---|
SrfVAxis: | The (approximate) vertical axis of the surface.
concave, hyperbolic, or mixed.
|
---|
AccessibleCones: | Output parameter. Two cones, representing ranges of
accessible directions.
|
---|
Returned Value:
CagdBType: TRUE is accessible direction were found, FALSE otherwise.
|
---|
See Also:
MvarSrfHyperbolicLocallyAccessibleDirs2
Keywords:
hyperbolic direction
line accessibility
(ln_access_hyper.c:410)
Prototype:
CagdBType MvarSrfHyperbolicLocallyAccessibleDirs2(
const CagdSrfStruct *Srf,
SymbNormalConeStruct *AccessibleCones)
Description:
Compute a range of locally-accessible directions of a hyperbolic surface
patch, similarly to MvarSrfHyperbolicLocallyAccessibleDirs. This function
does not require an approximate vertical axis for the surface, and instead
computes it using SymbNormalConeForSrfToData.
Parameters:
Srf: | The surface for which to find the locally accessible
directions.
|
---|
AccessibleCones: | Output parameter. Two cones, representing ranges of
accessible directions.
|
---|
Returned Value:
CagdBType: TRUE is accessible direction were found, FALSE otherwise.
|
---|
See Also:
MvarSrfHyperbolicLocallyAccessibleDirs
Keywords:
hyperbolic direction
line accessibility
(lnsrfdst.c:117)
Prototype:
CagdRType MvarSrfLineOneSidedMaxDist(const CagdSrfStruct *Srf,
const CagdUVType UV1,
const CagdUVType UV2,
CagdSrfDirType ClosedDir,
CagdRType Epsilon)
Description:
Computes the maximal distance between a given line segment to a given
surface. This is the one sided Hausdorff distance from the line to Srf.
The line segment is assumed to be on the surface and is prescribed by
two surface locations.
The distance is bounded as follow. The composition of Srf(UV1UV2) is
computed and the maximal distance to line is used as an upper bound, UB.
Then, assuming the line is the Z axis, the farthest solution to:
Nz(u, v) = 0,
Nx(u, v) Y(u, v) - Ny(u, v) X(u, v) = 0,
where Srf = (X(u, v), Y(u, v), Z(u, v)), and
(Nx, Ny, Nz) is its normal field, that is smaller than UB is selected.
Parameters:
Srf: | Surface to compute the line distance to.
|
---|
UV1, UV2: | The two points on Srf the prescribes the line.
|
---|
ClosedDir: | If a valid direction the surface is to be treated as closed
in that direction when examining the line segment.
|
---|
Epsilon: | Tolerance of computation.
|
---|
Returned Value:
CagdRType: The maximal distance from a point on the line to nearest
location on the surfaces.
|
---|
See Also:
MvarCrvMaxXYOriginDistance
Keywords:
(mvarbbox.c:1241)
Prototype:
void MvarSrfListPreciseBBox(const CagdSrfStruct *Srfs,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a list of surfaces.
Parameters:
Srfs: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
CagdSrfListBBox
MvarSrfPreciseBBox
Keywords:
bbox
bounding box
(mvarbbox.c:1174)
Prototype:
void MvarSrfPreciseBBox(const CagdSrfStruct *Srf,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a surface.
Parameters:
Srf: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MvarMVBBox
MvarMVPreciseBBox
CagdSrfBBox
Keywords:
bbox
bounding box
(mv_crvtr.c:51)
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:
(ray-srf.c:155)
Prototype:
int MvarSrfRayIntersect(const CagdSrfStruct *Srf,
const CagdVType RayPt,
const CagdVType RayDir,
CagdUVStruct **InterPntsUV)
Description:
Calculates the intersection between a ray and a surface.
Parameters:
Srf: | The surface.
|
---|
RayPt: | Starting point of the ray.
|
---|
RayDir: | he ray's direction.
|
---|
InterPntsUV: | utput parameters that contain all the intersection points
in the UV parametric space of the surface, as linked list.
Can be NULL if this information is not needed.
|
---|
Returned Value:
int: The number of intersection points.
|
---|
Keywords:
(selfintr.c:1214)
Prototype:
MvarPolylineStruct *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 Srf 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 improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPolylineStruct *: Self intersection pllns, as points in E4
(u, v, s, t).
|
---|
See Also:
MvarSrfAntipodalPoints
MvarCrvSelfInterNrmlDev
MvarCrvSelfInterDiagFactor
MvarSrfSelfInterDiagFactor2
Keywords:
(selfintr.c:835)
Prototype:
MvarPolylineStruct *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:
MvarPolylineStruct *: Self intersection pllns, as points in E4
(u, v, s, t).
|
---|
See Also:
MvarSrfAntipodalPoints
MvarCrvSelfInterNrmlDev
MvarSrfSelfInterDiagFactor
Keywords:
(mvaccess.c:229)
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:
(mvarsils.c:41)
Prototype:
IPObjectStruct *MvarSrfSilhouette(const CagdSrfStruct *Srf,
const CagdVType VDir,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType Euclidean)
Description:
Computes the silhouette edges of the given surfaces, orthographically
seen from the given view direction VDir.
Parameters:
Srf: | To compute its silhouette edges.
|
---|
VDir: | View direction vector (a unit vector).
|
---|
Step: | Step size for curve tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
Euclidean: | If TRUE, returns the silhouettes in Euclidean space.
Otherwise, the silhouette edges are returned in the
Parametric domain.
|
---|
Returned Value:
IPObjectStruct *: The silhouettes as piecewise linear edges.
Can include two object, 1st with points.
|
---|
See Also:
SymbSrfOrthotomic
SymbSrfSilhouette
Keywords:
(mvarsils.c:124)
Prototype:
IPObjectStruct *MvarSrfSilhouetteThroughPoint(const CagdSrfStruct *Srf,
const CagdPType VPoint,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdBType Euclidean)
Description:
Computes the silhouette edges of the given surfaces,
seen from the given view point VPoint.
Parameters:
Srf: | To compute its silhouette edges.
|
---|
VPoint: | A point location.
|
---|
Step: | Step size for curve tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
Euclidean: | If TRUE, returns the silhouettes in Euclidean space.
Otherwise, the silhouette edges are returned in the
Parametric domain.
|
---|
Returned Value:
IPObjectStruct *: The silhouettes as piecewise linear edges.
Can include two object, 1st with points.
|
---|
See Also:
SymbSrfOrthotomic
SymbSrfSilhouette
MvarSrfSilhouetteThroughPoint2
Keywords:
(mvarsils.c:188)
Prototype:
struct IPObjectStruct *MvarSrfSilhouetteThroughPoint2(
MvarMVStruct *SrfMv,
const MvarMVStruct *NrmlMv,
const CagdPType VPoint,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes the silhouette edges of the given surfaces,
seen from the given view point VPoint.
Parameters:
SrfMv: | A MultiVariate problem for the surface.
This variable will be translated by -VPoint, in place.
|
---|
NrmlMv: | A MultiVariate for the normals field of SrfMV.
|
---|
VPoint: | A point location.
|
---|
Step: | Step size for curve tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
Returned Value:
struct IPObjectStruct *: The silhouettes as piecewise linear edges.
Can include two object, 1st with points.
|
---|
See Also:
SymbSrfOrthotomic
SymbSrfSilhouette
MvarSrfSilhouetteThroughPoint
Keywords:
(mvarpole.c:91)
Prototype:
TrimSrfStruct *MvarSrfSplitPoleParams(const CagdSrfStruct *Srf,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType OutReach)
Description:
Split the given rational surface at its poles, if any, by solving for
the zeros of the surface's denominator.
Parameters:
Srf: | Rational surface to split at its poles.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
OutReach: | Small offset to clip poles regions at, zero to disable.
|
---|
Returned Value:
TrimSrfStruct *: Trimmed surfaces, divided at all poles, or NULL if
no poles.
|
---|
See Also:
CagdPointsHasPoles
SymbCrvsSplitPoleParams
Keywords:
(mvbisect.c:254)
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:860)
Prototype:
MvarZeroSolutionStruct *MvarSrfSrfBisectorApprox(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
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.
Because 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 correspondence
between the (u, v) locations on 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.
|
---|
SubdivTol: | Tolerance of the first zero set finding subdivision stage.
|
---|
NumericTol: | olerance of the second zero set finding numeric stage.
|
---|
Returned Value:
MvarZeroSolutionStruct *: Either a list of polyline loops or a list of
triangles.
|
---|
See Also:
MvarMVsBisector
MvarCrvSrfBisector
MvarSrfSrfBisector
MvarCrvSrfBisectorApprox
Keywords:
bisectors
(mvbisect.c:1016)
Prototype:
VoidPtr MvarSrfSrfBisectorApprox2(const MvarMVStruct *CMV1,
const MvarMVStruct *CMV2,
int OutputType,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes an approximation to the bisector of two surfaces - old version
that does not use the 2D solver.
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.
Because 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 correspondence
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
(ssi_cache.c:153)
Prototype:
CagdBType MvarSrfSrfCacheShouldAssignIds(const MvarSrfSrfInterCacheStruct
*DataCache)
Description:
Returns if it is the cache responsibility for assigning surface Ids.
Parameters:
Returned Value:
CagdBType: TRUE iff the cache is responsible for assigning surfaces Ids.
|
---|
Keywords:
(mvarintr.c:901)
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
computationally 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 improvement
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
Keywords:
(mvar_ssi.c:641)
Prototype:
MvarPolylineStruct *MvarSrfSrfInter(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes intersection curve of two surfaces.
Parameters:
Srf1, Srf2: | wo surfaces to be intersected.
|
---|
Step: | Distance (step) in direction of tangent vec., while tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | he numerical tolerance to use.
|
---|
Returned Value:
MvarPolylineStruct *: The list of polylines which approximate the curve.
Each polyline corresponds to the topologically
isolated component of the curve and is in R^4, the
parametric spaces of both surfaces.
|
---|
See Also:
MvarMVsZeros1DMergeSingularPts
MvarMVsZeros1D
MvarSrfZeroSet
MvarCrvSrfSingularInter
MvarSrfSrfInterDisc
Keywords:
(ssi_cache.c:180)
Prototype:
MvarSrfSrfInterCacheDataStruct *MvarSrfSrfInterCacheAddData(
MvarSrfSrfInterCacheStruct *SSICache,
CagdSrfStruct *Srf1,
CagdSrfStruct *Srf2,
MvarPolylineStruct *InterData)
Description:
Adds a copy of the result of intersection of two surfaces to the cache.
The order of the surfaces is not important.
Parameters:
SSICache: | The cache.
|
---|
Srf1: | he first surface .
|
---|
Srf2: | he second surface .
|
---|
InterData: | ntersection result of Srf1 and Srf2.
|
---|
Returned Value:
MvarSrfSrfInterCacheDataStruct *: Cached data of the intersection. The
data is not added twice if already exists.
|
---|
Keywords:
(ssi_cache.c:33)
Prototype:
MvarSrfSrfInterCacheStruct *MvarSrfSrfInterCacheAlloc(
IPAttrIDType AttribID,
CagdBType ShouldAssignIds)
Description:
Allocated new SSI cache structure.
Each surface in the cache should have a unique integer Id attribute. Since
the attributes are copied when the surface is copied, it is not necessary
to use the same surface for querying the cache, a copy can be used also.
Parameters:
AttribID: | The surface Id attribute name.
|
---|
ShouldAssignIds: | f FALSE, the user is responsible for assigning Ids for
the surfaces, otherwise it is the cache responsibility.
|
---|
Returned Value:
MvarSrfSrfInterCacheStruct *: New cache structure.
|
---|
Keywords:
(ssi_cache.c:250)
Prototype:
void MvarSrfSrfInterCacheClear(MvarSrfSrfInterCacheStruct *SSICache)
Description:
Empties a given SSI cache.
Parameters:
Returned Value:
Keywords:
(ssi_cache.c:274)
Prototype:
void MvarSrfSrfInterCacheFree(MvarSrfSrfInterCacheStruct *SSICache)
Description:
Deallocated memory of a given SSI cache.
Parameters:
Returned Value:
Keywords:
(ssi_cache.c:85)
Prototype:
MvarSrfSrfInterCacheDataStruct *MvarSrfSrfInterCacheGetData(
const MvarSrfSrfInterCacheStruct *SSICache,
const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Searches for a cached result of intersection of two given surfaces.
The order between the surfaces is not important.
Parameters:
SSICache: | The cache.
|
---|
Srf1: | The first surface.
|
---|
Srf2: | The second surface.
|
---|
Returned Value:
MvarSrfSrfInterCacheDataStruct *: Cached result of the intersection, or
NULL if not found in the cache.
|
---|
Keywords:
(ssi_cache.c:60)
Prototype:
int MvarSrfSrfInterCacheGetSrfId(const MvarSrfSrfInterCacheStruct *SSICache,
const CagdSrfStruct *Srf)
Description:
Returns the Id of a given surface.
Parameters:
SSICache: | The cache.
|
---|
Srf: | The surface to get its Id.
|
---|
Returned Value:
int: integer Id of the surface, or IP_ATTR_BAD_INT if doesn't exist.
|
---|
Keywords:
(mvar_ssi.c:322)
Prototype:
MvarPolylineStruct *MvarSrfSrfInterDisc(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Computes intersection curve of two surfaces. This function detects
special cases of C^1 discontinuity curves and treat them first.
Then, the regular SSI cases are resolved by MvarSrfSrfIner.
Parameters:
Srf1: | First surface to be intersected.
|
---|
Srf2: | Second surface to be intersected.
|
---|
Step: | Step size for curve tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
Returned Value:
MvarPolylineStruct *: The list of polylines which approximate the curve.
Each polyline corresponds to the topologically
isolated component of the curve and is in R^4, the
parametric spaces of both surfaces.
|
---|
See Also:
MvarMVsZeros1DMergeSingularPts
MvarMVsZeros1D
MvarSrfZeroSet
MvarCrvSrfSingularInter
MvarSrfSrfInter
Keywords:
(mvar_ssi.c:1058)
Prototype:
IrtBType MvarSrfSrfInterExamineBBoxes(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Examine bounding boxes for no-overlap for quick pruning.
Parameters:
Srf1, Srf2: | Surfaces to be intersected.
|
---|
Returned Value:
IrtBType: TRUE if the surfaces BBoxes intersect, FALSE otherwise.
|
---|
Keywords:
(mvar_ssi.c:1031)
Prototype:
CagdBType MvarSrfSrfInterNormalizeDomain(CagdBType NewValue)
Description:
Set a flag to control if domains of interesting surfaces are temporarily
normalized to a canonical domain, before SSI takes place.
This normalization have virtually no affect on the SSI output.
Parameters:
NewValue: | The new value to set to the flag.
|
---|
Returned Value:
CagdBType: The previous value of the flag.
|
---|
See Also:
MvarMVCompose
MvarMVComposeBzrBzr
MvarComposeExtractTargetSubdomain
Keywords:
(hasdrf3d.c:1023)
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
MvarDistSrfPoint
MvarCrvSrfMinimalDist
Keywords:
(mink_sum.c:116)
Prototype:
struct IPObjectStruct *MvarSrfSrfMinkowskiSum(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdRType SubdivTol,
CagdRType CrvTraceStep,
CagdRType NumericTol,
int ParallelNrmls,
CagdRType OffsetTrimDist)
Description:
Computation of the Minkowski sum of two surfaces. The sum is defined as
the locus of points Srf1(u,v) + Srf2(r,s) in R^3, for (u,v) and (r,s)
pairs in the parameter spaces, such that the corresponding normal vectors
N1(u,v) and N2(r,s) are parallel. In other words, we solve:
*
< Srf1_u x Srf1_v , Srf2_r > = 0,
< Srf1_u x Srf1_v , Srf2_s > = 0.
*
The solution triangles (or polylines) in (u,v,r,s) space, are then mapped
to R^3 using the post-process mapping Srf1(u,v) + Srf2(r,s).
Parameters:
Srf1, Srf2: | The surfaces to compute their Minkowski sum.
|
---|
SubdivTol: | The subdivision tolerance for the solver call.
|
---|
CrvTraceStep: | Univariate curve tracing step size.
|
---|
NumericTol: | The numeric tolerance for the solver call.
|
---|
ParallelNrmls: | A flag determining if the problem solved shall be
parallel normal vectors only (1), anti-parallel
normals only (-1) or both (0).
|
---|
OffsetTrimDist: | When positive, indicates that the Minkowski sum
is an offset problem, under the convention that the
second surface, Srf2, is a sphere of radius
OffsetTrimDist, and the value is used in the
offset trimming. If negative, trimming is skipped
(the problem is not an offset problem, or any other
reason).
|
---|
Returned Value:
struct IPObjectStruct *: List of polygons or polylines (according to
the setting of the bivariate solver), approximating
the Minkowski sum.
|
---|
See Also:
MvarSrfSrfMinkSumMVs
Keywords:
(mvarintr.c:301)
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
computationally 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 improvement
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
MvarSrfSrfContact
Keywords:
(mvar_ssi.c:828)
Prototype:
CagdBType MvarSrfSrfTestInter(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Tests if the given two surfaces intersect.
Parameters:
Srf1, Srf2: | The two surfaces to be tested for intersection.
|
---|
Step: | Distance (step) in direction of tangent vec., while
tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
Returned Value:
CagdBType: TRUE if the surfaces intersect, FALSE otherwise.
|
---|
See Also:
MvarSrfSrfInter
MvarMVsZeros1DMergeSingularPts
MvarMVsZeros1D
MvarSrfZeroSet
MVarCrvSrfSingularInter
MvarSrfSrfInterC1Disc
MvarSrfSrfInterNormalizeDomain
Keywords:
(offset2.c:300)
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 improvement 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:88)
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:
(mvar_ssi.c:966)
Prototype:
MvarPolylineStruct *MvarSrfZeroSet(const CagdSrfStruct *Surface,
int Axis,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol,
MvarMVsZerosVerifyAllSolsCBFuncType
OutputPtsFilterCB,
void *OutputPtsFilterCBData)
Description:
Computes the zeros of some surface.
Parameters:
Surface: | Cagd surface to compute its zeros.
|
---|
Axis: | Axis of Surface to consider its zeros.
|
---|
Step: | Distance (step) in direction of tangent vec., while tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | he numerical tolerance to use.
|
---|
OutputPtsFilterCB: | Optional filtering function for output.
NULL to disable.
|
---|
OutputPtsFilterCBData: | Optional data to to pass to OutputPtsFilterCB.
|
---|
Returned Value:
MvarPolylineStruct *: The list of polylines which approximate the zeros.
Each polyline corresponds to the topologically
isolated component of the curve and is in R^2, the
parametric spaces of the surface.
|
---|
See Also:
MvarCrvZeroSet
MvarMVsZeros1D
MvarSrfSrfInter
Keywords:
(mvarstpl.c:429)
Prototype:
MvarPtStruct *MvarStewartPlatform2Solve(const CagdPType BottomBasePoints[3],
const CagdRType BotTopEdgeLengths[6],
const CagdRType TopEdgeLengths[3],
CagdBType Rational,
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
A second solver for Stewart platform that is optimized. The original
constraints are mapped to find a triangle (of TopEdgeLengths edges) whose
vertices resides on three computed circles Ci, as follows,
1. Compute circles Ci, i = 0, 1, 2, as the locus of points of distance
BotTopEdgeLengths[2i], and BotTopEdgeLengths[2i+1] from bottom base
points BottomBasePoints[i], BottomBasePoints[(i+1)%3], respectively.
2. Solve for the three constraints and three unknowns
|| Ci - C[(i+1)%3] || = TopEdgeLengths[i].
Parameters:
BottomBasePoints: | The three points of the bottom base.
|
---|
BotTopEdgeLengths: | he six edge lengths of rods connection bottom and
top bases.
|
---|
TopEdgeLengths: | The three edge lengths of the top base.
|
---|
Rational: | TRUE to represent the circles precisely as rational,
FALSE to approximate the circles as polynomials.
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
---|
NumericTol: | Numeric tolerance of a possible numeric improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPtStruct *: Computed solution locations.
|
---|
See Also:
MvarStewartPlatformSolve
MvarStewartPlatformGenEqns
Keywords:
(mvarstpl.c:205)
Prototype:
MvarMVStruct **MvarStewartPlatformGenEqns(const CagdPType BottomBase[3],
const CagdRType TopBaseEdgeLengths[6],
const CagdPType WorkDomain[2])
Description:
Derive nine constraints for a Stewart platform, so that given the
lengths of the six rods connection the bottom and top bases, we can solve
the problem.
The bottom base is specified and so are the lengths of the edges of the
top base.
Parameters:
BottomBase: | Three vertices of triangle forming the base, denoted Pi.
|
---|
TopBaseEdgeLengths: | Three edge lengths between three vertices Qi, of
top base.
|
---|
WorkDomain: | The Euclidean space working domain min./max. range.
|
---|
Returned Value:
MvarMVStruct **: Dynamically allocated vector of nine constraints, in
nine unknowns (bottom base with given vertices Pi, top
vertices with unknown vertices Qi) as follows:
|| Q1 - P1 || = L1,
|| Q1 - P2 || = L2,
|| Q2 - P2 || = L3,
|| Q2 - P3 || = L4,
|| Q3 - P3 || = L5,
|| Q3 - P1 || = L6,
|| Q1 - Q2 || = D1,
|| Q2 - Q3 || = D2,
|| Q3 - Q1 || = D3,
where Li are the six BaseConnectLengths and Dj are lengths
between adjacent edges of the top, moving, base.
Note the Li are not given and so in this building
process the are assumed all zero.
|
---|
See Also:
MvarStewartPlatformSolve
Keywords:
(mvarstpl.c:289)
Prototype:
MvarPtStruct *MvarStewartPlatformSolve(const MvarMVStruct **AllCnstrnts,
const CagdRType BaseConnectLengths[6],
const CagdPType WorkDomain[2],
CagdRType SubdivTol,
CagdRType NumericTol)
Description:
Derive nine constraints for a Stewart platform, so that given the
lengths of the six rods connection the bottom and top bases, we can solve
the problem.
The bottom base is specified and so are the lengths of the edges of the
top base.
Parameters:
AllCnstrnts: | Nine constraints without base connecting length set.
|
---|
BaseConnectLengths: | Six specific edge-lengths of rods connection bases.
|
---|
WorkDomain: | The Euclidean space working domain min./max. range.
|
---|
SubdivTol: | Tolerance of the solution. This tolerance is measured in
the parametric space of the surfaces.
|
---|
NumericTol: | Numeric tolerance of a possible numeric improvement stage.
The numeric stage is employed if NumericTol < SubdivTol.
|
---|
Returned Value:
MvarPtStruct *: Solution(s) of the Qi locations, if any.
|
---|
See Also:
MvarStewartPlatformGenEqns
Keywords:
(zrsolver.c:2899)
Prototype:
void MvarSubDmnInfoStructFree(MvarZeroSubDmnInfoStruct *InfoStruct,
int NumOfMVs)
Description:
Deallocates a sub-domain info' structure.
Parameters:
InfoStruct: | The info' structure to be freed.
|
---|
NumOfMVs: | Number of multi-variates held by the info' structure.
|
---|
Returned Value:
See Also:
MvarSubDmnInfoStructNew
Keywords:
(zrsolver.c:2869)
Prototype:
MvarZeroSubDmnInfoStruct *MvarSubDmnInfoStructNew(MvarMVStruct **MVs,
MvarMVDirType ProjDir1,
MvarMVDirType ProjDir2)
Description:
Allocates the slots required for a sub-domain info' structure.
Parameters:
MVs: | Vector of multivariate constraints, defined in the
required sub-domain.
|
---|
ProjDir1: | First coordinate direction of the two directions w.r.t.
which the IPT succeeded.
|
---|
ProjDir2: | Second coordinate direction of the two directions w.r.t.
which the IPT succeeded.
|
---|
Returned Value:
MvarZeroSubDmnInfoStruct *: The new info' structure.
|
---|
See Also:
MvarSubDmnInfoStructFree
Keywords:
(ray-srf.c:47)
Prototype:
MvarPtStruct *MvarSurfaceRayIntersection(const CagdSrfStruct *Srf,
const IrtPtType RayOrigin,
const IrtVecType RayDir,
IrtRType SubdivTol)
Description:
Computes a ray - surface intersection by finding two planes through
the ray and solve for points on the surface that are on both plane (i.e.
the ray).
Let S(u, v) = (x(u, v), y(u, v), z(u, v)) and
let the two planes be Aix + Biy + CiZ + Di = 0, i = 1,2.
Then, solve for the following two algebraic constraints:
Aix(u, v) + Biy(u, v) + Ciz(u, v) + Di = 0, i = 1,2.
in two unknowns.
This function returns ALL intersections of Srf and the infinite line
holding the ray, from which the desired solution(s) must be filtered.
Parameters:
Srf: | The surface to seek intersection(s) with a ray.
|
---|
RayOrigin, RayDir: | Parameters of ray.
|
---|
SubdivTol: | Subdivision tolerance of the solution.
|
---|
Returned Value:
MvarPtStruct *: List of all intersection locations of Srf (as UV
coordinates in Srf) with ray.
|
---|
See Also:
MvarCrvAntipodalPoints
Keywords:
(mvtrivar.c:938)
Prototype:
int MvarTVRglrIsNegJacobian(const TrivTVStruct *TV)
Description:
Test at a middle point of the given trivariate, assumed regular, is
inverted and has a negative Jacobian.
Parameters:
TV: | The trivariate to consider.
|
---|
Returned Value:
int: TRUE if Jacobian is inverted (negative), FALSE if positive.
|
---|
See Also:
TrivTVEvalJacobian
MvarCalculateTVJacobian
TrivComputeJacobian
Keywords:
(ms_sphr.c:49)
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:
(zrmv2dTp.c:1224)
Prototype:
void MvarTriangleFree(MvarTriangleStruct *Tr)
Description:
Deallocates and frees all slots of a multi-variate triangle structure.
Parameters:
Tr: | Multivariate triangle to free.
|
---|
Returned Value:
See Also:
MvarTriangleNew
MvarTriangleFreeList
Keywords:
(zrmv2dTp.c:1245)
Prototype:
void MvarTriangleFreeList(MvarTriangleStruct *TrList)
Description:
Deallocates and frees a list of triangle structures.
Parameters:
TrList: | Multivariate triangles list to free.
|
---|
Returned Value:
See Also:
MvarTriangleNew
MvarTriangleFree
Keywords:
(zrmv2dTp.c:1185)
Prototype:
MvarTriangleStruct *MvarTriangleNew(int Dim)
Description:
Allocates the memory required for a new multi-variate triangle.
Parameters:
Dim: | Number of dimensions of each vertex.
|
---|
Returned Value:
MvarTriangleStruct *: An uninitialized triangle.
|
---|
See Also:
MvarTriangleFree
Keywords:
(mvcomps2.c:447)
Prototype:
MvarComposedSrfStruct *MvarTrimComposeMVSrf(const MvarMVStruct *MV,
const CagdSrfStruct *Srfs)
Description:
Compose a list of surfaces (Srfs) into a multivariate (MV), such that
the surfaces are allowed to cross knot values of the mapping multivariate.
The results are returned as trimmed surfaces, except surface patches which
result from only iso-parametric subdivisions, which are represented as
tensor-product surfaces.
Parameters:
MV: | The mapping multivariate.
|
---|
Srfs: | The surfaces to compose into MV.
|
---|
Returned Value:
MvarComposedSrfStruct *: The composed surfaces, represented as either
trimmed surfaces, or, when possible
tensor-product surfaces.
|
---|
See Also:
MvarUntrimComposeMVSrf
MvarComposeMVMdl
MvarComposeMVVModel
Keywords:
composition
trimming
multivariates
(mvcomps2.c:860)
Prototype:
MvarComposedTrivStruct *MvarTrimComposeMVTV(const MvarMVStruct *MV,
const TrivTVStruct *TV)
Description:
Compose a list of trivariates (TV) into a multivariate (MV), allowing
the surfaces of the models to cross knot values of the mapping
multivariate.
Parameters:
MV: | The mapping multivariate.
|
---|
TV: | The trivariates to compose into MV.
|
---|
Returned Value:
MvarComposedTrivStruct *: The composed geometry, a mixed list of
trivariates and V-models.
|
---|
See Also:
MvarComposeMVVModel
Keywords:
composition
trimming
multivariates
V-model
(mvarbbox.c:1031)
Prototype:
void MvarTrimSrfListPreciseBBox(const TrimSrfStruct *TSrfs,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a list of trimmed surfaces.
Parameters:
TSrfs: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MvarSrfListPreciseBBox
MvarTrimSrfPreciseBBox
CagdSrfListBBox
MvarSrfPreciseBBox
Keywords:
bbox
bounding box
(mvarbbox.c:973)
Prototype:
void MvarTrimSrfPreciseBBox(const TrimSrfStruct *TSrf,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a trimmed surface.
Parameters:
TSrf: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MvarSrfPreciseBBox
MvarTrimSrfListPreciseBBox
MvarMVBBox
MvarMVPreciseBBox
CagdSrfBBox
Keywords:
bbox
bounding box
(ray-srf.c:215)
Prototype:
int MvarTrimSrfRayIntersect(const TrimSrfStruct *TrimSrf,
const CagdVType RayPt,
const CagdVType RayDir,
CagdUVStruct **InterPntsUV)
Description:
Calculates the intersection between a ray and a trimmed surface.
Parameters:
TrimSrf: | The trimmed surface.
|
---|
RayPt: | Starting point of the ray.
|
---|
RayDir: | The ray's direction.
|
---|
InterPntsUV: | utput parameter that contains the intersection points in
the UV parametric space of the surface.
Can be NULL if this information is not needed.
|
---|
Returned Value:
int: The number of intersection points.
|
---|
See Also:
MvarSrfRayIntersect
Keywords:
(mvbisect.c:1373)
Prototype:
MvarMVStruct **MvarTrisector3DCreateMVs(VoidPtr FF1,
VoidPtr FF2,
VoidPtr FF3,
CagdRType *BBoxMin,
CagdRType *BBoxMax,
int *Eqns)
Description:
Creates a set of MV constraints for the computation of a trisector curve
of three objects (bspsline curves or surfaces) in R3. The trisector is
considered to lie inside a spatial domain BBox.
Parameters:
FF1, FF2, FF3: | Freeform objects (curve or surface) to compute
their trisector.
|
---|
BBoxMin, BBoxMax: | The bounding box, where the trisector is computed.
|
---|
Eqns: | Will be updated with the number of MVs constraints.
|
---|
Returned Value:
MvarMVStruct **: The multivar system, its solution is the desired
trisector curve in R3.
|
---|
Keywords:
(mvbisect.c:1578)
Prototype:
MvarPolylineStruct *MvarTrisectorCrvs(VoidPtr FF1,
VoidPtr FF2,
VoidPtr FF3,
CagdRType Step,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType *BBoxMin,
CagdRType *BBoxMax)
Description:
Computes a trisector curve of three objects (curves or surfaces).
The trisector is considered to lie inside a spatial domain BBox.
Parameters:
FF1, FF2, FF3: | Objects to compute their trisector.
|
---|
Step: | Stepsize for curve tracing.
|
---|
SubdivTol: | The subdivision tolerance to use.
|
---|
NumericTol: | The numerical tolerance to use.
|
---|
BBoxMin, BBoxMax: | he bounding box, where the trisector is computed.
|
---|
Returned Value:
MvarPolylineStruct *: A (list of) polyline(s) that approximates
the trisector curve.
|
---|
Keywords:
(mvarjimp.c:608)
Prototype:
void MvarTrivJacobianImprove(TrivTVStruct *TV,
CagdRType StepSize,
int NumIters)
Description:
Attempt the improve the Jacobian of the given trivariate by adjusting
interior control-points of the TV.
Parameters:
TV: | To try and improve (make more uniform) its Jacobian.
|
---|
StepSize: | Numerical step size to move along the gradient (at the
Jacobian extreme values.)
|
---|
NumIters: | Number of numerical iterations to allow in the improvement
process.
|
---|
Returned Value:
See Also:
MvarCalculateTVJacobian
SymbSrfJacobianImprove
Keywords:
(mvtrivar.c:73)
Prototype:
TrivTVStruct *MvarTrivarBoolOne(const CagdSrfStruct *Srf)
Description:
Computes the volumetric (trivariate) boolean sum as follows:
1. Divide Srf into 4 side patches, in U.
2. Compute the volumetric boolean sum for the 4 patches in 1 and 2.
Two cap patches will be computed on the fly.
Parameters:
Srf: | Surface to derive a trivariate volume for its interior.
|
---|
Returned Value:
TrivTVStruct *: A trivariate volume boolean sum of Srf.
|
---|
See Also:
MvarTrivarBoolSum
Keywords:
(mvtrivar.c:168)
Prototype:
TrivTVStruct *MvarTrivarBoolSum(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
const CagdSrfStruct *Srf3,
const CagdSrfStruct *Srf4,
const CagdSrfStruct *Srf5,
const CagdSrfStruct *Srf6)
Description:
Computes the volumetric (trivariate) boolean sum as follows:
Srf1/2/3/4 are around the sweep surface and Srf5/6 are its two caps.
The boolean sum is computed as follows:
T0 = Trilinear(4Corners(Srf1), 4Corners(Srf3))
T1 = RuledVolume(Srf1, Srf3)
T2 = RuledVolume(Srf2, Srf4)
T3 = RuledVolume(Srf5, Srf6)
T4 = RuledVolume(RuledSrf(Bndry(Srf1, UMin), Bndry(Srf1, UMax)),
RuledSrf(Bndry(Srf3, UMin), Bndry(Srf3, UMax)),
T5 = RuledVolume(RuledSrf(Bndry(Srf2, VMin), Bndry(Srf2, VMax)),
RuledSrf(Bndry(Srf4, VMin), Bndry(Srf4, VMax)),
T6 = RuledVolume(RuledSrf(Bndry(Srf5, VMin), Bndry(Srf5, VMax)),
RuledSrf(Bndry(Srf6, VMin), Bndry(Srf6, VMax)),
And the final boolean sum equals:
BoolSumVolume = T1 + t2 + t3 - (T4 + t5 + t6) + T0
Parameters:
Srf1, Srf2, Srf3, Srf4, Srf5, Srf6: | Surfaces to derive a trivariate
volume for its interior. If Srf5 or Srf6 are NULL, they are
generated as surface Boolean sum, from V boundaries of Srf1/2/3/4.
|
---|
Returned Value:
TrivTVStruct *: A trivariate volume boolean sum of Srf.
|
---|
See Also:
MvarTrivarBoolOne
MvarTrivarBoolSum2
MvarTrivarBoolSumRtnl
Keywords:
(mvtrivar.c:474)
Prototype:
TrivTVStruct *MvarTrivarBoolSum2(const CagdSrfStruct *UMin,
const CagdSrfStruct *UMax,
const CagdSrfStruct *VMin,
const CagdSrfStruct *VMax,
const CagdSrfStruct *WMin,
const CagdSrfStruct *WMax)
Description:
Computes the volumetric (trivariate) boolean sum as in MvarTrivarBoolSum
but uses the 6 faces of a cube, as extracted from a face of an existing
trivariate. In other words "TV = BoolSum2(TrivBndrySrfsFromTV(TV))".
Parameters:
UMin, UMax, VMin, VMax, WMin, WMax: | Surfaces to derive a trivariate
volume for its interior.
|
---|
Returned Value:
TrivTVStruct *: A trivariate volume boolean sum of Srf.
|
---|
See Also:
MvarTrivarBoolSum
MvarTrivarBoolOne
MvarTrivarBoolSumRtnl
Keywords:
(mvtrivar.c:666)
Prototype:
TrivTVStruct *MvarTrivarBoolSum3(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
const CagdSrfStruct *Srf3,
const CagdSrfStruct *Srf4,
const CagdSrfStruct *Srf5,
const CagdSrfStruct *Srf6)
Description:
Computes the volumetric (trivariate) boolean sum as in MvarTrivarBoolSum
but reorient the surfaces automatically so they all align properly,
following Srf1, that is not modified.
Parameters:
Srf1, Srf2, Srf3, Srf4, Srf5, Srf6: | Surfaces to derive a trivariate
volume for its interior. If Srf5 or Srf6 are NULL, they are
generated as surface Boolean sum, from V boundaries of Srf1/2/3/4.
Srf5 and Srf6 are optional.
|
---|
Returned Value:
TrivTVStruct *: A trivariate volume boolean sum of Srf.
|
---|
See Also:
MvarTrivarBoolOne
MvarTrivarBoolSum2
Keywords:
(mvtrivar.c:1082)
Prototype:
TrivTVStruct *MvarTrivarBoolSumRtnl(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
const CagdSrfStruct *Srf3,
const CagdSrfStruct *Srf4,
const CagdSrfStruct *Srf5,
const CagdSrfStruct *Srf6)
Description:
Computes a volumetric (trivariate) boolean sum as in MvarTrivarBoolSum3.
However, this function, for rational input srfs, will not raise the
degrees at the cost of changing the internal parametrization.
Parameters:
Srf1, Srf2, Srf3, Srf4, Srf5, Srf6: | Surfaces to derive a trivariate
volume for its interior. If Srf5 or Srf6 are NULL, they are
generated as surface Boolean sum, from V boundaries of Srf1/2/3/4.
|
---|
Returned Value:
TrivTVStruct *: A trivariate volume boolean sum of Srf.
|
---|
See Also:
CagdBoolSumSrfRtnl
MvarTrivarBoolSum
MvarTrivarBoolSum3
Keywords:
Boolean sum
surface constructors
(mvtrivar.c:764)
Prototype:
TrivTVStruct *MvarTrivarCubicTVFit(const TrivTVStruct *TV)
Description:
Construct a tricubic Bezier trivariate that fits the input trivariate at
corner points and match corner derivatives.
Parameters:
TV: | To approximate as a tricubic.
|
---|
Returned Value:
TrivTVStruct *: A tricubic Bezier trivariate, fitting the corners
positions and match corners tangents.
|
---|
See Also:
MvarTrivarQuadraticTVFit
CagdCubicSrfFit
CagdCubicCrvFit
Keywords:
(mvtrivar.c:1308)
Prototype:
TrivTVStruct *MvarTrivarHalfBoolSum(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Computes a trivariate representing the half Boolean sum of the given
surfaces, as follows:
Srf1/2 are two surfaces having a shared boundary.
Srf1/2 are reoriented so their shared boundary will be at VMin.
The half Boolean sum is computed as follows:
C(u) = Bndry(Srf2, VMin), (the shared boundary)
HalfBoolSumTV(u, v, w) = Srf1(u ,v) + Srf2(u, w) - C(u).
Parameters:
Srf1, Srf2: | To compute half Boolean sum trivariate for.
|
---|
Returned Value:
TrivTVStruct *: A trivariate volume half Boolean sum of Srf1, Srf2.
|
---|
See Also:
MvarTrivarBoolSum
MvarTrivarBoolOne
Keywords:
(mvarbbox.c:930)
Prototype:
void MvarTrivarListPreciseBBox(const TrivTVStruct *Trivars,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a list of trivariate freeform
function.
Parameters:
Trivars: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
TrivTVListBBox
MvarTrivarPreciseBBox
Keywords:
bbox
bounding box
(mvarbbox.c:863)
Prototype:
void MvarTrivarPreciseBBox(const TrivTVStruct *TV,
MvarBBoxStruct *BBox,
CagdRType Tol)
Description:
Computes the precise bounding box for a trivariate freeform function.
Parameters:
TV: | To compute a precise bounding box for.
|
---|
BBox: | Where bounding information is to be saved.
|
---|
Tol: | Tolerance of computations.
|
---|
Returned Value:
See Also:
MvarMVBBox
MvarMVPreciseBBox
TrivTVBBox
Keywords:
bbox
bounding box
(mvtrivar.c:827)
Prototype:
TrivTVStruct *MvarTrivarQuadraticTVFit(const TrivTVStruct *TV)
Description:
Construct a triquadratic Bezier trivariate that fits the input
trivariate corners points and aims for same corners tangent directions.
Parameters:
TV: | To approximate as a triquadratic.
|
---|
Returned Value:
TrivTVStruct *: A triquadratic Bezier trivariate, fitting the end
position and approximate tangent directions.
|
---|
See Also:
MvarTrivarCubicTVFit
CagdCubicSrfFit
CagdCubicCrvFit
Keywords:
(mvarmrph.c:35)
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:1125)
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:
(mvcomps2.c:558)
Prototype:
CagdSrfStruct *MvarUntrimComposeMVSrf(
const MvarMVStruct *MV,
const CagdSrfStruct *Srfs,
CagdQuadSrfWeightFuncType UntrimWeightFunc)
Description:
Compose a list of surfaces (Srfs) into a multivariate (MV), such that
the surfaces are allowed to cross knot values of the mapping multivariate.
The results are returned as untrimmed (tensor-product) surfaces, using
the minimal-weight untrimming algorithm (with the weight provided by
UntrimWeightFunc), or the line-sweep algorithm (if UntrimWeightFunc is
NULL).
Parameters:
MV: | The mapping multivariate.
|
---|
Srfs: | The surfaces to compose into MV.
|
---|
UntrimWeightFunc: | The weight function for the untrimming, or NULL, for
applying the line-sweep algorithm.
|
---|
Returned Value:
CagdSrfStruct *: The composed surfaces, represented as tensor-product
surfaces.
|
---|
See Also:
MvarTrimComposeMVSrf
MvarComposeMVMdl
MvarComposeMVVModel
Keywords:
composition
untrimming
multivariates
(mvar_vec.c:35)
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_vec.c:72)
Prototype:
void MvarVecAddScale(MvarVecStruct *VRes,
const MvarVecStruct *V1,
const MvarVecStruct *V2,
CagdRType Scale2)
Description:
Add two multivariate vectors, second with scale: VRes = V1 + V2*Scale2.
Parameters:
VRes: | Result. Can be one of V1 or V2.
|
---|
V1, V2: | Two input vectors.
|
---|
Scale2: | Scaling factor of V2.
|
---|
Returned Value:
See Also:
MvarVecDotProd
MvarVecSqrLength
MvarVecLength
MvarVecScale
MvarVecNormalize
MvarVecBlend
Keywords:
(mvar_gen.c:1193)
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:1016)
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:
(mvar_vec.c:283)
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_pll.c:344)
Prototype:
int MvarVecCmpTwoVectors(const CagdRType *V1,
const CagdRType *V2,
int Length,
CagdRType Eps)
Description:
A comparison function to examine if the given two vectors are the same.
Parameters:
V1, V2: | Two vectors to compare.
|
---|
Length: | Of the two vectors.
|
---|
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.
2 is returned if the dimensions are different.
|
---|
See Also:
MvarPtDistTwoPoints
MvarPtDistSqrTwoPoints
MvarPtCmpTwoPoints
Keywords:
(mvar_gen.c:1108)
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:1133)
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
(mvar_vec.c:139)
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:1165)
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:1223)
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:
(mvar_vec.c:225)
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:978)
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:
(mvar_vec.c:316)
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_vec.c:393)
Prototype:
int MvarVecOrthogonal2(MvarVecStruct *Dir,
const MvarVecStruct *Vec1,
const MvarVecStruct *Vec2)
Description:
Derives a unit vector Dir that is orthogonal to both Vec1, and Vec2.
Note that in R^2 there is no such vector, in R^3 only one such vector
and in R^n, n > 3, there are infinitly many of which we find one.
Parameters:
Dir: | Newly computed unit vector will be kept here.
|
---|
Vec1, Vec2: | Two vectors we must be orthogonal to. Assumed unit length.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
MvarVecOrthogonalize
MvarVecSetOrthogonalize
MvarVecWedgeProd
Keywords:
(mvar_vec.c:347)
Prototype:
int MvarVecOrthogonalize(MvarVecStruct *Dir, const MvarVecStruct *Vec)
Description:
Updates Dir to be the closest vector to Dir that is orthogonal to Vec.
In essence, apply a Graham Shmidt step. Vectors need not be unit size.
Parameters:
Dir: | Vector to update in place so it will be orthgoonal to Vec.
|
---|
Vec: | Vector to make sure Dir is made orthogonal to.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
MvarVecOrthogonal2
MvarVecSetOrthogonalize
MvarVecWedgeProd
Keywords:
(mvar_gen.c:1062)
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:
(mvar_vec.c:248)
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:
(mvar_vec.c:471)
Prototype:
int MvarVecSetOrthogonalize(const MvarVecStruct **Vecs,
MvarVecStruct **OrthoVecs,
int Size)
Description:
Update the given set of vectors to be of unit size and orthogonal to
each other. Vectors are all assumed of the same dimension.
In essence, apply a Graham Shmidt to all vectors.
Parameters:
Vecs: | Input vectors to make orthonormal.
|
---|
OrthoVecs: | Output vectors that span the same (sub) space as vec but
are orthogonal and unit length (orthognormal).
Can be the same as Vecs.
|
---|
Size: | Number of vectors in Vecs and OrthoVecs vectors of vectors.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
MvarVecOrthogonal
MvarVecOrthogonal2
MvarVecWedgeProd
Keywords:
(mvar_int.c:140)
Prototype:
MvarVecStruct *MvarVecSortAxis(MvarVecStruct *VecList, int Axis)
Description:
Sorts given list of points based on their increasing order in axis Axis.
Sorting is done in place.
Parameters:
VecList: | List of points to sort.
|
---|
Axis: | Axis to sort along: 1,2,3 for X,Y,Z.
|
---|
Returned Value:
MvarVecStruct *: Sorted list of points, in place.
|
---|
Keywords:
(mvar_vec.c:173)
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
MvarVecSqrLength2
Keywords:
(mvar_vec.c:196)
Prototype:
CagdRType MvarVecSqrLength2(const CagdRType *v, int Dim)
Description:
Compute the length squared of a multivariate vector.
Parameters:
v: | Vector to compute its length.
|
---|
Dim: | Lentgth of vector v.
|
---|
Returned Value:
CagdRType: Computed length squared.
|
---|
See Also:
MvarVecAdd
MvarVecDotProd
MvarVecLength
MvarVecScale
MvarVecNormalize
MvarVecBlend
MvarVecSqrLength
Keywords:
(mvar_vec.c:107)
Prototype:
void MvarVecSub(MvarVecStruct *VRes,
const MvarVecStruct *V1,
const MvarVecStruct *V2)
Description:
Subtract 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
MvarVecAdd
Keywords:
(mvar_vec.c:571)
Prototype:
CagdBType MvarVecWedgeProd(MvarVecStruct **Vectors,
int Size,
MvarVecStruct **NewVecs,
int NewSize,
CagdBType CheckDet,
CagdRType *DetVal)
Description:
Computes an orthogonal complement (wedge product) of dimension
NewSize-Size to the given set of Size vectors.
Vectors is vector Vectors are in a higher dimensional linear space.
of at list dimension NewSize.
Parameters:
Vectors: | The set of Size vectors, each of dimension larger than Size.
This set of vectors is modified in place - it is made
orthonormal.
|
---|
Size: | The size of Vectors set.
|
---|
NewVecs: | New vectors to allocate into here and update with orthogonal
complement subspace of dimension newSize-Size.
Should be able to hold NewSize-Size pointers to vectors.
|
---|
NewSize: | The new size of the set Vectors and NewVecs together.
|
---|
CheckDet: | When Size + NewSize == Dim, this flag indicates if the
determinant of the Dim vectors is to be evaluated. Useful
for orientation issues.
|
---|
DetVal: | Output value, the computed determinant if CheckDet is TRUE.
|
---|
Returned Value:
CagdBType: TRUE if successful, FALSE otherwise.
|
---|
See Also:
MvarVecOrthogonal
MvarVecOrthogonal2
MvarVecSetOrthogonalize
Keywords:
(mvvorcrv.c:53)
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:93)
Prototype:
void MvarVoronoiCrvFree(MvarVoronoiCrvStruct *Crv)
Description:
Deallocates a VoronoiCrv structure.
Parameters:
Crv: | Voronoi curve structure to free.
|
---|
Returned Value:
Keywords:
allocation
(mvvorcrv.c:117)
Prototype:
void MvarVoronoiCrvFreeList(MvarVoronoiCrvStruct *CrvList)
Description:
Deallocates a VoronoiCrv list structure.
Parameters:
CrvList: | Voronoi curve list to free.
|
---|
Returned Value:
Keywords:
allocation
(mvvorcrv.c:24)
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:141)
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:
(zrmv0d.c:1173)
Prototype:
MvarPtStruct *MvarZero0DNumeric(MvarPtStruct *ZeroPt,
const MvarExprTreeEqnsStruct *Eqns,
MvarMVStruct const * const *MVs,
int NumMVs,
CagdRType NumericTol,
const CagdRType *InputMinDmn,
const CagdRType *InputMaxDmn)
Description:
Apply a numerical improvement stage, as a first order minimization
procedure of gradient computation and marching, in place.
Parameters:
ZeroPt: | 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. Points that fail
to improve numerically are purged away.
|
---|
InputMinDmn, InputMaxDmn: | Optional domain restriction. Can be NULL in
which, the MVS/Eqns domains are used.
|
---|
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
MvarMVsZeros0DNumeric
Keywords:
(zrsolver.c:1987)
Prototype:
static MvarZeroPrblmStruct **MvarZeroC1DiscontSubdiv(
MvarZeroPrblmStruct *Problem)
Description:
A preliminary recursive stage of the subdivision solver, invoked by the
general solver - subdivides at the C1 discontinuity and solves recursively.
Parameters:
Problem: | The zero finding problem structure.
|
---|
Returned Value:
MvarZeroPrblmStruct **: The array of two sub-problems.
|
---|
See Also:
MvarZeroSolverInseparableProblem
Keywords:
(zrsolver.c:2065)
Prototype:
CagdBType MvarZeroEqnsHasMeshC1Discont(MvarMVStruct * const *MVs,
int NumOfMVs,
int *JLoc,
CagdRType *t)
Description:
Searches all MVs for parameter locations that are C1 discont. If found
update JLoc and t to this finding and returns TRUE. Same functionality as
MvarSSIHasC1Discont, but for any number of MVs, not necessarily Dim - 1.
Parameters:
MVs: | The system of equations.
|
---|
NumOfMVs: | The number of equations.
|
---|
JLoc: | The direction in the domain with C1 discont, if has one.
|
---|
t: | The parameter at the C1 discont. if has one.
|
---|
Returned Value:
CagdBType: TRUE if found a C1 discont., FALSE otherwise.
|
---|
Keywords:
(zrmvaux0.c:998)
Prototype:
MvarPtStruct *MvarZeroFilterSolutionSet(MvarZeroPrblmStruct *Problem,
MvarPtStruct *MVPts,
const MvarMVStruct * const *MVs,
const MvarConstraintType *Constraints,
int NumOfMVs,
IrtRType Tol,
int CanHaveLoops,
int SortSol,
CagdBType InEqOnly,
int SolDim)
Description:
Filters and purge solution points that are not satisfying some
constraint in MVs. *
Parameters:
Problem: | Optional reference to the problem, in case we like to
activate a call back verification function.
|
---|
MVPts: | Solution points to filter.
|
---|
MVs: | Constraints to test the solution points against.
|
---|
Constraints: | Type of constraints.
|
---|
NumOfMVs: | Also number of constraints.
|
---|
Tol: | Tolerance the solution point must satisfy.
|
---|
CanHaveLoops: | RUE if point data can form loops in which case first and
last point will be identical (and should not be purged).
|
---|
SortSol: | TRUE to sort solution set first, based on the 1st axis.
|
---|
InEqOnly: | TRUE if inequality constraints should be checked only,
FALSE if both equality and inequality should be checked.
|
---|
SolDim: | Solutions' dimensions (0 for points, 1 for univariates,
etc.).
|
---|
Returned Value:
MvarPtStruct *: Filtered points that satisfy the given constraints.
|
---|
See Also:
MvarZeroSolver
Keywords:
(zrsolver.c:2384)
Prototype:
CagdBType MvarZeroFirstSmoothUpdatesExpTr(MvarZeroPrblmStruct *Problem)
Description:
Completes the construction of the ETs problem structure with the actions
that are performed only once: when attaining a C1 smooth problem for the
first time. Adds the gradients and the current MVs, later to be used in
numeric step, and solves the problem on the boundary of the domain.
Parameters:
Problem: | The zero finding problem structure.
|
---|
Returned Value:
CagdBType: TRUE if updates were successful, false otherwise.
|
---|
Keywords:
(zrsolver.c:2243)
Prototype:
CagdBType MvarZeroFirstSmoothUpdatesMVs(MvarZeroPrblmStruct *Problem)
Description:
Completes the construction of the MVs problem structure with the actions
that are performed only once: when attaining a C1 smooth problem for the
first time, adds the gradients and the current MVs, later to be used in
numeric step, and solves the problem on the boundary of the domain.
Parameters:
Problem: | The zero finding problem structure.
|
---|
Returned Value:
CagdBType: TRUE if updates were successful, FALSE otherwise.
|
---|
Keywords:
(zrsolver.c:2439)
Prototype:
MvarPtStruct *MvarZeroGenPtMidDmn(const MvarZeroPrblmStruct *Problem,
int SingleSol)
Description:
Construct a point of the dimension as the given problem in the middle of
its parametric domain.
Parameters:
Problem: | To construct 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:
(zrmvkant.c:711)
Prototype:
MvarPtStruct *MvarZeroGetRootsByKantorovich(MvarMVStruct **MVs,
MvarConstraintType *Constraints,
int NumOfMVs,
int NumOfZeroMVs,
int ApplyNormalConeTest,
CagdRType SubdivTol,
int Depth,
CagdBType SameSpace,
CagdRType ParamPerturb)
Description:
Handle all aspects of root-uniqueness using Kantorovich; return a
candidate point where a unique root exists, and find the rest of the roots
recursively, using MvarZeroMVsSubdiv.
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.
|
---|
SameSpace: | True if all MVs share the same function space.
|
---|
ParamPerturb: | he perturbation to applly to mid. subdivision location.
|
---|
Returned Value:
MvarPtStruct *: List of points on the solution set. Dimension of the
points will be the same as the dimensions of all MVs.
NULL is returned.
|
---|
See Also:
MvarMVsZeros
Keywords:
(zrmvaux0.c:1171)
Prototype:
CagdBType MvarZeroMVConstraintFail(const MvarMVStruct *MV,
MvarConstraintType Constraint)
Description:
Test if the given multivariate may satisfy the constraint.
Examines the positivity/negativity of all coefficients in multivariate.
Parameters:
MV: | Multivariate to examine.
|
---|
Constraint: | ype of constraint - zero, pos., neg.
|
---|
Returned Value:
CagdBType: TRUE if constraint cannot be satisfied, FALSE otherwise.
|
---|
See Also:
MvarZeroSolver
Keywords:
(zrmvkant.c:847)
Prototype:
static MvarPtStruct *MvarZeroMVsSubdiv(MvarMVStruct **MVs,
MvarConstraintType *Constraints,
int NumOfMVs,
int NumOfZeroMVs,
int ApplyNormalConeTest,
CagdRType SubdivTol,
int Depth,
CagdBType SameSpace,
CagdRType ParamPerturb)
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.
NOTE: The generic solver invokes this function only via the Kantorovich
option (global flag set accordingly), otherwise this function is unused.
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.
|
---|
SameSpace: | True if all MVs share the same function space.
|
---|
ParamPerturb: | he perturbation to applly to mid. subdivision location.
|
---|
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:
(zret0d.c:123)
Prototype:
MvarExprTreeEqnsStruct *MvarZeroOrganizeETs0DProblem(
const MvarExprTreeStruct * const *MVETs,
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.
|
---|
NumOfMVETs: | umber of input mvar expression tree equations, in MVETs.
|
---|
Returned Value:
MvarExprTreeEqnsStruct *: Build set of equations with common exprs.
|
---|
See Also:
MvarMVsZeros
Keywords:
(zrmv0d.c:105)
Prototype:
MvarMVStruct **MvarZeroOrganizeMVs0DProblem(const MvarMVStruct * const *MVs,
MvarConstraintType *Constraints,
int *NumOfMVs)
Description:
Preliminary organization and scaling actions of the objects composing a
zero finding problem. Relevant to the MVs representation only. This
routine is invoked by the problem structure construction routine, and
should not be invoked when extracting a sub-problem from an existing one.
Parameters:
MVs: | Array of multivariates.
|
---|
Constraints: | Equality or inequality constraints.
|
---|
NumOfMVs: | Number of constraints (may be updated).
|
---|
Returned Value:
MvarMVStruct **: The updated array of MVs to be used.
|
---|
See Also:
MvarZeroSolverSetCallbackFcns0DMVs
Keywords:
(zrmv1d.c:109)
Prototype:
MvarMVStruct **MvarZeroOrganizeMVs1DProblem(const MvarMVStruct * const *MVs,
MvarConstraintType *Constraints,
int *NumOfMVs)
Description:
Some preliminary organization of the objects composing an MVs, 1D solution
zero finding problem. This routine is invoked by the problem structure
construction routine, and should not be invoked when extracting a
sub-problem from an existing one.
Parameters:
MVs: | Array of multivariates.
|
---|
Constraints: | Equality or inequality constraints.
|
---|
NumOfMVs: | Number of constraints (may be updated).
|
---|
Returned Value:
MvarMVStruct **: The updated array of MVs to be used.
|
---|
See Also:
MvarZeroSolverSetCallbackFcns1DMVs
Keywords:
(zrmv2dTp.c:149)
Prototype:
MvarMVStruct **MvarZeroOrganizeMVs2DProblem(const MvarMVStruct * const *MVs,
MvarConstraintType *Constraints,
int *NumOfMVs)
Description:
Some preliminary organization of the objects composing an MVs, 1D solution
zero finding problem. This routine is invoked by the problem structure
construction routine, and should not be invoked when extracting a
sub-problem from an existing one.
Parameters:
MVs: | Array of multivariates.
|
---|
Constraints: | Equality or inequality constraints.
|
---|
NumOfMVs: | Number of constraints (may be updated).
|
---|
Returned Value:
MvarMVStruct **: The updated array of MVs to be used.
|
---|
See Also:
MvarZeroSolverSetCallbackFcns2DMVs
Keywords:
(zrmatlab.c:52)
Prototype:
MvarZeroSolutionStruct *MvarZeroSolveMatlabEqns(
MvarMatlabEqStruct **Eqns,
int NumOfEqns,
int MaxVarsNum,
CagdRType *MinDmn,
CagdRType *MaxDmn,
CagdRType NumericTol,
CagdRType SubdivTol,
CagdRType StepTol,
MvarConstraintType *Constraints)
Description:
Convert a zero finding prolem from matlab form to the solver's problem
and solve.
Parameters:
Eqns: | The constraints as recieved after the matlab parsing.
|
---|
NumOfEqns: | The number of constraints.
|
---|
MaxVarsNum: | he maximal number of unknowns appearing in the problem.
|
---|
MinDmn: | The min end point of the domain in all directions. If NULL,
considered as all zeros.
|
---|
MaxDmn: | The max end point of the domain in all directions. If NULL,
considered as all ones.
|
---|
NumericTol: | he required numeric tolerance of the solution.
|
---|
SubdivTol: | The subdivision tolerance.
|
---|
StepTol: | The step size for numeric tracing of curves.
|
---|
Constraints: | vector of constraints specifying equality/inequality.
|
---|
Returned Value:
MvarZeroSolutionStruct *: The solution to the problem.
|
---|
See Also:
MvarZeroSolver
Keywords:
(zrsolver.c:1820)
Prototype:
MvarZeroSolutionStruct *MvarZeroSolver(MvarZeroPrblmStruct *Problem)
Description:
This is a wrapper function for combining the zero set solver with the
constraint system decomposition step. It tests the problem for criteria
that determine that can't be decomposed, and based on the results it
calls either MvarZeroSolverWithDecomposition (which uses constraint
decomposition to solve the problem) or MvarZeroSolverInseparableProblem
(which solves the problem as is).
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
MvarZeroSolutionStruct *: The point set (zero dimensional case) or
piecewise linear approximation to the solution
manifold (one/two dimensional case).
|
---|
See Also:
MvarZeroSolverInseparableProblem
MvarZeroSolverWithDecomposition
Keywords:
(zrsolver.c:1955)
Prototype:
int MvarZeroSolverGetDmnDim(const MvarZeroPrblmStruct *Problem)
Description:
Extraction of the domain dimension of the MVs/ETs/other constraints in a
zero finding problem.
Parameters:
Problem: | The zero finding problem structure.
|
---|
Returned Value:
int: The dimension of the domain of the problem.
|
---|
Keywords:
(zrsolver.c:1477)
Prototype:
MvarZeroSolutionStruct *MvarZeroSolverInseparableProblem(MvarZeroPrblmStruct
*Problem)
Description:
The general zero finding problem solver. Invokes various zero finding
algorithms according to the function representations/solution set dim.
The solver follows as generally as possible the following paradigm:
0. Try to rule out the possibility of a solution by examining the sign of
all coefficients. .
1. Recursively subdivide until the problem is C1 smooth.
2. If can't rule out, Check if the topology is guaranteed.
3. If topology is guaranteed, improve/reconstruct numerically.
4. If not, or if numeric step failed subdivide and solve recursively.
This function is typically invoked when the constraints are inseparable
meaning all constraints depends on all variables, and the problem cannot
be split into two or more sub-problems, with less variables each.
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
MvarZeroSolutionStruct *: The point set (zero dimensional case) or
piecewise linear approximation to the solution
manifold (one/two dimensional case).
|
---|
See Also:
MvarMVDDecomposeProblem
MvarMVDMVSolvePlan
MvarZeroSolverWithDecomposition
Keywords:
(zrsolver.c:2928)
Prototype:
CagdBType MvarZeroSolverIsMVZero(MvarMVStruct *MV,
CagdRType NumericTol)
Description:
Tests if all coefficients of a multi-variate are zero, up to prescribed
tolerance.
Parameters:
MV: | The (scalar valued) multi-variate to be tested.
|
---|
NumericTol: | he tolerance under which a coefficient is considered zero.
|
---|
Returned Value:
CagdBType: TRUE if all zeros, FALSE otherwise.
|
---|
See Also:
MvarZeroMVConstraintFail
Keywords:
(zrmv2dTp.c:1277)
Prototype:
MvarPolylineStruct *MvarZeroSolverPolyProject(MvarPolylineStruct *PolyList,
int *Coords,
int ProjDim)
Description:
Projecting a given list of polylines on any of its required coordinates,
as specified by the Coords vector of length projDim which is a subset of
input dimension.
Parameters:
PolyList: | A list of polylines to project.
|
---|
Coords: | The required projection coordinates. Ordered vector.
|
---|
ProjDim: | The dimension of the required result. Also the length of
Coords.
|
---|
Returned Value:
MvarPolylineStruct *: The new list of polylines.
|
---|
Keywords:
(zrsolver.c:1257)
Prototype:
void MvarZeroSolverPrblmFree(MvarZeroPrblmStruct *Problem)
Description:
Deallocates and frees all slots of a problem structure of a zero
finding problem. Constraints are never freed, since they are allocated
externally. Note that some slots are freed only at depth zero, some are
freed only at first C1 smooth instance.
Parameters:
Problem: | Problem structure to free.
|
---|
Returned Value:
See Also:
MvarZeroSolverPrblmNew
MvarZeroSolverSubProblem
Keywords:
(zrsolver.c:817)
Prototype:
MvarZeroPrblmStruct *MvarZeroSolverPrblmNew(const MvarMVStruct * const *MVs,
const MvarExprTreeStruct * const
*ETs,
int NumOfConstraints,
MvarConstraintType *Constraints,
CagdRType SubdivTol,
CagdRType NumericTol,
CagdRType StepTol,
CagdBType Solve2DBy0D)
Description:
Construction of a new zero finding problem structure. Allocates the memory
and assigns slots that are already known upon construction.
This routine should NOT be used when extracting a sub-problem from an
existing problem (such as after domain reduction or subdivision): it
should only be called at very first construction (SubdivDepth == 0).
Scaling and organization takes place here that is not required for
sub-problems.
Parameters:
MVs: | Array of multivariates, NULL for ETs representations.
MVs[0] can optionally hold a string "_NoSubdivDirs"
attribute that sets the direction(s) not to subdivide in.
I.e. '11' means the two least (UV) directions are not to be
subdivided at.
|
---|
ETs: | Array of expression trees, NULL for MVs representations.
|
---|
NumOfConstraints: | umber of constraints in the problem (Total).
|
---|
Constraints: | ither an equality or an inequality type of constraint.
|
---|
SubdivTol: | Tolerance of the subdivision process. Tolerance is
measured in the parametric space of the constraints.
|
---|
NumericTol: | Tolerance of the numeric stage.
|
---|
StepTol: | In 1D numeric stages (curve tracing)- the step size used.
|
---|
Solve2DBy0D: | temporary flag to indicate the use of the new 2D solver
or not.
|
---|
Returned Value:
MvarZeroPrblmStruct *: The new problem structure or NULL if error.
|
---|
See Also:
MvarZeroSolverPrblmFree
Keywords:
(zret0d.c:93)
Prototype:
void MvarZeroSolverSetCallbackFcns0DExpTr(MvarZeroPrblmStruct *Problem)
Description:
Sets the callback functions for the Expression Trees representation, 0D
solution case.
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
See Also:
Keywords:
(zrmv0d.c:73)
Prototype:
void MvarZeroSolverSetCallbackFcns0DMVs(MvarZeroPrblmStruct *Problem)
Description:
Sets the callback functions for the MVs representation, 0D solution case.
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
See Also:
MvarZeroOrganizeMVs0DProblem
Keywords:
(zret1d.c:62)
Prototype:
void MvarZeroSolverSetCallbackFcns1DExpTr(MvarZeroPrblmStruct *Problem)
Description:
Sets the callback functions for the ETs representation, 1D solution case.
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
See Also:
Keywords:
(zrmv1d.c:77)
Prototype:
void MvarZeroSolverSetCallbackFcns1DMVs(MvarZeroPrblmStruct *Problem)
Description:
Sets the callback functions for the MVs representation, 1D solution case.
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
See Also:
MvarZeroOrganizeMVs1DProblem
Keywords:
(zret2d.c:62)
Prototype:
void MvarZeroSolverSetCallbackFcns2DExpTr(MvarZeroPrblmStruct *Problem)
Description:
Sets the callback functions for the ETs representation, 2D solution case.
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
See Also:
Keywords:
(zrmv2dTp.c:117)
Prototype:
void MvarZeroSolverSetCallbackFcns2DMVs(MvarZeroPrblmStruct *Problem)
Description:
Sets the callback functions for the MVs representation, 2D solution case.
Parameters:
Problem: | The zero finding problem to be solved.
|
---|
Returned Value:
Keywords:
(zrsolver.c:1417)
Prototype:
void MvarZeroSolverSolutionFree(MvarZeroSolutionStruct *Solution,
CagdBType FreeUnion)
Description:
Deallocates and frees all slots of a solution structure of a zero
finding problem. NOTE: the T-Junction list is not freed, as it is always
freed as part of the problem deallocation.
Parameters:
Solution: | Solution structure to free.
|
---|
FreeUnion: | If TRUE, the points/polylines stored at in the solution are
freed, otherwise they are not. This is useful for the cases
of uniting solutions in place.
|
---|
Returned Value:
See Also:
MvarZeroSolverSolutionNew
Keywords:
(zrsolver.c:1356)
Prototype:
MvarZeroSolutionStruct *MvarZeroSolverSolutionNew(
MvarTriangleStruct *Tr,
MvarPolylineStruct *Pl,
MvarPtStruct *Pt,
MvarZrSlvrRepresentationType Rep)
Description:
Allocates the memory required for a new solution structure of a zero
finding problem.
Parameters:
Tr: | A list of triangles, or NULL if the representation is not such.
|
---|
Pl: | A list of polylines, or NULL if the representation is not such.
|
---|
Pt: | A list of points, or NULL if the representation is not such.
|
---|
Rep: | The active representation required for the new solution.
|
---|
Returned Value:
MvarZeroSolutionStruct *: The new solution or NULL if error.
|
---|
See Also:
MvarZeroSolverSolutionFree
Keywords:
(zrsolver.c:1161)
Prototype:
MvarZeroPrblmStruct *MvarZeroSolverSubProblem(
MvarZeroPrblmStruct const *Problem,
MvarMVStruct **MVs,
MvarExprTreeEqnsStruct *Eqns,
MvarZeroSolutionStruct *BoundarySol)
Description:
Construction of a new zero finding sub-problem structure from an
existing problem, for the given constraints defined on the sub-domain
(the result of subdivision or domain reduction).
Note that there are slots that are only allocated once, while some are
are allocated at all depths.
Parameters:
Problem: | The original problem, from which to extract the sub-problem.
|
---|
MVs: | Array of multivariates, NULL if not MVs representation.
|
---|
Eqns: | Struct of expression trees, NULL if not ETs representation.
|
---|
BoundarySol: | he solution to the corresponding 2 * Dim problems of one
dimension less, defined on the boundary of the new, smaller
problem.
|
---|
Returned Value:
MvarZeroPrblmStruct *: The sub-problem.
|
---|
See Also:
MvarZeroSolverPrblmNew
MvarZeroOrganizeMVs0DProblem
MvarZeroOrganizeMVs1DProblem
Keywords:
(zrdcm_main.c:1177)
Prototype:
MvarZeroSolutionStruct *MvarZeroSolverWithDecomposition(
MvarZeroPrblmStruct *Problem)
Description:
Given a constrain problem, the function determines if constraint system
decomposition can be applied to it, and then attempts to solve it. If
constraint system decomposition is not possible, it uses the regular
MvarZeroSolverInseparableProblem.
Currently, only well-constrained systems with no inequality constraints
can be solved with the decomposition step.
Parameters:
Problem: | The constraint problem to be solved.
|
---|
Returned Value:
MvarZeroSolutionStruct *: The solution to the problem.
|
---|
See Also:
MvarMVDDecomposeProblem
MvarMVDMVSolvePlan
MvarZeroSolverInseparableProblem
Keywords:
(zrmv2dTJ.c:93)
Prototype:
MvarZeroTJunctionStruct *MvarZeroTJCopy(const MvarZeroTJunctionStruct *TJ)
Description:
Copies a multi-variate T-Junction object.
Parameters:
TJ: | he T-Junction object to copy.
|
---|
Returned Value:
MvarZeroTJunctionStruct *: The T-Junction copy.
|
---|
See Also:
MvarZeroTJFree
Keywords:
(zrmv2dTJ.c:126)
Prototype:
MvarZeroTJunctionStruct *MvarZeroTJCopyList(
const MvarZeroTJunctionStruct *TJList)
Description:
Copies a list of multi-variate T-Junction objects.
Parameters:
TJList: | The T-Junction list to copy.
|
---|
Returned Value:
MvarZeroTJunctionStruct *: The T-Junctions list copy.
|
---|
See Also:
MvarZeroTJFree
MvarZeroTJCopy
Keywords:
(zrmv2dTJ.c:158)
Prototype:
void MvarZeroTJFree(MvarZeroTJunctionStruct *TJ)
Description:
Frees all slots of a multi-variate T-Junction structure.
Parameters:
TJ: | Multivariate T-Junction to free.
|
---|
Returned Value:
See Also:
MvarZeroTJFreeList
Keywords:
(zrmv2dTJ.c:188)
Prototype:
void MvarZeroTJFreeList(MvarZeroTJunctionStruct *TJList)
Description:
Deallocates and frees a list of T-Junction structures.
Parameters:
TJList: | Multivariate T-Junctions list to free.
|
---|
Returned Value:
See Also:
MvarZeroTJFree
Keywords:
(zrmv2dTJ.c:61)
Prototype:
MvarZeroTJunctionStruct *MvarZeroTJNew(const MvarPtStruct *TJPrev,
const MvarPtStruct *TJPt,
const MvarPtStruct *TJNext,
const MvarPtStruct *OrigSplit)
Description:
Allocates the memory required for a new multi-variate T-Junction.
Parameters:
TJPrev: | The point before the junction.
|
---|
TJPt: | The T-Junction point: A solution point.
|
---|
TJNext: | The point after the junction.
|
---|
OrigSplit: | The original curve split location, this is the TJ point,
before it has been refined to the solution.
|
---|
Returned Value:
MvarZeroTJunctionStruct *: the T-Junction.
|
---|
See Also:
MvarZeroTJFree
MvarZeroTJCopy
Keywords:
(zrsolver.c:2171)
Prototype:
void MvarZeroUpdateProblemDmnExpTr(MvarZeroPrblmStruct *Problem)
Description:
Updates the problem with the domain and related data in the ETs case.
Parameters:
Problem: | The zero finding problem structure.
|
---|
Returned Value:
Keywords:
(zrsolver.c:2116)
Prototype:
void MvarZeroUpdateProblemDmnMVs(MvarZeroPrblmStruct *Problem)
Description:
Updates the problem with the domain and related data in the MVs case.
Parameters:
Problem: | The zero finding problem structure.
|
---|
Returned Value:
Keywords:
(zrmv0d.c:960)
Prototype:
MvarZeroSubdivTolActionType MvarZerosSubdivTolAction(
MvarZeroSubdivTolActionType SubdivTolAction)
Description:
Sets the action taken by the 0D solver when reaching a sub-domain of
size less than subdivision tolerance.
Parameters:
SubdivTolAction: | New setting for the action type.
|
---|
Returned Value:
MvarZeroSubdivTolActionType: Old setting for the action type.
|
---|
See Also:
MvarZeroSolverInseparableProblem
MvarZeroSolverSinglrSol0DMVs
Keywords:
(mvarzral.c:191)
Prototype:
int MvarZrAlgAssignExpr(void *MVZrAlg, const char *Name, const char *Expr)
Description:
Insert an expression assignment into the structure.
Parameters:
MVZrAlg: | Structure to add a new assignmen to.
|
---|
Name: | Of new assignment.
|
---|
Expr: | The expression.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
Keywords:
(mvarzral.c:291)
Prototype:
int MvarZrAlgAssignMVVar(void *MVZrAlg,
const char *Name,
CagdRType DmnMin,
CagdRType DmnMax,
const MvarMVStruct *MV)
Description:
Insert an MV variable assignment into the structure.
Parameters:
MVZrAlg: | Structure to add a new assignment to.
|
---|
Name: | Name of this variable.
|
---|
DmnMin, DmnMax: | Domain of this variable.
|
---|
MV: | ZrAlg Multivariate representing this variable. Optional.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
Keywords:
(mvarzral.c:241)
Prototype:
int MvarZrAlgAssignNumVar(void *MVZrAlg, const char *Name, CagdRType Val)
Description:
Insert a numeric variable into the structure.
Parameters:
MVZrAlg: | Structure to add a new assignmen to.
|
---|
Name: | Of new assignment.
|
---|
Val: | The numeric value.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
Keywords:
(mvarzral.c:90)
Prototype:
void *MvarZrAlgCreate()
Description:
Creates and allocate the structure to manipulate algebraic expressions.
Parameters:
Returned Value:
void *: The allocated algebraic expressions structure.
|
---|
See Also:
Keywords:
(mvarzral.c:127)
Prototype:
void MvarZrAlgDelete(void *MVZrAlg)
Description:
Deallocates the structure to manipulate algebraic expressions.
Parameters:
MVZrAlg: | Structure to deallocate.
|
---|
Returned Value:
See Also:
Keywords:
(mvarzral.c:434)
Prototype:
int MvarZrAlgGenMVCode(void *MVZrAlg, const char *Expr, FILE *f)
Description:
Generate multivariate C Code sequence into designated file that
represent the given expression Expr:
1. Using MVZrAlg, perform all possible substitutions.
2. Parse the result into a binary tree and then synthesize the C code to
build a multivar with variables at the leaves fetched from MVZrAlg.
Parameters:
MVZrAlg: | Structure of variables and expressions.
|
---|
Expr: | To parse into a multivariate C Code.
|
---|
f: | Destination of synthesized C code.
|
---|
Returned Value:
int: TRUE if successful, FALSE otherwise.
|
---|
See Also:
Keywords:
(mvar_aux.c:1054)
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:980)
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:937)
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:854)
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 indices.
|
---|
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:897)
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: