),
and we need to solve for,
a sqrt( ) +/- b sqrt( ) = Dist
Because we are unable to represent square roots as rationals, we square:
a^2 + b^2 - Dist^2 =
= -/+ 2 a b sqrt( ) sqrt( )
or
( a^2 + b^2 - Dist^2 )^2 -
- 4 (ab)^2 = 0
Parameters:
CCrv1, CCrv2: | Two curves to compute elliptic/hyperbolic distance
function to. Assumes E2 curves.
|
---|
Dist: | Distance to the two entities.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface whose zero set provides the conic
distance (both elliptic sum and hyperbolc difference).
|
---|
Keywords:
(curvatur.c:452)
Prototype:
CagdCrvStruct *SymbCrv2DCurvatureSign(const CagdCrvStruct *Crv)
Description:
Computes a scalar curve representing the curvature sign of a planar curve.
The given curve is assumed to be planar and only its x and y coordinates
are considered.
Then the curvature sign is equal to
. .. . ..
s = X Y - Y X
Parameters:
Crv: | To compute the curvature sign field.
|
---|
Returned Value:
CagdCrvStruct *: Computed curvature sign field.
|
---|
See Also:
SymbCrv2DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DRadiusNormal
SymbCrv3DCurvatureNormal
SymbCrv2DInflectionPts
SymbCrvExtremCrvtrPts
Keywords:
curvature
(curvatur.c:41)
Prototype:
CagdCrvStruct *SymbCrv2DCurvatureSqr(const CagdCrvStruct *Crv)
Description:
Computes a scalar curve representing the curvature of a planar curve.
The given curve is assumed to be planar and only its x and y coordinates
are considered.
Then the curvature k is equal to
. .. . ..
X Y - Y X
k = -------------
.2 .2 3/2
( X + Y )
Since we cannot represent k because of the square root, we compute and
represent k^2.
Parameters:
Crv: | To compute the square of the curvature field for.
|
---|
Returned Value:
CagdCrvStruct *: The square of the curvature field of Crv.
|
---|
See Also:
SymbCrv3DCurvatureSqr
SymbCrv3DRadiusNormal
SymbCrv3DCurvatureNormal
SymbCrv2DCurvatureSign
SymbCrv2DInflectionPts
SymbCrvExtremCrvtrPts
Keywords:
curvature
(curvatur.c:601)
Prototype:
CagdPtStruct *SymbCrv2DInflectionPts(const CagdCrvStruct *Crv,
CagdRType Epsilon)
Description:
Given a planar curve, finds all its inflection points by finding the zero
set of the sign of the curvature function of the curve.
Parameters:
Crv: | To find all its inflection points.
|
---|
Epsilon: | Accuracy control.
|
---|
Returned Value:
CagdPtStruct *: A list of parameter values on Crv that are inflection
points.
|
---|
See Also:
SymbCrv2DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DRadiusNormal
SymbCrv3DCurvatureNormal
SymbCrv2DCurvatureSign
SymbCrvExtremCrvtrPts
Keywords:
curvature
inflection points
(curvatur.c:303)
Prototype:
CagdCrvStruct *SymbCrv2DUnnormNormal(const CagdCrvStruct *Crv)
Description:
Computes the unnormalized normal of a planar 2D curve as a 90 rotation
in the plane of the tangent field.
Parameters:
Crv: | Planar curve to compute unnormalized normal field for.
|
---|
Returned Value:
CagdCrvStruct *: The normal field.
|
---|
See Also:
SymbCrv3DRadiusNormal
Keywords:
(symbpoly.c:254)
Prototype:
CagdPolylineStruct *SymbCrv2Polyline(const CagdCrvStruct *Crv,
CagdRType TolSamples,
SymbCrvApproxMethodType Method,
CagdBType OptiLin)
Description:
Routine to approx. a single curve as a polyline with TolSamples
samples/tolerance. Polyline is always E3 CagdPolylineStruct type.
NULL is returned in case of an error, otherwise CagdPolylineStruct.
Parameters:
Crv: | To approximate as a polyline.
|
---|
TolSamples: | Tolerance of approximation error (Method = 2) or
Number of samples to compute on polyline (Method = 0, 1).
|
---|
Method: | 0 - TolSamples are set uniformly in parametric space,
1 - TolSamples sets the maximum error allowed between the
piecewise linear approximation and original curve.
2 - TolSamples are set optimally, considering the
isocurve's curvature.
|
---|
OptiLin: | If TRUE, optimize linear curves.
|
---|
Returned Value:
CagdPolylineStruct *: A polyline representing the piecewise linear
approximation from, or NULL in case of an error.
|
---|
See Also:
BspCrv2Polyline
BzrCrv2Polyline
IritCurve2Polylines
Keywords:
piecewise linear approximation
polyline
(symbpoly.c:402)
Prototype:
SymbCrv2PolylineTlrncErrorFuncType SymbCrv2PolylineSetTlrncErrorFunc(
SymbCrv2PolylineTlrncErrorFuncType ErrorFunc)
Description:
Sets the error function to be used by optimal tolerance based approx. of
curves into polylines. This function should return TRUE if tolerance is
met, FALSE if the curve is to be further divided. This function, if
defined, is invoked in addition to the tolerance testing.
Parameters:
ErrorFunc: | New error function to use.
|
---|
Returned Value:
SymbCrv2PolylineTlrncErrorFuncType: Old error function reference.
|
---|
See Also:
SymbCrv2Polyline
Keywords:
error handling
(curvatur.c:354)
Prototype:
CagdCrvStruct *SymbCrv3DCurvatureNormal(const CagdCrvStruct *Crv)
Description:
Computes a vector field curve representing the curvature of a curve, in
the normal direction, that is kN.
. .. . . .. .
C x C C ( C x C ) x C
kN = kB x T = ----- x ----- = --------------
. 3 . . 4
| C | | C | | C |
Parameters:
Crv: | To compute the normal curvature field.
|
---|
Returned Value:
CagdCrvStruct *: Computed normal curvature field.
|
---|
See Also:
SymbCrv2DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DRadiusNormal
SymbCrv2DCurvatureSign
SymbCrv2DInflectionPts
SymbCrvExtremCrvtrPts
Keywords:
curvature
(curvatur.c:150)
Prototype:
CagdCrvStruct *SymbCrv3DCurvatureSqr(const CagdCrvStruct *Crv)
Description:
Computes a scalar field curve representing the square of the curvature
of a given 3D curve.
Parameters:
Crv: | To compute scalar field of curvatrue square for.
|
---|
Returned Value:
CagdCrvStruct *: Computed scalar field of curvature square of Crv.
|
---|
See Also:
SymbCrv2DCurvatureSqr
SymbCrv3DRadiusNormal
SymbCrv3DCurvatureNormal
SymbCrv2DCurvatureSign
SymbCrv2DInflectionPts
SymbCrvExtremCrvtrPts
Keywords:
curvature
(curvatur.c:232)
Prototype:
CagdCrvStruct *SymbCrv3DRadiusNormal(const CagdCrvStruct *Crv)
Description:
Computes a vector field curve representing the radius (1/curvature) of a
curve, in the normal direction, that is N / k:
. .. . . 6 . .. . . 2
k N (C x C ) x C | C | ( (C x C ) x C ) | C |
N / k = ----- = ------------ . --------- = -----------------------
2 . 4 . .. 2 . .. 2
k | C | (C x C ) (C x C )
Parameters:
Crv: | To compute the normal field with radius as magnitude.
|
---|
Returned Value:
CagdCrvStruct *: Computed normal field with 1 / k as magnitude.
|
---|
See Also:
SymbCrv2DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DCurvatureNormal
SymbCrv2DCurvatureSign
SymbCrv2DInflectionPts
SymbCrvExtremCrvtrPts
SymbCrv2DUnnormNormal
Keywords:
curvature
(offset.c:839)
Prototype:
CagdCrvStruct *SymbCrvAdapOffset(const CagdCrvStruct *OrigCrv,
CagdRType OffsetDist,
CagdRType OffsetError,
SymbOffCrvFuncType OffsetAprxFunc,
CagdBType BezInterp)
Description:
Given a curve and an offset amount OffsetDist, returns an approximation to
the offset curve by offseting the control polygon in the normal direction.
This function computes an approximation to the offset using
OffsetAprxFunc, measure the error and use it to refine and decrease the
error adaptively.
Bezier curves are promoted to Bsplines curves.
See also: Gershon Elber and Elaine Cohen, "Error Bounded Variable
Distance Offset Operator for Free Form Curves and Surfaces". International
Journal of Computational Geometry & Applications, Vol. 1, Num. 1, March
1991, pp 67-78.
Parameters:
OrigCrv: | To approximate its offset curve with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
OffsetError: | Tolerance control.
|
---|
OffsetAprxFunc: | A function that can be used to approximate an offset
of a curve. If NULL SymbCrvOffset function is selected.
|
---|
BezInterp: | If TRUE, control points are interpolated when the curve is
reduced to a Bezier form. Otherwise, control points are
translated OffsetDist amount only, under estimating the
Offset.
|
---|
Returned Value:
CagdCrvStruct *: An approximation to the offset curve, to within
OffsetError.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
SymbCrvVarOffset
SymbCrvAdapVarOffset
Keywords:
offset
(offset.c:1126)
Prototype:
CagdCrvStruct *SymbCrvAdapOffsetTrim(const CagdCrvStruct *OrigCrv,
CagdRType OffsetDist,
CagdRType OffsetError,
SymbOffCrvFuncType OffsetAprxFunc,
CagdBType BezInterp)
Description:
Same function as CagdCrvAdapOffset, but trims the self intersection loops.
See also: Gershon Elber and Elaine Cohen, "Error Bounded Variable
Distance Offset Operator for Free Form Curves and Surfaces". International
Journal of Computational Geometry & Applications, Vol. 1, Num. 1, March
1991, pp 67-78.
Parameters:
OrigCrv: | To approximate its offset curve with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
OffsetError: | Tolerance control.
|
---|
OffsetAprxFunc: | A function that can be used to approximate an offset
of a curve. If NULL SymbCrvOffset function is selected.
Third parameter of SymbOffCrvFuncType is optional.
|
---|
BezInterp: | If TRUE, control points are interpolated when the curve is
reduced to a Bezier form. Otherwise, control points are
translated OffsetDist amount only, under estimating the
Offset.
|
---|
Returned Value:
CagdCrvStruct *: An approximation to the offset curve, to within
OffsetError.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
Keywords:
offset
(offset.c:986)
Prototype:
CagdCrvStruct *SymbCrvAdapVarOffset(const CagdCrvStruct *OrigCrv,
const CagdCrvStruct *VarOffsetDist,
CagdRType OffsetError,
SymbVarOffCrvFuncType VarOffsetAprxFunc,
CagdBType BezInterp)
Description:
Given a curve and a scalar offset function VarOffsetDist, returns an
approximation to the variable offset curve by offseting the control
polygon in the normal direction.
This function computes an approximation to the offset using
VarOffsetAprxFunc, measure the error and use it to refine and decrease the
error adaptively.
Bezier curves are promoted to Bsplines curves.
See also: Gershon Elber and Elaine Cohen, "Error Bounded Variable
Distance Offset Operator for Free Form Curves and Surfaces". International
Journal of Computational Geometry & Applications, Vol. 1, Num. 1, March
1991, pp 67-78.
Parameters:
OrigCrv: | To approximate its offset curve with distance OffsetDist.
|
---|
VarOffsetDist: | A scalar distance function of the variable offset.
Must posses a parametric domain similar to OrigCrv.
|
---|
OffsetError: | Tolerance control.
|
---|
VarOffsetAprxFunc: | function that can be used to approximate variable
offset of a curve. If NULL SymbCrvVarOffset function is
selected.
|
---|
BezInterp: | If TRUE, control points are interpolated when the curve
is reduced to a Bezier form. Otherwise, control points
are translated OffsetDist amount only, under estimating
the Offset.
|
---|
Returned Value:
CagdCrvStruct *: An approximation to the offset curve, to within
OffsetError.
|
---|
See Also:
SymbCrvOffset
SymbCrvVarOffset
SymbCrvSubdivOffset
SymbCrvAdapOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
Keywords:
offset
(symb_crv.c:45)
Prototype:
CagdCrvStruct *SymbCrvAdd(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2)
Description:
Given two curves - add them coordinate-wise.
The two curves are promoted to same point type before the multiplication
can take place. Furthermore, order and continuity are matched as well.
Parameters:
Crv1, Crv2: | Two curve to add up coordinate-wise.
|
---|
Returned Value:
CagdCrvStruct *: The summation of Crv1 + Crv2 coordinate-wise.
|
---|
See Also:
SymbCrvSub
SymbCrvMult
Keywords:
addition
symbolic computation
(arc_len.c:383)
Prototype:
CagdRType SymbCrvArcLen(const CagdCrvStruct *Crv, CagdRType Epsilon)
Description:
Computes a tight approximation to the arc length of a curve.
Estimates the arc length scalar field of Crv using SymbCrvArcLenSclrCrv
and evaluate the estimate on the curve's domain boundary.
Parameters:
Crv: | Curve to compute a tight approximation on arc length.
|
---|
Epsilon: | Accuracy control.
|
---|
Returned Value:
CagdRType: The approximated arc length of the given curve Crv.
|
---|
See Also:
SymbCrvArcLen2
Keywords:
arc length
(arc_len.c:654)
Prototype:
CagdRType SymbCrvArcLen2(const CagdCrvStruct *Crv, CagdRType Epsilon)
Description:
Computes a tight approximation to the arc length of a curve.
Estimates arc length by bounding from above and from below the arc len:
+ From above, using the arc length control polygon of the curve.
+ From below, using the chord P0Pn, the line from first to last control
point.
If difference is greater than Epsilon, divide and coquer.
If, however, the given curve is linear., is control polygon (also arc len)
length is returned immediately.
Parameters:
Crv: | Curve to compute a tight approximation on arc length.
|
---|
Epsilon: | Accuracy control.
|
---|
Returned Value:
CagdRType: The approximated arc length of the given curve Crv.
|
---|
See Also:
SymbCrvArcLen
Keywords:
arc length
(arc_len.c:462)
Prototype:
CagdCrvStruct *SymbCrvArcLenCrv(const CagdCrvStruct *Crv,
CagdRType Fineness,
int Order)
Description:
Computes an approximated arc length curve from a given curve.
Approximation is achieved by least square fitting of points sampled
along the curve that are arc length parameterized.
Parameters:
Crv: | To approximate as an arc length curve.
|
---|
Fineness: | Tolerance to use is sampling the original curve.
|
---|
Order: | Order of least square fit curve.
|
---|
Returned Value:
CagdCrvStruct *: A polynomial curve similar to input curve but with
almost arc length parametrization.
|
---|
Keywords:
arc length
(arc_len.c:340)
Prototype:
CagdCrvStruct *SymbCrvArcLenSclrCrv(const CagdCrvStruct *Crv,
CagdRType Epsilon)
Description:
Computes a scalar curve approximating the arc length of given curve Crv.
Arc length is estimated by computing the square of Crv's first derivative
approximating its square root and integrating symbolically.
Parameters:
Crv: | To approximate its arc length scalar field.
|
---|
Epsilon: | Accuracy of approximating.
|
---|
Returned Value:
CagdCrvStruct *: A scalar field approximating Crv arc length.
|
---|
Keywords:
arc length
(arc_len.c:416)
Prototype:
CagdPtStruct *SymbCrvArcLenSteps(const CagdCrvStruct *Crv,
CagdRType Length,
CagdRType Epsilon)
Description:
Computes parameter values to move steps of Length at a time on curve Crv.
Returned is a list of parameter values to move along.
Parameters:
Crv: | Curve to compute constant arc Length steps.
|
---|
Length: | The step size.
|
---|
Epsilon: | Accuracy control.
|
---|
Returned Value:
CagdPtStruct *: List of parameter values to march along Crv with arc
Length between them.
|
---|
Keywords:
arc length
(biarc.c:61)
Prototype:
SymbArcStruct *SymbCrvBiArcApprox(const CagdCrvStruct *Crv,
CagdRType Tolerance,
CagdRType MaxAngle)
Description:
Computes a piecewise biarc approximation to given freeform planar curve.
The following steps are performed during this approximation process:
1. The curve is split at all C^1 discontinuities.
2. The curve is split at inflection points, if any.
3. Each convex/concave curve region:
a. Fit the curve region with a G^1 continuous biarc that is tangent to
the curve's region at the region's end points.
b. If fit is good enough, we stop. Otherwise subdivide region into two
and recursively invoke step 2 on both halves.
Parameters:
Crv: | 2D Curve to approximate using piecewise biarcs.
|
---|
Tolerance: | Of approximation.
|
---|
MaxAngle: | Of an arc in the output set. In no way it will be more than
or equal to 180 degrees. In Degrees.
|
---|
Returned Value:
SymbArcStruct *: List of arcs approximating Crv to within Tolerance.
|
---|
See Also:
SymbCrv2DInflectionPts
SymbCrvCubicApprox
SymbCrvBiArcApproxC1
Keywords:
(biarc.c:188)
Prototype:
SymbArcStruct *SymbCrvBiArcApproxC1(const CagdCrvStruct *CCrv,
CagdRType Tolerance,
CagdRType MaxAngle)
Description:
Computes a piecewise biarc approximation to given C^1 planar curve.
The following steps are performed during this approximation process:
1. The curve is split at inflection points, if any.
2. Each convex/concave curve region:
a. Fit the curve region with a G^1 continuous biarc that is tangent to
the curve's region at the region's end points.
b. If fit is good enough, we stop. Otherwise subdivide region into two
and recursively invoke step 2 on both halves.
Parameters:
CCrv: | 2D Curve to approximate using piecewise biarcs.
|
---|
Tolerance: | Of approximation.
|
---|
MaxAngle: | Of an arc in the output set. In no way it will be more than
or equal to 180 degrees. In Degrees.
|
---|
Returned Value:
SymbArcStruct *: List of arcs approximating Crv to within Tolerance.
|
---|
See Also:
SymbCrvBiArcApprox
Keywords:
(crv_skel.c:96)
Prototype:
CagdCrvStruct *SymbCrvBisectors(const CagdCrvStruct *Crv,
int BisectFunc,
CagdRType SubdivTol,
CagdBType NumerImprove,
CagdBType SameNormal,
CagdBType SupportPrms)
Description:
Computes the skeleton curves (bisectors) of a given curve or two.
If Crv contains a list of two curves the bisector between the two curves
is computed. Otherwise, Crv self bisectors are computed.
Employs the F1/F2/F34 functions from the paper:
Gershon Elber and Myung Soo Kim. ``Bisector Curves of Planar Rational
Curves.'' CAD, Vol 30, No 14, pp 1089-1096, December 1998.
Parameters:
Crv: | Either one or two curves to compute bisectors for.
Assumes E2 curves.
|
---|
BisectFunc: | If 1, normal fields are used to compute bisector surface.
If 2, tangent fields instead of normals are used to
compute the bisector surface function.
If 3, using solution of normal intersection pt.
|
---|
SubdivTol: | Accuracy of computation. 0.001 is a good start.
|
---|
NumerImprove: | f TRUE, a numerical improvment stage is applied.
|
---|
SameNormal: | If TRUE, the bisector should be oriented for inner or
outer side of the curves, with respect to their normals.
|
---|
SupportPrms: | If TRUE, return curve is of type E4 instead of E2 and the
third and fourth coefficients holds the support parameters
of the first and second curves, respectively.
|
---|
Returned Value:
CagdCrvStruct *: A list of piecewise linear curves approximating the
bisectors of Crv.
|
---|
See Also:
SymbCrvCnvxHull
SymbCrvDiameter
SymbCrvBisectorsSrf
Keywords:
bisectors
skeleton
(crv_skel.c:403)
Prototype:
CagdSrfStruct *SymbCrvBisectorsSrf(const CagdCrvStruct *Crv, int BisectFunc)
Description:
Computes the bisector surface definition of a given curve or two.
If Crv contains a list of two curves the bisector between the two curves
is computed. Otherwise, Crv self--bisectors are sought. The result is a
scalar surface whose zero set is the set of bisector(s) of the curves.
Parameters:
Crv: | Either one or two curves to compute bisectors for. Assumes
E2 curves.
|
---|
BisectFunc: | f 1, normal fields are used to compute bisector surface.
If 2, tangent fields instead of tangents are used to compute
the bisector surface function.
If 3, using solution of normal intersection pt.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface whose zero set provides matching
bisecting points on Crv, if BisectFunc > 0.
|
---|
See Also:
SymbCrvCnvxHull
SymbCrvDiameter
SymbCrvBisectors
SymbCrvBisectorsSrf2
SymbCrvPtBisectorsSrf3D
SymbCrvCrvBisectorSrf3D
Keywords:
bisectors
skeleton
(crv_skel.c:582)
Prototype:
CagdSrfStruct *SymbCrvBisectorsSrf2(const CagdCrvStruct *Crv)
Description:
Computes the bisector surface definition of a given curve or two.
If Crv contains a list of two curves the bisector between the two curves
is computed. Otherwise, Crv self--bisectors are sought. 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 elevate
in Z using the rational function of
||P - C1(s)||^2 - ||P - C2(t)||^2.
Parameters:
Crv: | Either one or two curves to compute bisectors for. Assumes
E3 curves.
|
---|
Returned Value:
CagdSrfStruct *: The real bisector surface for three space curves,
if BisectFunc = 4.
|
---|
See Also:
SymbCrvCnvxHull
SymbCrvDiameter
SymbCrvBisectors
SymbCrvBisectorsSrf
SymbCrvPtBisectorsSrf3D
SymbCrvCrvBisectorSrf3D
SymbCrvBisectorsSrf3
Keywords:
bisectors
skeleton
(crv_skel.c:747)
Prototype:
CagdSrfStruct *SymbCrvBisectorsSrf3(const CagdCrvStruct *Crv)
Description:
Computes the bisector surface definition of a given curve or two.
If Crv contains a list of two curves the bisector between the two curves
is computed. Otherwise, Crv self--bisectors are sought. 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:
Crv: | Either one or two curves to compute bisectors for. Assumes
E2 curves.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface whose zero set provides matching
bisecting points on Crv, if BisectFunc = 3.
|
---|
See Also:
SymbCrvCnvxHull
SymbCrvDiameter
SymbCrvBisectors
SymbCrvBisectorsSrf2
SymbCrvBisectorsSrf
SymbCrvPtBisectorsSrf3D
SymbCrvCrvBisectorSrf3D
Keywords:
bisectors
skeleton
(ccnvhul.c:2518)
Prototype:
CagdCrvStruct *SymbCrvCnvxHull(const CagdCrvStruct *Crv, CagdRType SubdivTol)
Description:
Computes the convex hull of a C1 freeform planar curve, in the
XY plane. The convex hull is computed by symbolically isolating the non
negative set (in t) of:
C'(t) x (C(r) - C(t)) >= 0, for all r.
Note the above equation yields a scalar value since C(t) is planar. The
resulting set in t contains all the sub-domain in C(t) that is on the
convex hull of C(t). Connecting these pieces with straight lines yields
the final convex hull curve.
Parameters:
Crv: | To compute its convex hull.
|
---|
SubdivTol: | f numeric search for the zero set (for surface subdivision).
A positive value (10 is a good start).
|
---|
Returned Value:
CagdCrvStruct *: A curve representing the convex hull of Crv.
|
---|
See Also:
SymbCrvPtTangents
SymbCrvDiameter
Keywords:
(symbzero.c:269)
Prototype:
CagdPtStruct *SymbCrvConstSet(const CagdCrvStruct *Crv,
int Axis,
CagdRType Epsilon,
CagdRType ConstVal,
CagdBType NoSolsOnEndPts)
Description:
Computes the constant set of a given curve, in the given axis (1-3 for
X-Z).
Returned is a list of the constant set points holding the parameter
values at Pt[0] of each point.
Parameters:
Crv: | To compute its constant set.
|
---|
Axis: | The axis of Crv to compute constant set for, X = 1, Y = 2, etc.
|
---|
Epsilon: | Tolerance control.
|
---|
ConstVal: | The value at which to compute the constant set.
|
---|
NoSolsOnEndPts: | f TRUE, solutions at the end of the domain are purged.
|
---|
Returned Value:
CagdPtStruct *: List of parameter values form which Crv has an
value of ConstVal in axis Axis.
|
---|
Keywords:
constant set
zero set
symbolic computation
(symb_crv.c:556)
Prototype:
CagdCrvStruct *SymbCrvCrossProd(const CagdCrvStruct *CCrv1,
const CagdCrvStruct *CCrv2)
Description:
Given two curves - computes their cross product in R3.
Returned curve is a curve representing the cross product of the two
given curves.
Parameters:
CCrv1, CCrv2: | wo curve to multiply in R3 and compute cross product for.
|
---|
Returned Value:
CagdCrvStruct *: A vector in R3 curve representing the cross product
of Crv1 x Crv2.
|
---|
See Also:
SymbCrvDotProd
SymbCrvVecDotProd
SymbCrvMult
SymbCrvMultScalar
Keywords:
product
cross product
symbolic computation
(smp_skel.c:291)
Prototype:
CagdSrfStruct *SymbCrvCrvBisectOnSphere(const CagdCrvStruct *CCrv1,
const CagdCrvStruct *CCrv2)
Description:
Computes the bisector on a sphere between two curves, both are assumed
to be on the unit sphere.
The end result is a bivariate function NOT a curve on the sphere but
rather a rational surface in the (s, t) parameter space of Crv1(s) and
Crv2(t) whose zero set provides the correspondancing bisector in the
parametric space.
Let P be the bisector point. Then, the following must vanish:
< P, C1(t) > = < P, C2(t) > (Equality of angular distance)
< P - C1(t), C1'(t) > = 0 (orthogonality of distance measure)
< P - C2(t), C2'(t) > = 0 (orthogonality of distance measure)
Then the returned result is the determinant of these three equations
that must vanish.
Parameters:
CCrv1, CCrv2: | Two curves on the unit sphere.
|
---|
Returned Value:
CagdSrfStruct *: The bisector surface bivariate function whose zero
set provides the bisector correspondance in the parameteric space.
|
---|
See Also:
SymbPtCrvBisectOnSphere2
SymbPtCrvBisectOnSphere3
Keywords:
bisectors
skeleton
(smp_skel.c:382)
Prototype:
CagdCrvStruct *SymbCrvCrvBisectOnSphere2(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType SubdivTol)
Description:
Computes the bisector on a sphere between two curves on the sphere.
The returned result is a piecewise linear curve on the sphere.
Parameters:
Crv1, Crv2: | Two curves on the unit sphere.
|
---|
SubdivTol: | Accuracy of computation.
|
---|
Returned Value:
CagdCrvStruct *: A list of piecewise linear curves approximating the
bisectors of Crv1 and Crv2 on the sphere.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbCrvCrvBisectOnSphere
SymbCrvCrvBisectOnSphere3
Keywords:
bisectors
skeleton
(smp_skel.c:556)
Prototype:
CagdSrfStruct *SymbCrvCrvBisectOnSphere3(const CagdCrvStruct *CCrv1,
const CagdCrvStruct *CCrv2)
Description:
Computes the bisector of two cone surfaces sharing an apex at the origin
represented as their generating curves on a unit sphere.
Let P be the bisector point. Then, the following must vanish:
< P, C1(t) > = < P, C2(t) > (Equality of angular distance)
< P - C1(t), C1'(t) > = 0 (orthogonality of distance measure)
< P - C2(t), C2'(t) > = 0 (orthogonality of distance measure)
Then, the returned is the solution of the above equations.
Parameters:
CCrv1, CCrv2: | wo curves on the unit sphere.
|
---|
Returned Value:
CagdSrfStruct *: The bisector surface function.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbPtCrvBisectOnSphere
SymbPtCrvBisectOnSphere2
Keywords:
bisectors
skeleton
(crv_skel.c:887)
Prototype:
CagdSrfStruct *SymbCrvCrvBisectorSrf3D(const CagdCrvStruct *CCrv1,
const CagdCrvStruct *CCrv2,
CagdRType Alpha)
Description:
Computes the bisector surface of two curve in arbitrary general three
space position.
Parameters:
CCrv1, CCrv2: | wo three space curves to compute their bisector surface.
|
---|
Alpha: | Alpha-sector ratio (0.5 for a bisector).
|
---|
Returned Value:
CagdSrfStruct *: The bisector surface.
|
---|
See Also:
SymbCrvDiameter
SymbCrvCnvxHull
SymbCrvBisectorsSrf
SymbCrvPtBisectorSrf3D
Keywords:
bisectors
skeleton
(moffset.c:116)
Prototype:
CagdCrvStruct *SymbCrvCrvConvolution(CagdCrvStruct *Crv1,
CagdCrvStruct *Crv2,
CagdRType OffsetDist,
CagdRType Tolerance)
Description:
Computes the convolution of the given two curves by matching their
tangents and reparametrizing Crv2.
If Crv2 is NULL, an Arc of radius OffsetDist is used, resulting in an
offset operation of Crv1.
Both Crv1 and Crv2 are assumed to have no inflection points and to
span the same angular domain. That is Crv1'(0) || Crv2'(0) and similarly
Crv1'(1) || Crv2'(1), where || denotes parallel.
Parameters:
Crv1, Crv2: | The two curves to convolve.
|
---|
OffsetDist: | Amount of offset, if Crv2 == NULL. Negative value denotes
other offset/convolution direction.
|
---|
Tolerance: | Of angular discrepancy that is allowed.
|
---|
Returned Value:
CagdCrvStruct *: The offset curve approximation.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
Keywords:
(distance.c:801)
Prototype:
CagdPtStruct *SymbCrvCrvInter(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType CCIEpsilon,
CagdBType SelfInter)
Description:
Computes the intersection points of two planar curves, in the XY plane
Parameters:
Crv1, Crv2: | The two curves to intersect.
|
---|
CCIEpsilon: | Tolerance of computation.
|
---|
SelfInter: | If TRUE, needs to handle a curve against itself detecting
self intersections in Crv1 (== Crv2).
|
---|
Returned Value:
CagdPtStruct *: List of intersection points. Each point holds the
intersection location in Crv1 as first coefficient and the
intersection location in Crv2 as second coefficient.
|
---|
See Also:
SymbSrfDistCrvCrv
SymbSrfDistFindPoints
CagdCrvCrvInter
Keywords:
(offset.c:1973)
Prototype:
CagdCrvStruct *SymbCrvCrvtrTrim(const CagdCrvStruct *Crv,
CagdRType Dist,
CagdRType Eps)
Description:
Given a planar curve and an offset distance, a-priori subdivide and
clip the given curve at all locations its curvature radius is smaller
than the offset distance.
Parameters:
Crv: | To clip at all locations the curvature of this planar (XY)
curve is too high.
|
---|
Dist: | Amount of offset. Negative denotes other offset direction.
|
---|
Eps: | Tolerance of computation.
|
---|
Returned Value:
CagdCrvStruct *: One of more subregions of Crv that have regions with
curvature no larger than 1/Dist.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
Keywords:
offset
(cubcaprx.c:38)
Prototype:
CagdCrvStruct *SymbCrvCubicApprox(const CagdCrvStruct *Crv,
CagdRType Tolerance)
Description:
Computes a piecewise cubic approximation to given freeform planar curve.
The following steps are performed during this approximation process:
a. Fit the curve with a C^1 continuous cubic that is tangent to the
curves's end points.
b. If fit is good enough, we stop. Otherwise subdivide region into two
and recursively invoke step 2 on both halfs.
Parameters:
Crv: | 2D Curve to approximate using piecewise cubics.
|
---|
Tolerance: | Of approximation, in Hausdorff distance sense.
|
---|
Returned Value:
CagdCrvStruct *: List of cubics approximating Crv to within Tolerance.
List will be C^1.
|
---|
See Also:
SymbCrvBiArcApprox
SymbApproxCrvAsBzrCubics
Keywords:
(symb_crv.c:820)
Prototype:
CagdCrvStruct *SymbCrvDeriveRational(const CagdCrvStruct *Crv)
Description:
Given a rational curve - computes its derivative curve (Hodograph)
using the quotient rule for differentiation.
Parameters:
Crv: | A curve to differentiate.
|
---|
Returned Value:
CagdCrvStruct *: Differentiated rational curve.
|
---|
See Also:
BzrCrvDerive
BspCrvDerive
CagdCrvDerive
SymbSrfDeriveRational
Keywords:
derivatives
(crv_skel.c:1770)
Prototype:
CagdCrvStruct *SymbCrvDeterminant2(const CagdCrvStruct *Crv11,
const CagdCrvStruct *Crv12,
const CagdCrvStruct *Crv21,
const CagdCrvStruct *Crv22)
Description:
Computes the expression of Crv11 * Crv22 - Crv12 * Crv21, which is a
determinant of a 2 by 2 matrix.
Parameters:
Crv11, Crv12, Crv21, Crv22: | The four factors of the determinant.
|
---|
Returned Value:
CagdCrvStruct *: A scalar field representing the determinant computation.
|
---|
See Also:
SymbCrvDeterminant3
SymbSrfDeterminant2
Keywords:
determinant
(crv_skel.c:1727)
Prototype:
CagdCrvStruct *SymbCrvDeterminant3(const CagdCrvStruct *Crv11,
const CagdCrvStruct *Crv12,
const CagdCrvStruct *Crv13,
const CagdCrvStruct *Crv21,
const CagdCrvStruct *Crv22,
const CagdCrvStruct *Crv23,
const CagdCrvStruct *Crv31,
const CagdCrvStruct *Crv32,
const CagdCrvStruct *Crv33)
Description:
Computes the expression of a 3 by 3 determinants.
Parameters:
Crv11, Crv12, Crv13: | The nine factors of the determinant.
|
---|
Crv21, Crv22, Crv23: | "
|
---|
Crv31, Crv32, Crv33: | "
|
---|
Returned Value:
CagdCrvStruct *: A scalar field representing the determinant computation.
|
---|
See Also:
SymbCrvDeterminant2
SymbSrfDeterminant3
Keywords:
determinant
(ccnvhul.c:165)
Prototype:
IPPolygonStruct *SymbCrvDiameter(const CagdCrvStruct *Crv,
CagdRType SubdivTol)
Description:
Given a freeform curve, compute its diameter as a function.
If the curve is a convex, probably as a result of a convex hull
computation of an original curve, the matching will be one to one.
Parameters:
Crv: | A curve to process its diameter function.
|
---|
SubdivTol: | f numeric search for the zero set (for surface subdivision).
A positive value (0.01 is a good start).
|
---|
Returned Value:
IPPolygonStruct *: Contours of the matched parallel lines on Crv.
Each vertex will hold two parameter values on Crv.
|
---|
See Also:
SymbCrvCnvxHull
SymbCrvPtTangents
SymbCrvDiameterMinMax
MvarCrvDiameter
Keywords:
(ccnvhul.c:362)
Prototype:
CagdRType *SymbCrvDiameterMinMaxMalloc(const CagdCrvStruct *Crv,
IPPolygonStruct *Cntrs,
int Min)
Description:
Computes the maximum or minimum diameter out of diameter matched list
Parameters:
Crv: | To compute its diameter.
|
---|
Cntrs: | utput of SymbCrvDiameter - the matched paraller tangents.
|
---|
Min: | TRUE of minimum diameter, FALSE for maximum diameter.
|
---|
Returned Value:
CagdRType *: Two parameter values on Crv of tangent lines extreme value.
Returns an address to point.
|
---|
See Also:
SymbCrvDiameter
Keywords:
(ccnvhul.c:305)
Prototype:
CagdRType *SymbCrvDiameterMinMaxToData(const CagdCrvStruct *Crv,
IPPolygonStruct *Cntrs,
int Min,
CagdRType *Params)
Description:
Computes the maximum or minimum diameter out of diameter matched list
Parameters:
Crv: | To compute its diameter.
|
---|
Cntrs: | utput of SymbCrvDiameter - the matched paraller tangents.
|
---|
Min: | TRUE of minimum diameter, FALSE for maximum diameter.
|
---|
Params: | Two parameter values on Crv of tangent lines extreme value.
Returns an address to point.
|
---|
Returned Value:
CagdRType *: Two parameter values on Crv of tangent lines extreme value.
Returns an address to point.
|
---|
See Also:
SymbCrvDiameter
Keywords:
(symb_crv.c:373)
Prototype:
CagdCrvStruct *SymbCrvDotProd(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2)
Description:
Given two curves - computes their dot product.
Returned curve is a scalar curve representing the dot product of the
two given curves.
Parameters:
Crv1, Crv2: | Two curve to multiply and compute a dot product for.
|
---|
Returned Value:
CagdCrvStruct *: A scalar curve representing the dot product of
Crv1 . Crv2.
|
---|
See Also:
SymbCrvScalarScale
SymbCrvVecDotProd
SymbCrvMult
SymbCrvMultScalar
Keywords:
product
dot product
symbolic computation
(duality.c:31)
Prototype:
CagdCrvStruct *SymbCrvDual(const CagdCrvStruct *Crv)
Description:
Computes the dual of the given curve. The dual curve is a mapping of
the tangent lines of Crv (for which Crv is the envelop of) to points in
the dual space.
Duality is derived by computing the tangent line "Ax + By + C = 0" to
curve Crv and mapping this line to homogeneous point (A/C, B/C).
Parameters:
Crv: | The curve to compute its dual.
|
---|
Returned Value:
CagdCrvStruct *: The dual curve.
|
---|
See Also:
SymbSrfDual
Keywords:
(symb_crv.c:1038)
Prototype:
CagdCrvStruct *SymbCrvEnclosedArea(const CagdCrvStruct *Crv)
Description:
Given a planar curve, compute its enclosed area field curve.
This has little meaning unless Crv is closed, in which by evaluation
the resulting area field curve at the end points, the area enclosed by
Crv can be computed.
Parameters:
Crv: | A curve to compute area field curve for.
|
---|
Returned Value:
CagdCrvStruct *: The area field curve.
|
---|
See Also:
SymbCrvEnclosedAreaEval
Keywords:
area
symbolic computation
(symb_crv.c:1109)
Prototype:
CagdRType SymbCrvEnclosedAreaEval(const CagdCrvStruct *Crv)
Description:
Given a planar curve, compute its enclosed signed area.
Parameters:
Crv: | A curve to compute signed area for.
|
---|
Returned Value:
CagdRType: The signed area.
|
---|
See Also:
SymbCrvEnclosedArea
Keywords:
area
symbolic computation
(curvatur.c:720)
Prototype:
CagdPtStruct *SymbCrvExtremCrvtrPts(const CagdCrvStruct *Crv,
CagdRType Epsilon,
CagdBType Crv2D)
Description:
Given a planar curve, finds all its extreme curvature points by finding
the set of extreme locations on the curvature function of Crv.
Extreme curvature is computed as the zeros of <(kN)', kN> = k'k.
Assumes the input curve is C^2 (preferably C^3).
Parameters:
Crv: | To find all int extrem curvature locations.
|
---|
Epsilon: | Accuracy control.
|
---|
Crv2D: | TRUE if the curve is in the XY plane and treated as 2D,
FALSE, for a full 3D curve.
|
---|
Returned Value:
CagdPtStruct *: A list of parameter values on Crv that have extreme
curvature values. An int attribute named "ExtremType"
is placed on each parameter value with a value of -1,
0, or 1 for minimum curvature location, zero curvature
location and maximum curvature location, respectively.
|
---|
See Also:
SymbCrv2DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DRadiusNormal
SymbCrv3DCurvatureNormal
SymbCrv2DCurvatureSign
SymbCrv2DInflectionPts
SymbCrvExtremCrvtrPts2
Keywords:
curvature
(curvatur.c:673)
Prototype:
CagdPtStruct *SymbCrvExtremCrvtrPts2(const CagdCrvStruct *Crv,
CagdRType Epsilon,
CagdBType Crv2D)
Description:
Given a planar curve, finds all its extreme curvature points by finding
the set of extreme locations on the curvature function of Crv.
Extreme curvature is computed as the zeros of <(kN)', kN> = k'k.
Parameters:
Crv: | To find all int extrem curvature locations.
|
---|
Epsilon: | Accuracy control.
|
---|
Crv2D: | TRUE if the curve is in the XY plane and treated as 2D,
FALSE for a full 3D curve.
|
---|
Returned Value:
CagdPtStruct *: A list of parameter values on Crv that have extrem
curvature values. An int attribute named "ExtremType"
is placed on each parameter value with a value of -1,
0, or 1 for minimum curvature location, zero curvature
location and maximum curvature location, respectively.
|
---|
See Also:
SymbCrv2DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DCurvatureSqr
SymbCrv3DRadiusNormal
SymbCrv3DCurvatureNormal
SymbCrv2DCurvatureSign
SymbCrv2DInflectionPts
SymbCrvExtremCrvtrPts
Keywords:
curvature
(symbzero.c:142)
Prototype:
CagdPtStruct *SymbCrvExtremSet(const CagdCrvStruct *Crv,
int Axis,
CagdRType Epsilon,
CagdBType NoSolsOnEndPts)
Description:
Computes the extrema set of a given curve, in given axis (0/1-3 for
W/X-Z).
Returned is a list of the extreme set points holding the parameter
values at Pt[0] of each point.
One could compute the derivative of the curve and find its zero set.
However, for rational curves, this will double the degree and slow down
the computation considerably.
Parameters:
Crv: | To compute its extrema set.
|
---|
Axis: | The axis of Crv to compute extrema set for, W = 0, X = 1, etc.
|
---|
Epsilon: | Tolerance control.
|
---|
NoSolsOnEndPts: | f TRUE, solutions at the end of the domain are purged.
|
---|
Returned Value:
CagdPtStruct *: List of parameter values form which Crv has an
extrema value in axis Axis.
|
---|
Keywords:
extrema set
symbolic computation
(crvtrrec.c:37)
Prototype:
CagdCrvStruct *SymbCrvGenSignedCrvtr(const CagdCrvStruct *CCrv,
int Samples,
int Order,
int ArcLen)
Description:
Computes a signed curvature signature scalar curve to the given planar
curve. The returned signature is parameterized by the curve's arc-length
even if the original curve is not arc length, if ArcLen is TRUE.
Parameters:
CCrv: | Curve to compute signed curvature signature approximation for.
|
---|
Samples: | Number of samples to use in the approximation.
|
---|
Order: | Order of signed curvature approximating curve.
|
---|
ArcLen: | TRUE if Crv is to be assumed arc-length, FALSE if needs to
compensate for a non arc-length parametrization.
|
---|
Returned Value:
CagdCrvStruct *: Scalar polynomial curve of length Samples and of
order Order that represents the signed curvature field of Crv.
|
---|
See Also:
SymbSignedCrvtrGenCrv
SymbCrv3DCurvatureNormal
SymbCrv2DCurvatureSign
Keywords:
(symb_crv.c:281)
Prototype:
CagdCrvStruct *SymbCrvInvert(const CagdCrvStruct *Crv)
Description:
Given a scalar curve, returns a scalar curve representing the reciprocal
values, by making it rational (if was not one) and flipping the numerator
and the denominator.
Parameters:
Crv: | A scalar curve to compute a reciprocal value for.
|
---|
Returned Value:
CagdCrvStruct *: A rational scalar curve that is equal to the
reciprocal value of Crv.
|
---|
See Also:
SymbCrvDotProd
SymbCrvVecDotProd
SymbCrvMult
SymbCrvMultScalar
Keywords:
division
symbolic computation
reciprocal value
(offset.c:1299)
Prototype:
CagdCrvStruct *SymbCrvLeastSquarOffset(const CagdCrvStruct *Crv,
CagdRType OffsetDist,
int NumOfSamples,
int NumOfDOF,
int Order,
CagdRType *Tolerance)
Description:
Given a curve and an offset amount OffsetDist, returns an approximation to
the offset curve by least square fitting a curve to samples taken on the
offset curve.
Resulting curve of order Order (degree of Crv if Order == 0) will have
NumOfDOF control points that least sqaure fit NumOfSamples samples on the
offset curve.
Tolerance will be updated to hold an error distance measure.
Parameters:
Crv: | To approximate its offset curve with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
NumOfSamples: | umber of samples to sample the offset curve at.
|
---|
NumOfDOF: | Number of degrees of freedom on the newly computed offset
approximation. This is thesame as the number of control
points the new curve will have.
|
---|
Order: | Of the newly constructed offset approximation. If equal to
zero, the order of Crv will be used.
|
---|
Tolerance: | To return an error estimate in the L-infinity norm.
|
---|
Returned Value:
CagdCrvStruct *: An approximation to the offset curve.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvMatchingOffset
Keywords:
offset
(ccnvhul.c:2486)
Prototype:
CagdCrvStruct *SymbCrvListCnvxHull(CagdCrvStruct *Crvs, CagdRType SubdivTol)
Description:
Computes the convex hull of C1 freeform planar curves, in the
XY plane. The convex hull is computed by symbolically isolating the non
negative set (in t) of:
C'(t) x (C(r) - C(t)) >= 0, for all r.
Note the above equation yields a scalar value since C(t) is planar. The
resulting set in t contains all the subdomain in C(t) that is on the
convex hull of C(t). Connecting these pieces with straight lines yeilds
the final convex hull curve.
Parameters:
Crvs: | To compute their convex hull.
|
---|
SubdivTol: | f numeric search for the zero set (for surface subdivision).
A positive value (0.01 is a good start).
|
---|
Returned Value:
CagdCrvStruct *: A curve representing the convex hull of Crvs.
|
---|
See Also:
SymbCrvPtTangents
SymbCrvDiameter
Keywords:
(crvlsapx.c:1338)
Prototype:
CagdCrvStruct *SymbCrvLstSqrAprxPlln(const CagdCtlPtStruct *Polyline,
CagdRType ExpectedError,
int Order,
CagdRType NumericTol,
CagdBType ForceC1Continuity,
CagdRType C1DiscontThresh,
SymbCrvLSErrorMeasureType ErrMeasure)
Description:
Approximates a polyline segment by a curve within an estimates square
error. This function repeatedly requests the next C1-continuous segment of
the polyline and approximates it with a B-spline curve of a required order
and approximation error, until the entire polyline is processed.
Parameters:
Polyline: | The polyline to be approximated (represented as a
list of points).
|
---|
ExpectedError: | The expected square approximation error of the curve.
|
---|
Order: | The polynomial order of the required approximating
curve.
|
---|
NumericTol: | The numeric tolerance for the zero solver (used in
the curve-point distance computation).
|
---|
ForceC1Continuity: | flag indicating that the algorithm should attempt
to make the curve C1-continuous (except where
C1-discontinuities in the original polyline are
suspected).
|
---|
C1DiscontThresh: | The threshold for determining C1-discontinuity in the
polyline, in terms of dot-product (i.e. the inverse
cosine of this value is the threshold angle).
|
---|
ErrMeasure: | Which method of error measurement to use.
|
---|
Returned Value:
CagdCrvStruct *: The approximating curve.
SymbCrvApproxPolylineProcessSegment, SymbCrvApproxPolylineExtractNext
|
---|
Keywords:
least squares
(moffset.c:50)
Prototype:
CagdCrvStruct *SymbCrvMatchingOffset(CagdCrvStruct *Crv,
CagdRType OffsetDist,
CagdRType Tolerance)
Description:
Computes an offset to a freeform curve using matching of tangent fields.
The given curve is split at all its inflection points, made sure it spans
less than 90 degrees, and then is matched against an arc of the proper
angular span of tangents.
Unlike other offset methods, this method allways preserves the distance
between the original curve ans its offset. The error in this methods can
surface only in the non orthogonality of the offset direction.
Parameters:
Crv: | To approximate its offset curve with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
Tolerance: | Of angular discrepancy that is allowed.
|
---|
Returned Value:
CagdCrvStruct *: The offset curve approximation.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvCrvConvolution
Keywords:
(symb_crv.c:1488)
Prototype:
CagdCrvStruct *SymbCrvMergeScalar(const CagdCrvStruct *CrvW,
const CagdCrvStruct *CrvX,
const CagdCrvStruct *CrvY,
const CagdCrvStruct *CrvZ)
Description:
Given a set of scalar curves, treat them as coordinates into a new curve.
Assumes at least CrvX is not NULL in which a scalar curve is returned.
Assumes CrvX/Y/Z/W are either E1 or P1 in which the weights are assumed
to be identical and can be ignored if CrvW exists or copied otheriwse.
Parameters:
CrvW: | The weight component of new constructed curve, if have any.
|
---|
CrvX: | The X component of new constructed curve.
|
---|
CrvY: | The Y component of new constructed curve, if have any.
|
---|
CrvZ: | The Z component of new constructed curve, if have any.
|
---|
Returned Value:
CagdCrvStruct *: A new curve constructed from given scalar curves.
|
---|
See Also:
SymbSrfMergeScalar
SymbCrvSplitScalar
Keywords:
merge
symbolic computation
(symb_crv.c:1408)
Prototype:
CagdCrvStruct *SymbCrvMergeScalarN(CagdCrvStruct * const *CrvVec,
int NumCrvs)
Description:
Given a vector of scalar curves, treat them as coordinates into a new
vector curve.
Assumes at least CrvVec[1] is not NULL in which case a scalar curve is
returned.
Assumes CrvVec[i] are either E1 or P1 in which case the weights are
assumed to be identical and can be simply copied if exist.
Parameters:
CrvVec: | A vector of scalar curves.
|
---|
NumCrvs: | Number of curves in CrvVec.
|
---|
Returned Value:
CagdCrvStruct *: A new curve constructed from given scalar curves.
|
---|
See Also:
SymbSrfMergeScalar
SymbCrvSplitScalarN
Keywords:
merge
symbolic computation
(composit.c:60)
Prototype:
int SymbCrvMonotoneCtlPt(const CagdCrvStruct *Crv, int Axis)
Description:
A function to examine if the given curve has a monotone control polygon
in the prescribed axis.
Parameters:
Crv: | Curve to examine the the monotonicity in axis Axis.
|
---|
Axis: | The axis of Crv to examine the monotonicity for.
|
---|
Returned Value:
int: 0 if a completely zero curve (up to tight eps),
+1/-1 for increasing/decreasing monotone,
9 if a non monotone curve.
|
---|
See Also:
SymbCrvPosNegWeights
Keywords:
(symb_crv.c:203)
Prototype:
CagdCrvStruct *SymbCrvMult(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2)
Description:
Given two curves - multiply them coordinate-wise.
The two curves are promoted to same point type before the multiplication
can take place.
Parameters:
Crv1, Crv2: | Two curve to multiply coordinate-wise.
|
---|
Returned Value:
CagdCrvStruct *: The product of Crv1 * Crv2 coordinate-wise.
|
---|
See Also:
SymbCrvDotProd
SymbCrvVecDotProd
SymbCrvInvert
SymbCrvMultScalar
Keywords:
product
symbolic computation
(symb_crv.c:487)
Prototype:
CagdCrvStruct *SymbCrvMultScalar(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2)
Description:
Given two curves - a vector curve Crv1 and a scalar curve Crv2, multiply
all Crv1's coordinates by the scalar curve Crv2.
Returned curve is a curve representing the product of the two given
curves.
Parameters:
Crv1, Crv2: | Two curve to multiply.
Crv1 is assume at most of dimension 3.
|
---|
Returned Value:
CagdCrvStruct *: A curve representing the product of Crv1 and Crv2.
|
---|
See Also:
SymbCrvDotProd
SymbCrvVecDotProd
SymbCrvMult
SymbCrvCrossProd
SymbSrfMultScalar
Keywords:
product
symbolic computation
(multires.c:860)
Prototype:
CagdCrvStruct *SymbCrvMultiResBWavelet(CagdRType *KV,
int Order,
int Len,
int KnotIndex)
Description:
Constructs the B-Wavelet of knot KV[KnotIndex] for the given knot
sequence KV and order Order.
Parameters:
KV: | Knot sequence of the space.
|
---|
Order: | Order of space.
|
---|
Len: | Length of knot sequence.
|
---|
KnotIndex: | ndex of knot to compute the wavelet for.
|
---|
Returned Value:
CagdCrvStruct *: A scalar curve representing the wavelet.
|
---|
See Also:
SymbBspBasisInnerProd
Keywords:
(multires.c:537)
Prototype:
CagdCrvStruct *SymbCrvMultiResCompos(const SymbMultiResCrvStruct *MRCrv)
Description:
Given a multi resolution decomposition of a Bspline curve, computes the
regular Bspline curve out of it.
Parameters:
MRCrv: | A multi resolution decomposition of a curve.
|
---|
Returned Value:
CagdCrvStruct *: A curve that adds up all components of the multi
resolution decomposition MRCrv.
|
---|
Keywords:
multi resolution
least square decomposition
(multires.c:566)
Prototype:
CagdCrvStruct *SymbCrvMultiResComposAtT(const SymbMultiResCrvStruct *MRCrv,
CagdRType T)
Description:
Given a multiresolution decomposition of a Bspline curve, computes a
regular Bspline curve out of it representing the decomposed curve at
the multi resolution hierarchy level of T.
Although decomposition is discrete, T can be any real number between
these discrete levels and a linear interpolation of adjacent levels is
exploited.
Parameters:
MRCrv: | A multi resolution decomposition of a curve.
|
---|
T: | A mult resolution hierarcy level to compute curve for.
|
---|
Returned Value:
CagdCrvStruct *: A curve that adds up all components of the multi
resolution decomposition MRCrv up to and including
level T.
|
---|
Keywords:
multi resolution
least square decomposition
(multires.c:1136)
Prototype:
SymbMultiResCrvStruct *SymbCrvMultiResCopy(const SymbMultiResCrvStruct
*MRCrvOrig)
Description:
Given a multi resolution decomposition of a Bspline curve, copy it.
Parameters:
MRCrvOrig: | A multi resolution decomposition of a curve to copy.
|
---|
Returned Value:
SymbMultiResCrvStruct *: A duplicated structure of MRCrv.
|
---|
Keywords:
multi resolution
least square decomposition
(multires.c:180)
Prototype:
SymbMultiResCrvStruct *SymbCrvMultiResDecomp(const CagdCrvStruct *Crv,
CagdBType Discont)
Description:
Given a B-spline curve, computes a hierarchy of B-spline curves, each
being represented using a subspace of the previous, up to a curve with no
interior knots (i.e. a polynomial Bezier).
However, if Discont == TRUE, then C1 discontinuities are preserved
through out the hierarchy decomposition.
Each level in hierarchy has approximately half the number of control
points of the previous one.
Least square curve fitting is used to build the hierarchy.
Parameters:
Crv: | To compute a least square multi resolution decomposition for.
|
---|
Discont: | Do we want to preserve discontinuities?
|
---|
Returned Value:
SymbMultiResCrvStruct *: A multi resolution curve structure hold the
multi resolution decomposition of Crv.
|
---|
See Also:
SymbCrvMultiResDecomp2
Keywords:
multi resolution
least square decomposition
(multires.c:317)
Prototype:
SymbMultiResCrvStruct *SymbCrvMultiResDecomp2(const CagdCrvStruct *Crv,
CagdBType Discont,
CagdBType SameSpace)
Description:
Given a Bspline curve, computes a hierarch of Bspline curves, each being
represented using a subspace of the previous, upto a curve with no
interior knots (i.e. a polynomial Bezier).
However, if Discont == TRUE, then C1 discontinuities are preserved
through out the hierarchy decomposition.
Each level in hierarchy has approximately half the number of control
points of the previous one.
B-Wavelet decomposition is used to build the hierarchy.
See R. Kazinnik and G. Elber, "Orthogonal Decomposition of Non Uniform
Bspline Spaces using Wavelets", Eurographics 1997.
Parameters:
Crv: | To compute a B-Wavelet decomposition for.
|
---|
Discont: | Do we want to preserve discontinuities?
|
---|
SameSpace: | f this curve is in the same space as last curve, exploit
this in optimizing the computation cost.
|
---|
Returned Value:
SymbMultiResCrvStruct *: A B-Wavelet decomposition structure hold the
multi resolution decomposition of Crv.
|
---|
See Also:
SymbCrvMultiResDecomp
Keywords:
multi resolution
B-Wavelet decomposition
(multires.c:624)
Prototype:
void SymbCrvMultiResEdit(const SymbMultiResCrvStruct *MRCrv,
CagdRType t,
const CagdVType TransDir,
CagdRType Level,
CagdRType FracLevel)
Description:
Given a multi resolution decomposition of a Bspline curve, edit it by
modifying its Level'th Level according to the TransDir of Position at
parametr t.
Level can be a fraction number between the discrete levels of the
decomposition denoting a linear blend of two neighboring discrete levels.
Editing is performed in place.
Parameters:
MRCrv: | A multi resolution decomposition of a curve to edit it in
place.
|
---|
t: | Parameter value at which to modify MRCrv.
|
---|
TransDir: | Directional tranlation transformation to apply.
|
---|
Level: | Of multi resolution hierarchy to edit.
|
---|
FracLevel: | The fraction level to edit - will blend two neighboring
levels.
|
---|
Returned Value:
Keywords:
multi resolution
least square decomposition
(multires.c:1074)
Prototype:
void SymbCrvMultiResFree(SymbMultiResCrvStruct *MRCrv)
Description:
Given a multi resolution decomposition of a Bspline curve, free it.
Parameters:
MRCrv: | A multi resolution decomposition of a curve to free.
|
---|
Returned Value:
Keywords:
multi resolution
least square decomposition
(multires.c:42)
Prototype:
CagdBType SymbCrvMultiResKVBuild(const CagdCrvStruct *Crv,
CagdBType Discont,
CagdRType ***KVList,
int **KVListSizes,
int *KVListSize)
Description:
Constructs a hierarchy of knot sequence for the given B-spline curve and
until no interior knot exists in the knot sequence.
Parameters:
Crv: | Curve to construct a hierarchy of knot sequences.
|
---|
Discont: | Should we preserve discontinuities as much as we can?
|
---|
KVList: | A vector of pointers to knot sequences in the hierarchy.
|
---|
KVListSizes: | ength of each knot sequence in vector KVList.
|
---|
KVListSize: | Size of KVList - number of knot sequences in hierarchy.
|
---|
Returned Value:
CagdBType: TRUE if successful, FALSE otherwise.
|
---|
See Also:
SymbCrvMultiResDecomp
SymbCrvMultiResDecomp2
Keywords:
(multires.c:1104)
Prototype:
SymbMultiResCrvStruct *SymbCrvMultiResNew(int Levels, CagdBType Periodic)
Description:
Allocates a data structure for multi resolution decomposition of a Bspline
curve of Levels levels and possiblt periodic.
Parameters:
Levels: | Number of levels to expect in the decomposition.
|
---|
Periodic: | Is the curve periodic?
|
---|
Returned Value:
SymbMultiResCrvStruct *: A structure to hold a multi resolution
decomposition of a curve of Levels levels.
|
---|
Keywords:
multi resolution
least square decomposition
(multires.c:829)
Prototype:
CagdRType *SymbCrvMultiResRefineLevelMalloc(SymbMultiResCrvStruct *MRCrv,
CagdRType T,
CagdBType SpanDiscont)
Description:
Given a multi resolution decomposition of a Bspline curve, refine it at
neighborhood of parameter value t, in place.
Parameters:
MRCrv: | A multi resolution decomposition of a curve, to refine in
place.
|
---|
T: | Parameter value at which to refine MRCrv.
|
---|
SpanDiscont: | o we want to refine beyond discontinuities?
|
---|
Returned Value:
CagdRType *: A pointer to an array of two real numbers holding the
domain in MRCrv that was refined.
|
---|
Keywords:
multi resolution
least square decomposition
(multires.c:734)
Prototype:
CagdRType *SymbCrvMultiResRefineLevelToData(SymbMultiResCrvStruct *MRCrv,
CagdRType T,
CagdBType SpanDiscont,
CagdRType *Domain)
Description:
Given a multi resolution decomposition of a Bspline curve, refine it at
neighborhood of parameter value t, in place.
Parameters:
MRCrv: | A multi resolution decomposition of a curve, to refine in
place.
|
---|
T: | Parameter value at which to refine MRCrv.
|
---|
SpanDiscont: | o we want to refine beyond discontinuities?
|
---|
Domain: | A pointer to an array of two real numbers holding the
domain in MRCrv that was refined.
|
---|
Returned Value:
CagdRType *: A pointer to an array of two real numbers holding the
domain in MRCrv that was refined.
|
---|
Keywords:
multi resolution
least square decomposition
(offset.c:72)
Prototype:
CagdCrvStruct *SymbCrvOffset(const CagdCrvStruct *CCrv,
CagdRType OffsetDist,
CagdBType BezInterp)
Description:
Given a curve and an offset amount OffsetDist, returns an approximation to
the offset curve by offseting the control polygon in the normal direction.
Parameters:
CCrv: | To approximate its offset curve with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
BezInterp: | If TRUE, control points are interpolated when the curve is
reduced to a Bezier form. Otherwise, control points are
translated OffsetDist amount only, under estimating the
Offset.
|
---|
Returned Value:
CagdCrvStruct *: An approximation to the offset curve.
|
---|
See Also:
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
SymbCrvVarOffset
Keywords:
offset
(offset.c:1867)
Prototype:
CagdCrvStruct *SymbCrvOffset2CrvsJoint(CagdCrvStruct *OrigCrv1,
CagdCrvStruct *OrigCrv2,
CagdCrvStruct **OffCrv1,
CagdCrvStruct **OffCrv2)
Description:
Update the end of Crv1 and the beginning of Crv2 to connect after an
offset operation that was applied to them. There are a few options:
1. End of Crv1 is the same of start of Crv (if the two curves are C^1
connected). Do nothing.
2. The two curves intersects. Trim away end of Crv1 and start of Crv2
up to the intersection location. This case is handled assuming small
interaction between the two curves only, seeking a single intersection.
Note old OfCrv1/2 are freed and being substituted in place with the
new trimmed versions.
3. The two curves do not intersect. Add a joint round curve that is C^1
to both Crv1's end and Crv2's start. The new joint round curve is
returned.
Parameters:
OrigCrv1: | To examine its end against Crv2, if the same.
|
---|
OrigCrv2: | To examine its start against Crv1, if the same.
|
---|
OffCrv1: | To properly update its end against Crv2, if needs to.
|
---|
OffCrv2: | To properly update its start against Crv1, if needs to.
|
---|
Returned Value:
CagdCrvStruct *: A new round curve bnetween OffCrv1 and OffCrv2 if not
NULL.
Note also that OffCrv1/2 might be changed in place.
|
---|
Keywords:
(orthotom.c:38)
Prototype:
CagdCrvStruct *SymbCrvOrthotomic(const CagdCrvStruct *Crv,
const CagdPType P,
CagdRType K)
Description:
Computes the K-orthotomic of a curve with respect to point P:
P + K < (C(t) - P), N(t) > N(t)
See "Fundamentals of Computer Aided Geometric Design", by J. Hoschek and
and D. Lasser.
Parameters:
Crv: | To compute its K-orthotomic
|
---|
P: | The points to which the K-orthotomic is computed for Crv for.
|
---|
K: | The magnitude of the orthotomic function.
|
---|
Returned Value:
CagdCrvStruct *: The K-orthotomic
|
---|
See Also:
SymbSrfOrthotomic
Keywords:
(distance.c:485)
Prototype:
int SymbCrvPointInclusion(const CagdCrvStruct *CCrv,
const CagdPType Pt,
CagdRType Epsilon)
Description:
Given a closed planar curve and a point, finds if point is inside curve.
Uses winding number accumulation in the computation.
Parameters:
CCrv: | Closed planar curve to examine for the inclusion of Pt.
|
---|
Pt: | Point tp test for inclusion in Crv.
|
---|
Epsilon: | Accuracy of computation.
|
---|
Returned Value:
int: 1 if Pt inside Crv, -1 otherwise, 0 if on boundary to within
Epsilon.
|
---|
See Also:
SymbCrvPointInclusion
SymbDistCrvLine
SymbCrvRayInter
Keywords:
curve point inclusion
(symbzero.c:513)
Prototype:
CagdBType SymbCrvPosNegWeights(const CagdCrvStruct *Crv)
Description:
Returns TRUE iff the Crv is not rational or rational with weights that are
entirely positive or entirely negative.
Parameters:
Crv: | To examine for same sign weights, if any.
|
---|
Returned Value:
CagdBType: TRUE if no weights or all of same sign.
|
---|
See Also:
CagdCrvBBox
CagdSrfBBox
GMBBSetBBoxPrecise
SymbCrvPosNegWeights
CagdAllWeightsSame
Keywords:
symbolic computation
(crv_skel.c:1214)
Prototype:
CagdCrvStruct *SymbCrvPtBisectorCrv2D(const CagdCrvStruct *CCrv,
const CagdPType Pt,
CagdRType Alpha)
Description:
Computes the alpha-/bi-sector curve of a planar curve a point, all in
the XY plane. The result is 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 sought bisector.
Parameters:
CCrv: | 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
(crv_skel.c:1358)
Prototype:
CagdSrfStruct *SymbCrvPtBisectorSrf3D(const CagdCrvStruct *CCrv,
const CagdPType Pt,
CagdRType RulingScale)
Description:
Computes the bisector surface of a curve in arbitrary general three
space position and a point in three space.
Parameters:
CCrv: | Three space curve to compute its bisector surface with Pt.
|
---|
Pt: | A point in three space to compute its bisector with Crv.
|
---|
RulingScale: | The scaling factor for the ruling direction.
|
---|
Returned Value:
CagdSrfStruct *: The bisector surface.
|
---|
See Also:
SymbCrvDiameter
SymbCrvCnvxHull
SymbCrvBisectorsSrf
SymbCrvCrvBisectorSrf3D
SymbSrfPtBisectorSrf3D
SymbCrvPtBisectorCrv2D
Keywords:
bisector
(crv_tans.c:48)
Prototype:
CagdPtStruct *SymbCrvPtTangents(const CagdCrvStruct *CCrv,
const CagdPType Pt,
CagdRType Tolerance)
Description:
Computes the points on a C1 freeform planar Bspline curve, Crv, that a
line tangent to Crv there goes through point Pt. That is,
(C(t) - P) || C'(t),
where || denotes a parallel constraint.
Parameters:
CCrv: | To compute its tangent lines through Pt.
|
---|
Pt: | Point of origin, all tangents to Crv goes through.
|
---|
Tolerance: | ccuracy of computation.
|
---|
Returned Value:
CagdPtStruct *: A list of parameter location on Crv with tangent lines
through Pt. Parameters are save in the X coordinate.
|
---|
See Also:
SymbCrvCnvxHull
SymbCircTanTo2Crvs
SymbTangentToCrvAtTwoPts
mbCrvDiameter
Keywords:
(distance.c:588)
Prototype:
CagdPtStruct *SymbCrvRayInter(const CagdCrvStruct *Crv,
const CagdPType RayPt,
const CagdVType RayDir,
CagdRType Epsilon)
Description:
Given a curve and a ray, finds the intersection points on the curve where
the ray pierces the curve.
Returned is a list of parameter value with local extreme distances.
Let Crv be (x(t), y(t)). By substituting x(t) and y(t) into the line
equation of the ray, we derive the distance function whose zero set
captures all curve-line intersections. They are then filtered to those
on the half-line ray.
Parameters:
Crv: | The curve to find its intersections with the ray.
|
---|
RayPt, RayDir: | The ray prescription.
|
---|
Epsilon: | Accuracy of computation.
|
---|
Returned Value:
CagdPtStruct *: A list of parameter values of the ray-curve
intersections.
|
---|
See Also:
SymbDistCrvLine
MvarDistSrfLine
SymbLclDistCrvLine
GMPolygonRayInter
Keywords:
curve ray intersection
(symb_crv.c:783)
Prototype:
CagdCrvStruct *SymbCrvRtnlMult(const CagdCrvStruct *Crv1X,
const CagdCrvStruct *Crv1W,
const CagdCrvStruct *Crv2X,
const CagdCrvStruct *Crv2W,
CagdBType OperationAdd)
Description:
Given two curves - multiply them using the quotient product rule:
X = X1 W2 +/- X2 W1
All provided curves are assumed to be non rational scalar curves.
Returned is a non rational scalar curve (CAGD_PT_E1_TYPE).
Parameters:
Crv1X: | Numerator of first curve.
|
---|
Crv1W: | Denominator of first curve. Can be NULL.
|
---|
Crv2X: | Numerator of second curve.
|
---|
Crv2W: | Denominator of second curve. Can be NULL.
|
---|
OperationAdd: | TRUE for addition, FALSE for subtraction.
|
---|
Returned Value:
CagdCrvStruct *: The result of Crv1X Crv2W +/- Crv2X Crv1W.
|
---|
See Also:
SymbCrvDotProd
SymbCrvVecDotProd
SymbCrvMult
SymbCrvMultScalar
Keywords:
product
symbolic computation
(symb_crv.c:339)
Prototype:
CagdCrvStruct *SymbCrvScalarScale(const CagdCrvStruct *Crv, CagdRType Scale)
Description:
Given a curve, scale it by Scale.
Parameters:
Crv: | A curve to scale by magnitude Scale.
|
---|
Scale: | Scaling factor.
|
---|
Returned Value:
CagdCrvStruct *: A curves scaled by Scale compared to Crv.
|
---|
See Also:
SymbCrvDotProd
SymbCrvVecDotProd
SymbCrvMult
SymbCrvMultScalar
Keywords:
scaling
symbolic computation
(symbzero.c:339)
Prototype:
CagdCrvStruct *SymbCrvSliceCrvsByPrllLines(const CagdCrvStruct *Crvs,
int Axis,
CagdRType Epsilon,
CagdVType Range)
Description:
Computes a set of parallel line segments included inside the given set
of Crvs, that is assumed to define closed region(s), in the XY plane.
Parameters:
Crvs: | A set of curves forming closed region(s) to slice and compute
a set of parallel line segments in the region(s), in XY.
|
---|
Axis: | The axis of line compute the sliced line, X = 1, Y = 2.
|
---|
Epsilon: | Tolerance control.
|
---|
Range: | A vector setting the (min, max, step) of the parallel lines,
as (XMin, XMax, XStep) if Axis = 1, (YMin, YMax, YStep) if
Axis = 2.
|
---|
Returned Value:
CagdCrvStruct *: List of parallel lines in the closed region, enclosed
by Crvs.
|
---|
See Also:
SymbCrvConstSet
Keywords:
slices
contours.
(symbzero.c:623)
Prototype:
CagdCrvStruct *SymbCrvSplitPoleParams(const CagdCrvStruct *CCrv,
CagdRType Eps,
CagdRType OutReach)
Description:
Splits the given rational curve at all its poles. Returned is a list of
curves each of which has weights of the same (positive) sign.
Parameters:
CCrv: | Rational curve to split at all its poles.
|
---|
Eps: | Tolerance of computation.
|
---|
OutReach: | Clip end points of curves that goes to infinity at distance
that is about OutReach from the origin.
|
---|
Returned Value:
CagdCrvStruct *: List of splitted curves.
|
---|
See Also:
CagdPointsHasPoles
SymbCrvsSplitPoleParams
Keywords:
(symb_crv.c:1353)
Prototype:
void SymbCrvSplitScalar(const CagdCrvStruct *Crv,
CagdCrvStruct **CrvW,
CagdCrvStruct **CrvX,
CagdCrvStruct **CrvY,
CagdCrvStruct **CrvZ)
Description:
Given a curve splits it to its scalar component curves. Ignores all
dimensions beyond the third, Z, dimension.
Parameters:
Crv: | Curve to split.
|
---|
CrvW: | The weight component of Crv, if have any.
|
---|
CrvX: | The X component of Crv.
|
---|
CrvY: | The Y component of Crv, if have any.
|
---|
CrvZ: | The Z component of Crv, if have any.
|
---|
Returned Value:
See Also:
SymbSrfSplitScalar
SymbCrvMergeScalar
Keywords:
split
symbolic computation
(symb_crv.c:1304)
Prototype:
void SymbCrvSplitScalarN(const CagdCrvStruct *Crv, CagdCrvStruct **Crvs)
Description:
Given a curve, splits it to its scalar component curves.
Parameters:
Crv: | Curve to split.
|
---|
Crvs: | A vector of scalar curves - components of Crv.
A vector of dynamically allocated scalar crvs.
|
---|
Returned Value:
See Also:
SymbSrfSplitScalar
SymbSrfSplitScalarN
SymbCrvMergeScalarN
Keywords:
split
symbolic computation
(arc_len.c:173)
Prototype:
CagdCrvStruct *SymbCrvSqrtScalar(const CagdCrvStruct *OrigCrv,
CagdRType Epsilon)
Description:
Computes the curve which is a square root approximation to a given scalar
curve, to within epsilon.
Parameters:
OrigCrv: | Scalar curve to approximate its square root function.
|
---|
Epsilon: | Accuracy of approximation.
|
---|
Returned Value:
CagdCrvStruct *: A curve approximating the square root of OrigCrv.
|
---|
Keywords:
square root
(symb_crv.c:116)
Prototype:
CagdCrvStruct *SymbCrvSub(const CagdCrvStruct *Crv1, const CagdCrvStruct *Crv2)
Description:
Given two curves - subtract them coordinate-wise.
The two curves are promoted to same point type before the multiplication
can take place. Furthermore, order and continuity are matched as well.
Parameters:
Crv1, Crv2: | Two curve to subtract coordinate-wise.
|
---|
Returned Value:
CagdCrvStruct *: The difference of Crv1 - Crv2 coordinate-wise.
|
---|
See Also:
SymbCrvAdd
SymbCrvMult
Keywords:
subtraction
symbolic computation
(offset.c:410)
Prototype:
CagdCrvStruct *SymbCrvSubdivOffset(const CagdCrvStruct *CCrv,
CagdRType OffsetDist,
CagdRType Tolerance,
CagdBType BezInterp)
Description:
Given a curve and an offset amount OffsetDist, returns an approximation to
the offset curve by offseting the control polygon in the normal direction.
If resulting offset is not satisfying the required tolerance the curve
is subdivided and the algorithm recurses on both parts.
Parameters:
CCrv: | To approximate its offset curve with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
Tolerance: | Accuracy control.
|
---|
BezInterp: | If TRUE, control points are interpolated when the curve is
reduced to a Bezier form. Otherwise, control points are
translated OffsetDist amount only, under estimating the
Offset.
|
---|
Returned Value:
CagdCrvStruct *: An approximation to the offset curve, to within
Tolerance.
|
---|
See Also:
SymbCrvOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
Keywords:
offset
(offset.c:1384)
Prototype:
CagdCrvStruct *SymbCrvTrimGlblOffsetSelfInter(const CagdCrvStruct *Crv,
const CagdCrvStruct *OffCrv,
CagdRType SubdivTol,
CagdRType TrimAmount,
CagdRType NumerTol)
Description:
Trims regions in the offset curve OffCrv that are closer than TrimAmount
to original Crv. TrimAmount should be a fraction smaller than the offset
amount itself. See all:
Gershon Elber. ``Trimming Local and Global Self-intersections in Offset
Curves using Distance Maps.'' The 10th IMA conference on the Mathematics
of Surfaces, Leeds, UK, pp 213-222, September 2003, LLCS2768.
Parameters:
Crv: | Original curve.
|
---|
OffCrv: | The offset curve approximation.
|
---|
SubdivTol: | Accuracy of computation. 0.001 will be a good start.
|
---|
TrimAmount: | The trimming distance. A fraction smaller than the offset
amount.
|
---|
NumerTol: | If Positive, a numerical marching improvement step is
applied with NumerTol tolerance to the derived
intersection/clipped regions.
Assumes derivative of offset curve exists.
|
---|
Returned Value:
CagdCrvStruct *: A list of curve segments that are valid, after the
trimming process took place.
|
---|
See Also:
MvarCrvTrimGlblOffsetSelfInter
Keywords:
(arc_len.c:595)
Prototype:
CagdCrvStruct *SymbCrvUnitLenCtlPts(const CagdCrvStruct *CCrv)
Description:
Normalizes all the control points of the given (vector field) curve.
This results in an approximated unit speed vector field.
Parameters:
CCrv: | Curve to approximate a unit magnitude for.
|
---|
Returned Value:
CagdCrvStruct *: Similar curve of Crv, but with unit length
control points.
|
---|
See Also:
SymbCrvUnitLenScalar
Keywords:
unit vector field
(arc_len.c:40)
Prototype:
CagdCrvStruct *SymbCrvUnitLenScalar(const CagdCrvStruct *OrigCrv,
CagdBType Mult,
CagdRType Epsilon)
Description:
Normalizes the given vector field curve to be a unit length curve, by
computing a scalar curve to multiply with this vector field curve.
Returns the multiplied curve if Mult, or otherwise just the scalar
curve.
Parameters:
OrigCrv: | Curve to approximate a unit size for.
|
---|
Mult: | Do we want to multiply the computed scalar curve with Crv?
|
---|
Epsilon: | Accuracy required of this approximation.
|
---|
Returned Value:
CagdCrvStruct *: A scalar curve to multiply OrigCrv so a unit size
curve will result if Mult is FALSE, or the actual
unit size vector field curve, if Mult.
|
---|
See Also:
SymbCrvUnitLenCtlPts
Keywords:
unit vector field
(offset.c:245)
Prototype:
CagdCrvStruct *SymbCrvVarOffset(const CagdCrvStruct *CCrv,
const CagdCrvStruct *VarOffsetDist,
CagdBType BezInterp)
Description:
Given a curve and an offset amount function Var OffsetDist, returns an
approximation to the offset curve by offseting the control polygon in the
normal direction.
Parameters:
CCrv: | To approximate its variable offset curve.
|
---|
VarOffsetDist: | Scalar function prescribing the amount of offset.
Must posses a parametric domain similar to Crv.
|
---|
BezInterp: | If TRUE, control points are interpolated when the curve
is reduced to a Bezier form. Otherwise, control points
are translated OffsetDist amount only, under estimating
the Offset.
|
---|
Returned Value:
CagdCrvStruct *: An approximation to the varying offset amount curve.
|
---|
See Also:
SymbCrvSubdivOffset
SymbSrfOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
SymbCrvOffset
Keywords:
offset
(symb_crv.c:669)
Prototype:
CagdCrvStruct *SymbCrvVecCrossProd(const CagdCrvStruct *Crv,
const CagdVType Vec)
Description:
Given a curve and a vector - computes their cross product.
Returned curve is a scalar curve representing the cross product of
the curve and vector.
Parameters:
Crv: | Curve to multiply and compute a cross product for.
|
---|
Vec: | Vector to cross product Crv with.
|
---|
Returned Value:
CagdCrvStruct *: A vector curve representing the cross product of
Crv x Vec.
|
---|
See Also:
SymbCrvDotProd
SymbCrvVecDotProd
SymbCrvScalarScale
SymbCrvMultScalar
SymbCrvInvert
SymbCrvCrossProd
Keywords:
product
cross product
symbolic computation
(symb_crv.c:425)
Prototype:
CagdCrvStruct *SymbCrvVecDotProd(const CagdCrvStruct *Crv,
const CagdRType *Vec)
Description:
Given a curve and a vector of any dimension - computes their dot product.
Returned curve is a scalar curve representing the dot product.
Parameters:
Crv: | Curve to multiply and compute a dot product for.
|
---|
Vec: | Vector to project Crv onto.
|
---|
Returned Value:
CagdCrvStruct *: A scalar curve representing the dot product of
Crv . Vec.
|
---|
See Also:
SymbCrvDotProd
SymbCrvMult
SymbCrvMultScalar
SymbCrvCrossProd
Keywords:
product
dot product
symbolic computation
(symbzero.c:47)
Prototype:
CagdPtStruct *SymbCrvZeroSet(const CagdCrvStruct *Crv,
int Axis,
CagdRType Epsilon,
CagdBType NoSolsOnEndPts)
Description:
Computes the zero set of a given curve, in given axis (0/1-3 for W/X-Z).
Returned is a list of the zero set points holding the parameter values
at Pt[0] of each point.
Parameters:
Crv: | To compute its zero set.
|
---|
Axis: | The axis of Crv to compute zero set for, W = 0, X = 1, etc.
|
---|
Epsilon: | Tolerance control.
|
---|
NoSolsOnEndPts: | f TRUE, solutions at the end of the domain are purged.
|
---|
Returned Value:
CagdPtStruct *: List of parameter values form which Crv is zero in
axis Axis.
|
---|
Keywords:
zero set
symbolic computation
(cmp_crvs.c:231)
Prototype:
SymbCrvRelType SymbCrvsCompare(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Eps,
CagdRType *StartOvrlpPrmCrv1,
CagdRType *EndOvrlpPrmCrv1,
CagdRType *StartOvrlpPrmCrv2,
CagdRType *EndOvrlpPrmCrv2)
Description:
Compares the given two curves. Each curve is converted, if necessary,
into a set of Bezier curves, and the comparison is done by applying
comparison algorithm for each Bezier curve.
Parameters:
Crv1, Crv2: | The two curves to be compared.
|
---|
Eps: | A threshold for numerical computations.
|
---|
StartOvrlpPrmCrv1: | f the curves are the same and overlapping, here the
start of overlapping domain of Crv1 will be returned.
|
---|
EndOvrlpPrmCrv1: | If the curves are the same and overlapping, here the
end of overlapping domain of Crv1 will be returned.
|
---|
StartOvrlpPrmCrv2: | f the curves are the same and overlapping, here the
start of overlapping domain of Crv2 will be returned.
|
---|
EndOvrlpPrmCrv2: | If the curves are the same and overlapping, here the
end of overlapping domain of Crv2 will be returned.
|
---|
Returned Value:
SymbCrvRelType: Either Same curves (1), overlapping curves (2), or
distinct curves (3). If Overlapping, the Start/End
overlapping parametric domain variables are set.
|
---|
Keywords:
(crv_lenv.c:192)
Prototype:
CagdCrvStruct *SymbCrvsLowerEnvelop(const CagdCrvStruct *CCrvs,
CagdRType *Pt,
CagdRType Eps)
Description:
Computes the lower envelop in the plane of all given curves. Returned
is a list of (pieces of) curves that forms the lower envelop.
If Pt is not NULL, radial lower envelop around Pt is computed.
If Pt is NULL, regular, linear, lower envelop is computed seeking minimum
Y values for the X domain that is spanned by the curves.
Note the lower envelop might be discontinuous.
The lower envelop is computed by splitting the input curves at all
intersetion locations, sorting intersection and end point events and
shooting rays in the middle of these intervals to determine lowest one.
Parameters:
CCrvs: | Curves to derive the lower envelop for.
|
---|
Pt: | Point defining the center of the radial envelop, or NULL
for linear, minimum Y, lower envelop.
|
---|
Eps: | Tolerance of computations.
|
---|
Returned Value:
CagdCrvStruct *: A list of curves defining the lower envelop.
|
---|
See Also:
CagdCrvCrvInter
CagdCrvCrvInterArrangment
Keywords:
cci
lower envelop
(symbzero.c:585)
Prototype:
CagdCrvStruct *SymbCrvsSplitPoleParams(const CagdCrvStruct *Crvs,
CagdRType Eps,
CagdRType OutReach)
Description:
Splits the given rational curves at all their poles. Returned is a
list of curves each of which has weights of the same (positive) sign.
Parameters:
Crvs: | Rational curves to split at all its poles.
|
---|
Eps: | Tolerance of computation.
|
---|
OutReach: | Clip end points of curves that goes to infinity at distance
that is about OutReach from the origin.
|
---|
Returned Value:
CagdCrvStruct *: List of splitted curves.
|
---|
See Also:
CagdPointsHasPoles
SymbCrvSplitPoleParams
Keywords:
(bsp3injc.c:107)
Prototype:
CagdBType SymbCubicBspInjective(CagdRType x[4][4], CagdRType y[4][4])
Description:
Examine if the given uniform cubic patch in injective. The patch is
assumed to be a mapping from R2 to R2.
Parameters:
x: | The 4 by 4 array of X coefficients of the cubic patch.
|
---|
y: | The 4 by 4 array of Y coefficients of the cubic patch.
|
---|
Returned Value:
CagdBType: TRUE if injective, FALSE otherwise.
|
---|
Keywords:
(smp_skel.c:1783)
Prototype:
CagdSrfStruct *SymbCylinCylinBisect(const CagdVType Cyl1Pos,
const CagdVType Cyl1Dir,
CagdRType Cyl1Rad,
const CagdVType Cyl2Pos,
const CagdVType Cyl2Dir,
CagdRType Cyl2Rad)
Description:
Compute the bisector surface between two cylinders.
Let C1(u), T1(u), and N1(u) and C2(v), T2(v), and N2(v) be the cylinders
cross section, cross section tangent field and cross section unit
normal field. Ci(u) can be derived as a transformed circle. Ti(u) and
Ni(u) are unit circles rotated to the proper orientation CyliDir.
Finally, note that Ci(u), Ti(u), and Ni(u) are all rational.
Then, the bisector is computed as the solution of the following three
linear equations:
< B - C1(u), T1(u) > = 0
< B - C2(v), T2(v) > = 0
< B, N1(u) - N2(v) > = < C1(u), N1(u) > - < C2(v), N2(v) >
The first two constraints the bisector to be on the normal plane of the
generators of the two cylinders that are fixed along the generator (the
straight lines of the cylinder). The last constraint make sure the
bisector is on the plane that bisects the two tangent planes of the two
cylinders.
This computation is following the bisectors of two developables,
presented in,
"Geometric Properties of Bisector Surfaces", by Martin Peternell,
Graphical Models, Volume 62, No. 3, May 2000.
Parameters:
Cyl1Pos: | A point on the axis of the first cylinder.
|
---|
Cyl1Dir: | The direction of the first cylinder.
|
---|
Cyl1Rad: | Radius of first cylinder.
|
---|
Cyl2Pos: | A point on the axis of the second cylinder.
|
---|
Cyl2Dir: | The direction of the second cylinder.
|
---|
Cyl2Rad: | Radius of second cylinder.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbPlaneLineBisect
SymbCylinPlaneBisect
SymbConePlaneBisect
SymbSpherePlaneBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
Keywords:
bisectors
skeleton
(smp_skel.c:1199)
Prototype:
CagdSrfStruct *SymbCylinPlaneBisect(const CagdPType CylPt,
const CagdVType CylDir,
CagdRType CylRad,
CagdRType Size)
Description:
Compute the bisector surface between a cylinder and the XY plane.
The computation is reduced to that of a bisector between a line and a
plane, that has a rational form. Only the portion for which Z > 0 should
be considered in the output.
Parameters:
CylPt: | Point on axis of cylinder.
|
---|
CylDir: | Direction of cylinder. Must be in the northern hemisphere
(positive Z coefficient).
|
---|
CylRad: | Radius of cylinder.
|
---|
Size: | Portion of result as it is infinite.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbPlaneLineBisect
SymbConePlaneBisect
SymbSpherePlaneBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(smp_skel.c:744)
Prototype:
CagdSrfStruct *SymbCylinPointBisect(const CagdPType CylPt,
const CagdVType CylDir,
CagdRType CylRad,
const CagdPType Pt,
CagdRType Size)
Description:
Compute the bisector surface between a cylinder and a point.
Parameters:
CylPt: | Point on axis of cylinder.
|
---|
CylDir: | Direction of cylinder.
|
---|
CylRad: | Radius of cylinder.
|
---|
Pt: | Direction of line from origin.
|
---|
Size: | Portion of result as it is infinite.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbPlanePointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConePlaneBisect
SymbCylinPlaneBisect
SymbSpherePlaneBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect
Keywords:
bisectors
skeleton
(smp_skel.c:1328)
Prototype:
CagdSrfStruct *SymbCylinSphereBisect(const CagdPType CylPt,
const CagdVType CylDir,
CagdRType CylRad,
const CagdPType SprCntr,
CagdRType SprRad,
CagdRType Size)
Description:
Compute the bisector surface between a cylinder and a sphere.
The computation is reduced to that of a bisector between a point and a
cylinder, that has a rational form.
Parameters:
CylPt: | Point on axis of cylinder.
|
---|
CylDir: | Direction of cylinder. Must be in the northern hemisphere
(positive Z coefficient).
|
---|
CylRad: | Radius of cylinder.
|
---|
SprCntr: | Center location of the sphere. Must be in northern
hemisphere (positive Z coefficient).
|
---|
SprRad: | Radius of sphere.
|
---|
Size: | Portion of result as it is infinite.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbPlaneLineBisect
SymbCylinPlaneBisect
SymbConePlaneBisect
SymbSpherePlaneBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(decompos.c:171)
Prototype:
CagdCrvStruct *SymbDecomposeCrvCrv(CagdCrvStruct *Crv)
Description:
Try to decompose a curve of arbitrary degree if possible.
Among all possibilities, return one pair of two curves F and G which
satisfy F(G(t)) = H(t).
F can have arbitrary number of coordinates:
F(x) = x^m + sum b_j x^j.
G should be a scalar monotone curve having a range [0, 1]:
G(x) = c_k x^k + ..... + c_1 x.
Parameters:
Crv: | curve H(t) to try and decompose.
|
---|
Returned Value:
CagdCrvStruct *: Pairs of curves F and G that are composable to the
input curve, or NULL if nonreducable.
F: [0, 1] -> R^3,
G: [0, 1] -> [0, 1].
|
---|
See Also:
SymbComposeCrvCrv
Keywords:
composition
(symb_err.c:85)
Prototype:
const char *SymbDescribeError(SymbFatalErrorType ErrorNum)
Description:
Returns a string describing a the given error. Errors can be raised by
any member of this symb library as well as other users. Raised error will
cause an invocation of SymbFatalError function which decides how to handle
this error. SymbFatalError 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
(nrmlcone.c:974)
Prototype:
const SymbNormalConeStruct *SymbDirectionsConeAvgToData(
const CagdRType * const *Pts,
int NumPts,
CagdPointType PType,
SymbNormalConeStruct *NormalCone)
Description:
Computes a directions cone for a given vector field, represented as an
array of points (or a control mesh). The angular span of this directions
field is computed by averaging the normalized vectors, and finding the
maximum deviation of the average direction.
Parameters:
Pts: | An array of vectors (represented as a control mesh).
Supports E2/E3/P2/P3 point types.
|
---|
NumPts: | The number of vectors in the array.
|
---|
PType: | The point type of the vectors in Pts.
|
---|
NormalCone: | The computed directions cone, or NULL if failed.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed directions cone,
or NULL if failed. Same as NormalCone.
|
---|
See Also:
SymbNormalConeForSrfOpt
SymbNormalConeOverlap
SymbTangentConeForCrv
SymbNormalConeForSrfDoOptimal
SymbNormalConeForSrf
Keywords:
normals
normal bound
(nrmlcone.c:1064)
Prototype:
const SymbNormalConeStruct *SymbDirectionsConeOptToData(
const CagdRType * const *Pts,
int NumPts,
CagdPointType PType,
SymbNormalConeStruct *NormalCone)
Description:
Computes a directions cone for a given vector field, represented as an
array of points (or a control mesh). The angular span of this directions
field is computed by using linear programming.
Parameters:
Pts: | An array of vectors (represented as a control mesh).
Supports E2/E3/P2/P3 point types.
|
---|
NumPts: | The number of vectors in the array.
|
---|
PType: | The point type of the vectors in Pts.
|
---|
NormalCone: | The computed directions cone, or NULL if failed.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed directions cone,
or NULL if failed. Same as NormalCone.
|
---|
See Also:
SymbNormalConeForSrfOpt
SymbNormalConeOverlap
SymbTangentConeForCrv
SymbNormalConeForSrfDoOptimal
SymbNormalConeForSrf
Keywords:
normals
normal bound
(nrmlcone.c:1122)
Prototype:
const SymbNormalConeStruct *SymbDirectionsConeToData(
const CagdRType * const *Pts,
int NumPts,
CagdPointType PType,
SymbNormalConeStruct *NormalCone)
Description:
Computes a directions cone for a given vector field, represented as an
array of points (or a control mesh). The angular span of this directions
field is computed either by the "averaging" algorithm or by the "optimal"
linear programming algorithm, depending on the global flag .
Parameters:
Pts: | An array of vectors (represented as a control mesh).
Supports E2/E3/P2/P3 point types.
|
---|
NumPts: | The number of vectors in the array.
|
---|
PType: | The point type of the vectors in Pts.
|
---|
NormalCone: | The computed directions cone, or NULL if failed.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed directions cone,
or NULL if failed. Same as NormalCone.
|
---|
See Also:
SymbNormalConeForSrfOpt
SymbNormalConeOverlap
SymbTangentConeForCrv
SymbNormalConeForSrfDoOptimal
SymbNormalConeForSrf
Keywords:
normals
normal bound
(distance.c:1156)
Prototype:
CagdRType SymbDistBuildMapToCrv(const CagdCrvStruct *Crv,
CagdRType Tolerance,
CagdRType *XDomain,
CagdRType *YDomain,
CagdRType **DiscMap,
CagdRType DiscMapXSize,
CagdRType DiscMapYSize)
Description:
Compute a discrete distance map to a freeform curve by sampling the
distance on a regular grid.
Parameters:
Crv: | The curve to approximate a discrete distance map for.
|
---|
Tolerance: | Tolerance of distance computation.
|
---|
XDomain: | X domain to sample R2 for distances.
|
---|
YDomain: | Y domain to sample R2 for distances.
|
---|
DiscMap: | Where output is saved as a real distance value.
|
---|
DiscMapXSize: | orizontal resolution, 0 will be mapped to XDomain[0],
(DiscMapXSize-1) to XDomain[0].
|
---|
DiscMapYSize: | ertical resolution, 0 will be mapped to YDomain[0],
(DiscMapYSize-1) to YDomain[0].
|
---|
Returned Value:
CagdRType: Maximal distance of points in prescribed domain to crv Crv.
|
---|
See Also:
SymbDistCrvPoint
Keywords:
(distance.c:335)
Prototype:
CagdRType SymbDistCrvLine(const CagdCrvStruct *Crv,
const CagdLType Line,
CagdBType MinDist,
CagdRType Epsilon)
Description:
Given a curve and a line, finds the nearest point (if MinDist) or the
farthest location (if MinDist FALSE) from the curve to the given line.
Returned is the parameter value of the curve. Both internal as well as
boundary extrema are considered.
Let Crv be (x(t), y(t)). By substituting x(t) and y(t) into the line
equation, we derive the distance function.
Its zero set, combined with the zero set of its derivative provide the
needed extreme distances.
Parameters:
Crv: | The curve to find its nearest (farthest) point to Line.
|
---|
Line: | The line to find the nearest (farthest) point on Crv to it.
|
---|
MinDist: | If TRUE nearest points is needed, if FALSE farthest.
|
---|
Epsilon: | Accuracy of computation.
|
---|
Returned Value:
CagdRType: Parameter value in the parameter space of Crv of the
nearest (farthest) point to line Line.
|
---|
See Also:
SymbLclDistCrvLine
MvarDistSrfLine
SymbCrvRayInter
Keywords:
curve line distance
(distance.c:75)
Prototype:
CagdRType SymbDistCrvPoint(const CagdCrvStruct *Crv,
void *CrvPtPrepHandle,
const CagdRType *Pt,
CagdBType MinDist,
CagdRType Epsilon,
CagdPointType DistSpace)
Description:
Given a curve and a point, finds the nearest point (if MinDist) or the
farthest location (if MinDist FALSE) from the curve to the given point.
Returned is the parameter value of the curve. Both internal as well as
boundary extrema are considered.
Computes the zero set of (Crv(t) - Pt) . Crv'(t), and also look at the
curves' end points, and all C^1 discontinuities.
Parameters:
Crv: | The curve to find its nearest (farthest) point to Pt.
|
---|
CrvPtPrepHandle: | If not NULL, holds pre-processed data to speed up the
curve - points distance computations, for multiple
curve - point tests (same curve for all points).
See SymbDistCrvPointPrep and SymbDistCrvPointFree.
|
---|
Pt: | The point to find the nearest (farthest) point on Crv to it.
|
---|
MinDist: | If TRUE nearest points is needed, if FALSE farthest.
|
---|
Epsilon: | Accuracy of computation.
|
---|
DistSpace: | if not CAGD_PT_NONE, use this space to compute distances.
Can be used, for example, to compute XY distances in a 3D
curve. Otherwise, the point space of Crv is used.
|
---|
Returned Value:
CagdRType: Parameter value in the parameter space of Crv of the
nearest (farthest) point to point Pt.
|
---|
See Also:
SymbLclDistCrvPoint
MvarDistSrfPoint
SymbDistCrvPointPrep
SymbDistCrvPointFree
Keywords:
curve point distance
(distance.c:223)
Prototype:
void SymbDistCrvPointFree(void *CrvPtPrepHandle)
Description:
Free the pre-processed data structure, given using Handle.
Parameters:
CrvPtPrepHandle: | Handle on the preprocessed curve for multiple
point - curve test, to free.
|
---|
Returned Value:
See Also:
SymbLclDistCrvPoint
SymbDistCrvPointPrep
Keywords:
curve point distance
(distance.c:180)
Prototype:
void *SymbDistCrvPointPrep(const CagdCrvStruct *CCrv)
Description:
Given a curve, pre-process it so many curve-distance test can be
efficiently made.
Parameters:
CCrv: | 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:
SymbDistCrvPointFree
SymbLclDistCrvPoint
Keywords:
curve point distance
(ffptdist.c:359)
Prototype:
IrtRType *SymbDistPoint1DWithEnergy(int N,
IrtRType XMin,
IrtRType XMax,
CagdCrvStruct *CrvtrCrv,
CagdCrvStruct *Deriv1MagSqrCrv,
int Resolution,
SymbDistEnergy1DFuncType EnergyFunc)
Description:
Distributes N points with a given energy in the region in the X line that
is bounded by XMin, XMax.
Energy is specified via the EnergyFunc that recieves the X location.
Resolution * N specifies how many samples to take from EnergyFunc.
Returns an array of N distributed points.
The solution to the distribution is analythic provided EnergyFunc can be
integrated. Herein, this integral is computed nomerically.
Parameters:
N: | Number of points to distribute,
|
---|
XMin: | Minimum of domain to distribute points.
|
---|
XMax: | Minimum of domain to distribute points.
|
---|
CrvtrCrv: | The curvature field.
|
---|
Deriv1MagSqrCrv: | ill Contain the curvature square and arclength square.
|
---|
Resolution: | Fineness of integral calculation.
|
---|
EnergyFunc: | Energy function to use.
|
---|
Returned Value:
IrtRType *: A vector of N points distributed as requested.
|
---|
Keywords:
point distribution
(moffset.c:339)
Prototype:
CagdSrfStruct *SymbEnvOffsetFromCrv(const CagdCrvStruct *Crv,
CagdRType Height,
CagdRType Tolerance)
Description:
Computes an elevated surface emenating from the given C^1 continuous
curve in all directions like a fire front. The surface gets away from Crv
in a slope of 45 degrees. This elevated surface is an approximation of
the real envelope only, as prescribed by Tolerance.
If the given curve is closed, it is assume to be C^1 at the end point as
well. For a close curve, two surfaces are actually returned - one for the
inside and one for the outside firefront.
This function employs SymbCrvSubdivOffset for the offset computations.
Parameters:
Crv: | The curve to process.
|
---|
Height: | The height of the elevated surface (also the width of the
offset operation.
|
---|
Tolerance: | Accuracy of the elevated surface approximation.
|
---|
Returned Value:
CagdSrfStruct *: A freeform surface approximating the elevated surface
for open curve Crv, or two surfaces for the case of closed
curve Crv.
|
---|
Keywords:
(evalcurv.c:33)
Prototype:
void SymbEvalCrvCurvPrep(const CagdCrvStruct *Crv, CagdBType Init)
Description:
Preprocess a given curve so we can evaluate curvature properties from
it efficiently, at every point. See SymbEvalCurvature for actual
curvature at curve point evaluations.
Parameters:
Crv: | Curve to preprocess. Its attributes might be affected though.
|
---|
Init: | TRUE for initializing, FALSE for clearing out.
|
---|
Returned Value:
See Also:
SymbEvalCurvature
SymbEvalCrvCurvTN
Keywords:
curvature
(evalcurv.c:143)
Prototype:
void SymbEvalCrvCurvTN(CagdVType Nrml,
CagdVType Tan,
CagdVType BiNrml,
int Normalize)
Description:
As bi-product, return the last tangent and normal of the curve evaluated
last by SymbEvalCrvCurvature.
Parameters:
Nrml: | The normal to return.
|
---|
Tan: | The tangent to return.
|
---|
BiNrml: | The bi-normal.
|
---|
Normalize: | TRUE to normalize the vectors.
|
---|
Returned Value:
See Also:
SymbEvalCrvCurvPrep
SymbEvalCrvCurvature
Keywords:
curvature
(evalcurv.c:94)
Prototype:
CagdBType SymbEvalCrvCurvature(const CagdCrvStruct *Crv, CagdRType t,
CagdRType *k,
CagdVType Tan,
CagdVType BiNrml)
Description:
Evaluate a given curve's curvature. Returns the curvature for the
given curve location.
This function must be invoked after SymbEvalCrvCurvPrep was called to
initialize the proper data structures, for fast curvature evaluations at
many points. SymbEvalCrvCurvPrep should be called at the end to release
these data structures.
As a bi-product, function SymbEvalCrvCurvTN could be invoked
immediately after this function to fetch the tangent and the normal of
the curve at the given location.
Parameters:
Crv: | Curve to evaluate its curvature properties.
|
---|
t: | Location of evaluation.
|
---|
k: | The returned curvature at Crv(t).
|
---|
Tan: | The tangent to return.
|
---|
BiNrml: | The bi-normal to return.
|
---|
Returned Value:
CagdBType: TRUE if succesful, FALSE otherwise.
|
---|
See Also:
SymbEvalCrvCurvPrep
SymbEvalCrvCurvTN
Keywords:
curvature
(evalcurv.c:388)
Prototype:
int SymbEvalSrfAsympDir(const CagdSrfStruct *Srf,
CagdRType U,
CagdRType V,
CagdBType DirInUV,
CagdVType AsympDir1,
CagdVType AsympDir2)
Description:
Computes the asymptotic directions of the surface in the given U, V
location, if exists. If DirInUV, the returned asymptotic direction is
in UV space, otherwise, in Euclidean surface tangent plane space.
This function must be invoked after SymbEvalSrfCurvPrep was called to
initialize the proper data structures, for fast curvature evaluations at
many points. SymbEvalSrfCurvPrep should be called at the end to release
these data structures.
The asymptotic direction(s) is the direction for which the normal
curvature vanish and hence can exist for hyperbolic regions. We solve:
[t (1-t)] [ L M ] [t ]
[ ] [ ]
[ M N ] [1-t]
and look for solution of t between zero and one as:
t = (N-M +/- sqrt(M^2-LN)) / (L-2M+N).
Parameters:
Srf: | To compute asymptotic directions for.
|
---|
U, V: | Location of evaluation.
|
---|
DirInUV: | If TRUE asymptotic direction is given in UV, otherwise in
Euclidean 3-space.
|
---|
AsympDir1, AsympDir2: | eturned values.
|
---|
Returned Value:
int: Number of asymptotic directions found, zero for none.
|
---|
See Also:
SymbEvalSrfCurvature
SymbEvalSrfCurvPrep
Keywords:
curvature
(evalcurv.c:172)
Prototype:
void SymbEvalSrfCurvPrep(const CagdSrfStruct *Srf, CagdBType Init)
Description:
Preprocess a given surface so we can evaluate curvature properties from
it efficiently, at every point. See SymbEvalCurvature for actual
curvature at surface point evaluations.
Parameters:
Srf: | Surface to preprocess. Its attributes might be affected though.
|
---|
Init: | TRUE for initializing, FALSE for clearing out.
|
---|
Returned Value:
See Also:
SymbEvalCurvature
Keywords:
curvature
(evalcurv.c:239)
Prototype:
CagdBType SymbEvalSrfCurvature(const CagdSrfStruct *Srf,
CagdRType U,
CagdRType V,
CagdBType DirInUV,
CagdRType *K1,
CagdRType *K2,
CagdVType D1,
CagdVType D2)
Description:
Evaluate a given surface's curvature properties. Returns the principal
curvatures and directions for the given surface location.
This function must be invoked after SymbEvalSrfCurvPrep was called to
initialize the proper data structures, for fast curvature evaluations at
many points. SymbEvalSrfCurvPrep should be called at the end to release
these data structures.
Parameters:
Srf: | Surface to evaluate its curvature properties.
|
---|
U, V: | Location of evaluation.
|
---|
DirInUV: | If TRUE principal directions are given in UV, otherwise in
Euclidean 3-space.
|
---|
K1, K2: | Principal curvatures.
|
---|
D1, D2: | Principal directions.
|
---|
Returned Value:
CagdBType: TRUE if successful, FALSE otherwise.
|
---|
See Also:
SymbEvalSrfCurvPrep
Keywords:
curvature
(symb_crv.c:1656)
Prototype:
CagdRType *SymbExtremumCntPtValsMalloc(CagdRType * const *Points,
int Length,
CagdBType FindMinimum)
Description:
Given a control polygon/mesh, computes the extremum values of them all.
Parameters:
Points: | To scan for extremum values.
|
---|
Length: | Length of each vector in Points.
|
---|
FindMinimum: | TRUE for minimum, FALSE for maximum.
|
---|
Returned Value:
CagdRType *: A vector holding PType point with the extremum values of
each axis independently.
|
---|
Keywords:
extremum values
symbolic computation
(symb_crv.c:1609)
Prototype:
CagdRType *SymbExtremumCntPtValsToData(CagdRType * const *Points,
int Length,
CagdBType FindMinimum,
CagdRType *Extremum)
Description:
Given a control polygon/mesh, computes the extremum values of them all.
Parameters:
Points: | To scan for extremum values.
|
---|
Length: | Length of each vector in Points.
|
---|
FindMinimum: | TRUE for minimum, FALSE for maximum.
|
---|
Extremum: | A vector holding PType point with the extremum values of
each axis independently.
|
---|
Returned Value:
CagdRType *: A vector holding PType point with the extremum values of
each axis independently.
|
---|
Keywords:
extremum values
symbolic computation
(symb_ftl.c:56)
Prototype:
void SymbFatalError(SymbFatalErrorType ErrID)
Description:
Trap Symb_lib errors right here. Provides a default error handler for the
symb library. Gets an error description using SymbDescribeError, prints it
and exit the program using exit.
Parameters:
ErrID: | Error type that was raised.
|
---|
Returned Value:
Keywords:
error handling
(symb_cci.c:343)
Prototype:
int SymbGet2CrvsInterDAreaDCtlPts(CagdCrvStruct *Crv1,
CagdCrvStruct *Crv2,
CagdRType Eps,
CagdRType **InterDomains,
CagdRType **dAreadPts)
Description:
Calculates the intersection domains of two curves, and the change rate
of the total intersection area relative to control points change.
The curves must be planar and have the same orientation.
The intersections must be complete - that is, there are even number of
intersections.
Parameters:
Crv1: | First planar curve.
|
---|
Crv2: | Second planar curve.
|
---|
Eps: | Tolerance of computation.
|
---|
InterDomains: | alculated domain as a list of the in the following
4-tuple structure,
(u1_enter, u1_leave, u2_enter, u2_leave)
sorted by u1 values.
|
---|
dAreadPts: | Will be updated to contain the change rate of the
intersection areas relative to changes in each control
points of both curves. The order in this array is as
follows,
( Crv1_ctpnt1_x, Crv1_ctpnt1_y,
Crv1_ctpnt2_x, Crv1_ctpnt2_y, ...
Crv2_ctpnt1_x, Crv2_ctpnt1_y, ...
Crv2_ctpnt2_x, Crv2_ctpnt2_y, ... ).
|
---|
Returned Value:
int: Number of intersection domains of the two curves
(the length of InterDomains is 4-times this return value).
|
---|
See Also:
SymbGet2CrvsIntersectionAreas
Keywords:
(symb_cci.c:246)
Prototype:
CagdRType SymbGet2CrvsIntersectionAreas(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Eps)
Description:
Calculates the total area of the intersection domains of two planar
curves. The curves must have the same orientation.
Parameters:
Crv1: | First planar curve.
|
---|
Crv2: | Second planar curve.
|
---|
Eps: | Tolerance of computation.
|
---|
Returned Value:
CagdRType: Total area of intersection domains of the two curves.
|
---|
See Also:
SymbCrvEnclosedAreaEval
SymbGet2CrvsInterDAreaDCtlPts
Keywords:
(symb_cci.c:169)
Prototype:
CagdCrvStruct *SymbGet2CrvsIntersectionRegions(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Eps)
Description:
Computes the intersection region(s) of given two curves if any.
curves. The curves must have the same orientation.
Parameters:
Crv1, Crv2: | The two curves to intersect and compute intersecting
region(s).
|
---|
Eps: | Tolerance of computation.
|
---|
Returned Value:
CagdCrvStruct *: List of closed intersecting region(s) or NULL if none.
|
---|
See Also:
CagdCrvCrvInter
Keywords:
(symb_cci.c:417)
Prototype:
CagdRType *SymbGetCrvSubRegionAlphaMatrix(const CagdCrvStruct *Crv,
CagdRType t1,
CagdRType t2,
int *Dim)
Description:
Computes the Alpha matrix that relates the control points of the curve
region (t1, t2) to the control points of the input curve Crv of a larger
domain.
Compute the Alpha matrix by adding Order-1 knots at t1 and t2.
Parameters:
Crv: | Curve to compute its region extraction Alpha matrix.
Assumed a non periodic curve.
|
---|
t1, t2: | Of extracted domain.
|
---|
Dim: | The two dimensions of the returned matrix will be placed here.
|
---|
Returned Value:
CagdRType *: Linearized 2D matrix, row by row, of size (CrvLen, RgnLen),
where CrvLen is the number of control points in curve Crv,
and RgnLen is the size of the extracted curve region.
Allocated dynamically.
|
---|
See Also:
BspKnotEvalAlphaCoef
Keywords:
(distance.c:1365)
Prototype:
CagdRType SymbHausDistBySamplesCrvCrv(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
int Samples,
int HDistSide)
Description:
Given two curves, compute an Hausdorff distance bound by sampling two
dense sets of sampled points and estimating the Hausdorff distance between
the two curves by the sampled points.
Parameters:
Crv1, Crv2: | The two curves, Crv1(u) and Crv2(v), to estimate their
Hausdorff distance.
|
---|
Samples: | Number of samples to take, uniformly in parametric space.
|
---|
HDistSide: | 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a
symmetric HD.
|
---|
Returned Value:
CagdRType: An upper bound on the Hausdorff distance.
|
---|
See Also:
SymbHausDistOfSamplefPts
Keywords:
curve curve distance
(distance.c:1405)
Prototype:
CagdRType SymbHausDistBySamplesCrvSrf(const CagdCrvStruct *Crv1,
const CagdSrfStruct *Srf2,
int Samples,
int HDistSide)
Description:
Given a curve and a surface, compute an Hausdorff distance bound by
sampling two dense sets of sampled points and estimating the Hausdorff
distance between the two shapes by the sampled points.
Parameters:
Crv1, Srf2: | The two curves and surfaces, Crv(t) and Srf2(u, v), to
estimate their Hausdorff distance.
|
---|
Samples: | Number of samples to take, uniformly in parametric space,
as (Samples x Samples) samples.
|
---|
HDistSide: | 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a
symmetric HD.
|
---|
Returned Value:
CagdRType: An upper bound on the Hausdorff distance.
|
---|
See Also:
SymbHausDistOfSamplefPts
SymbHausDistBySamplesSrfSrf
Keywords:
curve surface distance
(distance.c:1446)
Prototype:
CagdRType SymbHausDistBySamplesSrfSrf(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
int Samples,
int HDistSide)
Description:
Given two surfaces, compute an Hausdorff distance bound by sampling two
dense sets of sampled points and estimating the Hausdorff distance between
the two surfaces by the sampled points.
Parameters:
Srf1, Srf2: | The two surfaces, Srf1(u) and Srf2(v), to estimate their
Hausdorff distance.
|
---|
Samples: | Number of samples to take, uniformly in parametric space,
as (Samples x Samples) samples.
|
---|
HDistSide: | 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a
symmetric HD.
|
---|
Returned Value:
CagdRType: An upper bound on the Hausdorff distance.
|
---|
See Also:
SymbHausDistOfSamplefPts
Keywords:
surface surface distance
(distance.c:1293)
Prototype:
CagdRType SymbHausDistOfSamplefPts(CagdPType * const V1,
CagdPType * const V2,
int V1Size,
int V2Size,
int HDistSide)
Description:
Compute the Hausdorff Distance (HD) between two vectors of points.
Parameters:
V1, V2: | The two vectors to consider.
|
---|
V1Size, V2Size: | Lengths of vectors V1 and V2.
|
---|
HDistSide: | 1 for HD from V1 to V2, 2 for HD from V2 to V1, 3 for a
symmetric HD.
|
---|
Returned Value:
See Also:
Keywords:
(rflct_ln.c:423)
Prototype:
void SymbHighlightLnFree(CagdSrfStruct *Srf)
Description:
Free the internal data sets, if any of the given surface, toward the
computation of the highlight lines. as created by SymbHighlightLnPrepSrf.
Parameters:
Srf: | Surface to free its internal data sets saved as attributes.
|
---|
Returned Value:
See Also:
SymbHighlightLnPrepSrf
SymbHighlightLnGen
Keywords:
(rflct_ln.c:380)
Prototype:
CagdSrfStruct *SymbHighlightLnGen(CagdSrfStruct *Srf,
const CagdPType LnPt,
const CagdVType LnDir)
Description:
Compute the highlight line through LnPt on the given surface. The
surface is assumed to have been preprocessed in SymbHighlightLnPrepSrf for
the requested preprocessed named attribute, or otherwise
SymbHighlightLnPrepSrf will be invoked on the fly.
Parameters:
Srf: | Surface to preprocess.
|
---|
LnPt: | Point on a highlight line.
|
---|
LnDir: | Direction of highlight line.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface whose zero set is the highlight line
sought on Srf.
|
---|
See Also:
SymbHighlightLnPrepSrf
SymbHighlightLnFree
Keywords:
(rflct_ln.c:342)
Prototype:
void SymbHighlightLnPrepSrf(CagdSrfStruct *Srf, const CagdVType LnDir)
Description:
Precompute the necessary data set for as efficient as possible
highlight lines' extractions. Data set is kept as an attribute on the
surface. Note that only the direction of the highlight line is employed
at this time, and exact location will be required by SymbHighlightLnGen
only.
Parameters:
Srf: | Surface to preprocess.
|
---|
LnDir: | Direction of highlight line.
|
---|
Returned Value:
See Also:
SymbHighlightLnGen
SymbHighlightLnFree
Keywords:
(symbpoly.c:338)
Prototype:
CagdPtStruct *SymbHugeCrv2Polyline(const CagdCrvStruct *Crv,
int Samples,
CagdBType AddFirstPt,
CagdBType AddLastPt,
CagdBType AddParamVals)
Description:
If the given curve is huge, simply select Samples points out if its
control polygon.
Parameters:
Crv: | To select Samples points out of its control polygon.
|
---|
Samples: | Number of samples to grab.
|
---|
AddFirstPt: | If TRUE, first point on curve is also added.
|
---|
AddLastPt: | If TRUE, last point on curve is also added.
|
---|
AddParamVals: | TRUE to add parameter values, as attributes.
|
---|
Returned Value:
CagdPtStruct *: Taken samples.
|
---|
See Also:
Keywords:
(symbzero.c:715)
Prototype:
CagdPtStruct *SymbInsertNewParam2(CagdPtStruct *PtList, CagdRType t)
Description:
Insert a single t value into given PtList, in place, provided no equal t
value exists already in the list. List is ordered incrementally.
Parameters:
PtList: | List to insert a new value t into.
|
---|
t: | New value to insert to PtList list.
|
---|
Returned Value:
CagdPtStruct *: Updated list, in place.
|
---|
See Also:
Keywords:
(rvrs_eng.c:143)
Prototype:
CagdBType SymbIsCircularCrv(const CagdCrvStruct *Crv,
CagdPType Center,
CagdRType *Radius,
CagdRType Eps)
Description:
Attempts to recongnize if the given curve Crv is indeed circular.
If the curve is found to be circular, its center and radius are
returned. Crv is tested for circularity in the XY plane.
A curve is circular if its evolute curve is constant.
Parameters:
Crv: | Curve to attempt and recognize as circular.
|
---|
Center: | If circular, the center of the circle, zero vector otherwise.
|
---|
Radius: | If circular, the radius of the circle, zero otherwise.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if circular curve, FALSE otherwise.
|
---|
See Also:
SymbIsSphericalSrf
Keywords:
(rvrs_eng.c:45)
Prototype:
CagdBType SymbIsConstCrv(const CagdCrvStruct *CCrv,
CagdCtlPtStruct *ConstVal,
CagdRType Eps)
Description:
Attempts to recognize if the given curve Crv is a constant curve.
If TRUE, ConstVal is reference to a static location holding the constant
value.
Parameters:
CCrv: | Curve to attempt and recognize as a constant curve.
|
---|
ConstVal: | Resulting constant value if indeed a constant curve. This
value is always Euclidean, even for projective curves.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a constant curve, FALSE otherwise.
|
---|
See Also:
SymbIsConstSrf
Keywords:
(rvrs_eng.c:273)
Prototype:
CagdBType SymbIsConstSrf(const CagdSrfStruct *CSrf,
CagdCtlPtStruct *ConstVal,
CagdRType Eps)
Description:
Attempts to recognize if the given surface Srf is a constant surface.
Parameters:
CSrf: | Surface to attempt and recognize as a constant surface.
|
---|
ConstVal: | Resulting constant value if indeed a constant surface. This
value is always Euclidean, even for projective surfaces.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a constant surface, FALSE otherwise.
|
---|
See Also:
SymbIsConstCrv
Keywords:
(rvrs_eng.c:435)
Prototype:
CagdBType SymbIsDevelopSrf(const CagdSrfStruct *Srf, CagdRType Eps)
Description:
Attempts to recongnize if the given surface Srf is indeed a ruled
surface. If the surface is found to be a ruled surface, it is decomposed
into its two rail curves (two boundary curves essentially).
A surface is a ruled surface if one of its partial derivatives is in the
same direction for that parameter.
Parameters:
Srf: | Surface to attempt and recognize as a ruled surface.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a ruled surface, FALSE otherwise.
|
---|
See Also:
SymbIsPlanarSrf
SymbIsRuledSrf
SymbIsSrfOfRevSrf
SymbIsSphericalSrf
SymbIsExtrusionSrf
Keywords:
(rvrs_eng.c:376)
Prototype:
int SymbIsExtrusionSrf(const CagdSrfStruct *Srf,
CagdCrvStruct **Crv,
CagdVType ExtDir,
CagdRType Eps)
Description:
Attempts to recognize if the given surface Srf is indeed an extrusion
surface. If the surface is found to be an extrusion, it is decomposed
into a cross section curve Crv, and an extrusion direction ExtDir.
A surface is an extrusion surface if one of its partial derivatives is
constant.
Parameters:
Srf: | Surface to attempt and recognize as an extrusion surface.
|
---|
Crv: | If an extrusion surface, the cross section curve,
NULL otherwise.
|
---|
ExtDir: | The extrusion direction, if an extrusion surface,
zero vector otherwise.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
int: 1 if an extrusion surface along U, 2 if an extrusion surface
along V, 0 otherwise.
|
---|
See Also:
SymbIsPlanarSrf
SymbIsRuledSrf
SymbIsDevelopSrf
SymbIsSrfOfRevSrf
SymbIsSphericalSrf
Keywords:
(rvrs_eng.c:221)
Prototype:
CagdBType SymbIsLineCrv(const CagdCrvStruct *Crv,
CagdPType LnPos,
CagdVType LnDir,
CagdRType Eps)
Description:
Attempts to recongnize if the given curve Crv is indeed circular.
If the curve is found to be circular, its center and radius are
returned. Crv is tested for circularity in the XY plane.
A curve is circular if its evolute curve is constant.
Parameters:
Crv: | Curve to attempt and recognize as circular.
|
---|
LnPos: | A point on the line, if the curve is indeed a line.
|
---|
LnDir: | A unit direction along the line, if the curve is a line.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a line, FALSE otherwise.
|
---|
See Also:
SymbIsPlanarSrf
SymbIsSphericalSrf
SymbIsCircularCrv
Keywords:
(offset.c:1805)
Prototype:
CagdBType SymbIsOffsetLclSelfInters(CagdCrvStruct *Crv,
CagdCrvStruct *OffCrv,
CagdPtStruct **SIDmns)
Description:
Reports if the given offset curve OffCrv to given curve Crv contains
local self intersections.
Solution is the zeros of .
Parameters:
Crv: | Original curve.
|
---|
OffCrv: | Offset (approximation) curve. Assumed to share the same
parametrization with Crv. I.e. Crv(t0) is offset to OffCrv(t0).
|
---|
SIDmns: | If not NULL set to domains that are in the self intersections.
Each consecutive set of two points in this list defines one
such domain.
|
---|
Returned Value:
CagdBType: TRUE if has local self intersection, FALSE otherwise.
|
---|
Keywords:
(rvrs_eng.c:738)
Prototype:
CagdBType SymbIsPlanarSrf(const CagdSrfStruct *Srf,
IrtPlnType Plane,
CagdRType Eps)
Description:
Attempts to recongnize if the given curve Crv is indeed circular.
If the curve is found to be circular, its center and radius are
returned. Crv is tested for circularity in the XY plane.
A surface is plane if its gaussian and mean curvatures are zero.
Parameters:
Srf: | Surface to attempt and recognize as circular.
|
---|
Plane: | The plane equation, if the surface is indeed planar.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a line, FALSE otherwise.
|
---|
See Also:
SymbIsRuledSrf
SymbIsDevelopSrf
SymbIsSrfOfRevSrf
SymbIsSphericalSrf
SymbIsExtrusionSrf
SymbIsLineCrv
Keywords:
(rvrs_eng.c:483)
Prototype:
int SymbIsRuledSrf(const CagdSrfStruct *Srf,
CagdCrvStruct **Crv1,
CagdCrvStruct **Crv2,
CagdRType Eps)
Description:
Attempts to recongnize if the given surface Srf is indeed a ruled
surface. If the surface is found to be a ruled surface, it is decomposed
into its two rail curves (two boundary curves essentially).
A surface is a ruled surface if one of its partial derivatives is in the
same direction for that parameter.
Parameters:
Srf: | Surface to attempt and recognize as a ruled surface.
|
---|
Crv1: | If a ruled surface, the first curve, NULL otherwise.
|
---|
Crv2: | If a ruled surface, the second curve, NULL otherwise.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
int: 1 if an extrusion surface along U, 2 if an extrusion surface
long V, 0 otherwise.
|
---|
See Also:
SymbIsPlanarSrf
SymbIsDevelopSrf
SymbIsSrfOfRevSrf
SymbIsSphericalSrf
SymbIsExtrusionSrf
Keywords:
(rvrs_eng.c:658)
Prototype:
CagdBType SymbIsSphericalSrf(const CagdSrfStruct *Srf,
CagdPType Center,
CagdRType *Radius,
CagdRType Eps)
Description:
Attempts to recongnize if the given surface Srf is indeed a sphere.
If the surface is found to be a sphere, its center and radius are
returned.
A surface is a sphere if its Gaussian and Mean sqaure surfaces are
constant and equal. The center of the sphere is derived from the mean
evolute surface.
Parameters:
Srf: | Surface to attempt and recognize as a sphere.
|
---|
Center: | If a sphere, the center of the sphere, zero vector otherwise.
|
---|
Radius: | If a sphere, the radius of the sphere, zero otherwise.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a sphere surface, FALSE otherwise.
|
---|
See Also:
SymbIsPlanarSrf
SymbIsRuledSrf
SymbIsDevelopSrf
SymbIsSrfOfRevSrf
SymbIsExtrusionSrf
SymbIsCircularCrv
Keywords:
(rvrs_eng.c:566)
Prototype:
CagdBType SymbIsSrfOfRevSrf(const CagdSrfStruct *Srf,
CagdCrvStruct **CrossSec,
CagdPType AxisPos,
CagdVType AxisDir,
CagdRType Eps)
Description:
Attempts to recongnize if the given surface Srf is indeed a surface
of revolution. If the surface is found to be a surface of revolution, it
is decomposed into its generator (cross section) curve, and the axis of
revolution.
A surface is a surface of revolution if the focal surface of one of the
pseudo iso focal surfaces degenerates into a line.
Parameters:
Srf: | Surface to attempt and recognize as a ruled surface.
|
---|
CrossSec: | If a surface of revolution, the cross section curve, NULL
otherwise.
|
---|
AxisPos: | If a surface of revolution, a point on axis of revolution,
NULL otherwise.
|
---|
AxisDir: | If a surface of revolution, the direction of the axis of
revolution, NULL otherwise.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a surface of revolution, FALSE otherwise.
|
---|
See Also:
SymbIsPlanarSrf
SymbIsRuledSrf
SymbIsDevelopSrf
SymbIsSphericalSrf
SymbIsExtrusionSrf
Keywords:
(rvrs_eng.c:101)
Prototype:
CagdBType SymbIsZeroCrv(const CagdCrvStruct *Crv, CagdRType Eps)
Description:
Attempts to recognize if the given curve Crv is an identically zero
curve.
Parameters:
Crv: | Curve to attempt and recognize as a zero curve.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a zero curve, FALSE otherwise.
|
---|
See Also:
SymbIsConstCrv
SymbIsZeroSrf
Keywords:
(rvrs_eng.c:329)
Prototype:
CagdBType SymbIsZeroSrf(const CagdSrfStruct *Srf, CagdRType Eps)
Description:
Attempts to recognize if the given surface Srf is an identically zero
surface.
Parameters:
Srf: | Surface to attempt and recognize as a zero surface.
|
---|
Eps: | Tolarence of "same" value.
|
---|
Returned Value:
CagdBType: TRUE if a zero surface, FALSE otherwise.
|
---|
See Also:
SymbIsConstSrf
SymbIsZeroCrv
Keywords:
(distance.c:409)
Prototype:
CagdPtStruct *SymbLclDistCrvLine(const CagdCrvStruct *Crv,
const CagdLType Line,
CagdRType Epsilon,
CagdBType InterPos,
CagdBType ExtremPos)
Description:
Given a curve and a line, finds the local extreme distance points on the
curve to the given line. Only interior extrema are considered.
Returned is a list of parameter value with local extreme distances.
Let Crv be (x(t), y(t)). By substituting x(t) and y(t) into the line
equation, we derive the distance function.
Its zero set, possibly combined with the zero set of its derivative
provide the needed extreme distances.
Parameters:
Crv: | The curve to find its nearest (farthest) point to Line.
|
---|
Line: | The line to find the nearest (farthest) point on Crv to it.
|
---|
Epsilon: | Accuracy of computation.
|
---|
InterPos: | Do we want the intersection locations?
|
---|
ExtremPos: | Do we want the extremum distance locations?
|
---|
Returned Value:
CagdPtStruct *: A list of parameter values of extreme distance
locations.
|
---|
See Also:
SymbDistCrvLine
MvarDistSrfLine
SymbCrvRayInter
Keywords:
curve line distance
(distance.c:263)
Prototype:
CagdPtStruct *SymbLclDistCrvPoint(const CagdCrvStruct *CCrv,
void *CrvPtPrepHandle,
const CagdRType *Pt,
CagdRType Epsilon)
Description:
Given a curve and a point, find the local extremum distance points on the
curve to the given point. Only interior extrema are considered.
Returned is a list of parameter value with local extremum.
Computes the zero set of (Crv(t) - Pt) . Crv'(t), in R^n - the space of
Crv.
Parameters:
CCrv: | The curve to find its extreme distance locations to Pt.
|
---|
CrvPtPrepHandle: | If not NULL, holds pre-processed data to speed up the
curve - points distance computations, for multiple
curve - point tests (same curve for all points).
|
---|
Pt: | The point to find the extreme distance locations from Crv.
Should be in the sapce range space as CCrv.
|
---|
Epsilon: | Accuracy of computation.
|
---|
Returned Value:
CagdPtStruct *: A list of parameter values of extreme distance
locations.
|
---|
See Also:
SymbDistCrvPoint
MvarDistSrfPoint
Keywords:
curve point distance
(curvatur.c:528)
Prototype:
CagdCrvStruct *SymbMakePosCrvCtlPolyPos(const CagdCrvStruct *OrigCrv)
Description:
Given a scalar curve that is positive, refine it until all its control
points has positive coefficients. Always returns a Bspline curve.
Parameters:
OrigCrv: | To refine until all its control points are non negative.
|
---|
Returned Value:
CagdCrvStruct *: Refined positive curve with positive control points.
|
---|
Keywords:
refinement
(compost2.c:790)
Prototype:
CagdCrvStruct *SymbMapUVCrv2E3(const CagdCrvStruct *Crv,
const CagdSrfStruct *Srf,
CagdBType Compose)
Description:
Computes Srf(Crv), by either evaluating Srf at all control points
locations of Crv (useful if piecewise linear), or via composition.
Parameters:
Crv: | In UV space of Srf to map to E3.
|
---|
Srf: | To map Crv over it.
|
---|
Compose: | TRUE to compose Srf(Crv) or FALSE to evaluate at ctl pts.
|
---|
Returned Value:
CagdCrvStruct *: E3 curve of Srf(Crv).
|
---|
See Also:
SymbComposeSrfCrv
Keywords:
(symb_crv.c:1202)
Prototype:
void SymbMeshAddSub(CagdRType **DestPoints,
CagdRType * const *Points1,
CagdRType * const *Points2,
CagdPointType PType,
int Size,
CagdBType OperationAdd)
Description:
Given two control polygons/meshes - add them coordinate wise.
If mesh is rational, weights are assumed identical and are just copied.
Parameters:
DestPoints: | Where addition or difference result should go to.
|
---|
Points1: | First control polygon/mesh.
|
---|
Points2: | Second control polygon/mesh.
|
---|
PType: | Type of points we are dealing with.
|
---|
Size: | Length of each vector in Points1/2.
|
---|
OperationAdd: | TRUE of addition, FALSE for subtraction.
|
---|
Returned Value:
See Also:
SymbSrfSub
SymbSrfAdd
SymbMeshAddSubTo
Keywords:
addition
subtraction
symbolic computation
(symb_crv.c:1266)
Prototype:
void SymbMeshAddSubTo(CagdRType **DestPoints,
CagdRType * const *Points2,
CagdPointType PType,
int Size,
CagdBType OperationAdd)
Description:
Given two control polygons/meshes - add/sub the second to the first
coordinate wise.
If mesh is rational, weights are assumed identical and are ignored.
Parameters:
DestPoints: | Where addition or difference result should go to.
|
---|
Points2: | Second control polygon/mesh.
|
---|
PType: | Type of points we are dealing with.
|
---|
Size: | Length of each vector in Points1/2.
|
---|
OperationAdd: | TRUE of addition, FALSE for subtraction.
|
---|
Returned Value:
See Also:
SymbSrfSub
SymbSrfAdd
SymbMeshAddSub
Keywords:
addition
subtraction
symbolic computation
(nrmlcone.c:541)
Prototype:
CagdBType SymbNormal2ConesForSrf(const CagdSrfStruct *Srf,
CagdRType ExpandingFactor,
SymbNormalConeStruct *Cone1,
SymbNormalConeStruct *Cone2)
Description:
Computes a 2cones bound to the normal field of surface Srf. The 2cones
bound 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:
Srf: | To compute the normal 2cones for.
|
---|
ExpandingFactor: | actor to expand placement of 2cones axes locations.
|
---|
Cone1, Cone2: | The two cones to compute or ConeAngle == M_PI if error.
|
---|
Returned Value:
CagdBType: TRUE if successful, FALSE otherwise.
|
---|
See Also:
SymbNormalConeForSrf
SymbNormalConeOverlap
SymbTangentConeForCrv
Keywords:
normals
normal bound
(nrmlcone.c:284)
Prototype:
const SymbNormalConeStruct *SymbNormalConeForSrfAvgToData(const CagdSrfStruct
*Srf,
SymbNormalConeStruct
*NormalCone)
Description:
Computes a normal cone for a given surface, by computing the normal field
of the surface and deriving the angular span of this normal field by
testing the angular span of all control vector in the normal field.
A normal field is searched for as "_NormalSrf" attribute in Srf or
computed locally of no such attribute is found.
Parameters:
Srf: | To compute a normal cone for.
|
---|
NormalCone: | The computed normal cone,
or NULL if failed.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed normal cone,
or NULL if failed.
|
---|
See Also:
SymbNormalConeForSrfOpt
SymbNormalConeOverlap
SymbTangentConeForCrv
SymbNormalConeForSrfDoOptimal
SymbNormalConeForSrf
Keywords:
normals
normal bound
(nrmlcone.c:210)
Prototype:
int SymbNormalConeForSrfDoOptimal(int Optimal)
Description:
Sets whether to use an optimal (but slower) algorithm to compue bounding
cones for normals or use a simple vector averaging that is faster.
Parameters:
Returned Value:
See Also:
SymbNormalConeForSrfAvg
SymbNormalConeForSrfOpt
Keywords:
(nrmlcone.c:462)
Prototype:
const SymbNormalConeStruct *SymbNormalConeForSrfMainAxisToData(
const CagdSrfStruct *Srf,
CagdVType MainAxis,
SymbNormalConeStruct *Cone)
Description:
Same as SymbNormalConeForSrf but also estimates a main axis (principal
component) for the cone
A normal field is searched for as "_NormalSrf" attribute in Srf or
computed locally of no such attribute is found.
Parameters:
Srf: | To compute normal cone and main axis of normal cone for.
|
---|
MainAxis: | Main axis (principal component) of the normal cone's
vectors distribution.
|
---|
Cone: | The computed normal cone,
or NULL if failed.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed normal cone,
or NULL if failed.
|
---|
See Also:
SymbNormalConeForSrf
SymbNormalConeOverlap
SymbTangentConeForCrv
Keywords:
normals
normal bound
(nrmlcone.c:380)
Prototype:
const SymbNormalConeStruct *SymbNormalConeForSrfOptToData(const CagdSrfStruct
*Srf,
SymbNormalConeStruct
*NormalCone)
Description:
Computes the optimal normal cone for a given surface, using linear prog,
Parameters:
Srf: | To compute a normal cone for.
|
---|
NormalCone: | The computed normal cone,
or NULL if failed.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed normal cone,
or NULL if failed.
|
---|
See Also:
SymbNormalConeForSrfAvg
GMMinSpanCone
SymbNormalConeForSrfDoOptimal
SymbNormalConeForSrf
Keywords:
normals
normal bound
(nrmlcone.c:249)
Prototype:
const SymbNormalConeStruct *SymbNormalConeForSrfToData(const CagdSrfStruct
*Srf,
SymbNormalConeStruct
*NormalCone)
Description:
Computes a normal cone for a given surface, by computing the normal field
of the surface and deriving the angular span of this normal field by
testing the angular span of all control vector in the normal field.
A normal field is searched for as "_NormalSrf" attribute in Srf or
computed locally of no such attribute is found.
Parameters:
Srf: | To compute a normal cone for.
|
---|
NormalCone: | The computed normal cone,
or NULL if failed.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed normal cone,
or NULL if failed.
|
---|
See Also:
SymbNormalConeForSrfOpt
SymbNormalConeForSrfAvg
SymbTangentConeForCrv
SymbNormalConeForSrfDoOptimal
Keywords:
normals
normal bound
(nrmlcone.c:618)
Prototype:
CagdBType SymbNormalConeOverlap(const SymbNormalConeStruct *NormalCone1,
const SymbNormalConeStruct *NormalCone2)
Description:
Tests if the given two normal cones overlap or not.
Parameters:
NormalCone1, NormalCone2: | The two normal cones to test for angular
overlap.
|
---|
Returned Value:
CagdBType: TRUE if overlap, FALSE otherwise.
|
---|
See Also:
SymbNormalConeOverlap
Keywords:
normals
normal bound
(nrmlcone.c:649)
Prototype:
SymbNormalConeStruct *SymbNormalConvexHullConeForSrf(const CagdSrfStruct *Srf,
CagdRType ***CH,
int *NPts)
Description:
Computes the convex conical hull of the normal field of surface Srf.
The result is returned as an array of subset of vectors from the field.
Parameters:
Srf: | To compute the conical hull for.
|
---|
CH: | The vectors of the convex conical hull to compute.
CH[i][j] is the i'th coordinate of the j'th vector.
|
---|
NPts: | Contain the number of vectors in CH.
|
---|
Returned Value:
SymbNormalConeStruct *: A circular normal cone as a by product.
|
---|
See Also:
SymbNormalConvexHullConeOverlap
Keywords:
(nrmlcone.c:799)
Prototype:
CagdBType SymbNormalConvexHullConeOverlap(const SymbNormalConeStruct
*NormalCone1,
const CagdRType **CH1,
int NPts1,
const SymbNormalConeStruct
*NormalCone2,
const CagdRType **CH2,
int NPts2)
Description:
Tests if the given two convex conical hulls overlap or not.
Parameters:
NormalCone1: | he normal cone of the first surface.
|
---|
CH1: | The convex conical hull of the first surface.
|
---|
NPts1: | Number of points in the convex conical of the first surface.
|
---|
NormalCone2: | he normal cone of the second surface.
|
---|
CH2: | The convexc onical hull of the second surface.
|
---|
NPts2: | Number of point in the convex conical of the second surface.
|
---|
Returned Value:
CagdBType: TRUE if overlap, FALSE otherwise.
|
---|
See Also:
SymbNormalConvexHullConeForSrf
Keywords:
(symb_ortho.c:51)
Prototype:
CagdSrfStruct *SymbOrthoNetSrf(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
int FrontSamples,
int LayerSamples)
Description:
A function to fit a planar surface between the given two planar Bezier
curves, sharing the same domain. so the U/V isoparametric curves of the
surface are approximately orthogonal.
In other words, the surface will be approximately conformal.
Parameters:
Crv1: | 1st Bezier curve to fit a surface with an orthogonal
network of isocurves through. Curve is assumed in XY plane.
|
---|
Crv2: | 2nd Bezier curve to fit a surface with an orthogonal
network of isocurves through. Curve is assumed in XY plane.
|
---|
FrontSamples: | umber of samples to take along the curves, the higher
the more accurate the result will be.
|
---|
LayerSamples: | umber of samples to take between the curves, the higher
the more accurate the result will be.
|
---|
Returned Value:
CagdSrfStruct *: A surface between Crv1 and Crv2 with approximately
orthogonal network of U/V isoparametric curves.
Returns NULL if error.
|
---|
See Also:
Keywords:
(prisa.c:128)
Prototype:
CagdSrfStruct *SymbPiecewiseRuledSrfApprox(const CagdSrfStruct *CSrf,
CagdBType ConsistentDir,
CagdRType Epsilon,
CagdSrfDirType Dir)
Description:
Constructs a piecewise ruled surface approximation to the given surface,
Srf, in the given direction, Dir, that is close to the surface to within
Epsilon.
If ConsitentDir then ruled surface parametrization is set to be the
same as original surface Srf. Otherwise, ruling dir is always
CAGD_CONST_V_DIR.
Surface is assumed to have point types E3 or P3 only.
Parameters:
CSrf: | To approximate using piecewise ruled surfaces.
|
---|
ConsistentDir: | o we want parametrization to be the same as Srf?
|
---|
Epsilon: | Accuracy of piecewise ruled surface approximation.
|
---|
Dir: | Direction of piecewise ruled surface approximation.
Either U or V.
|
---|
Returned Value:
CagdSrfStruct *: A list of ruled surfaces approximating Srf to within
Epsilon in direction Dir.
|
---|
See Also:
SymbAllPrisaSrfs
SymbPrisaRuledSrf
TrimAllPrisaSrfs
Keywords:
layout
prisa
ruled surface approximation
(smp_skel.c:962)
Prototype:
CagdSrfStruct *SymbPlaneLineBisect(const CagdVType LineDir, CagdRType Size)
Description:
Compute the bisector surface between the XY plane and a line emanating
from the origin in direction V.
Parameters:
LineDir: | irection of line from origin. Must be in northern hemisphere.
|
---|
Size: | Portion of result as it is infinite.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbConePlaneBisect
SymbCylinPlaneBisect
SymbSpherePlaneBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(smp_skel.c:700)
Prototype:
CagdSrfStruct *SymbPlanePointBisect(const CagdPType Pt, CagdRType Size)
Description:
Compute the bisector surface between the XY plane and a point.
Parameters:
Pt: | Direction of line from origin.
|
---|
Size: | Portion of result as it is infinite.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConePlaneBisect
SymbCylinPlaneBisect
SymbSpherePlaneBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
SymbTorusTorusBisect
Keywords:
bisectors
skeleton
(prisa.c:503)
Prototype:
CagdCrvStruct *SymbPrisaGetCrossSections(const CagdSrfStruct *RSrfs,
CagdSrfDirType Dir,
const CagdVType Space)
Description:
Given a list of n ruled surface in 3-space, extract their cross sections
and return a list of n+1 cross sections. The given ruled surfaces are
assumed to be a layout decomposition of a freeform surface using the
function SymbPiecewiseRuledSrfApprox.
Parameters:
RSrfs: | A list of ruled surfaces to extract cross sections from.
|
---|
Dir: | Ruling direction of ruled/developable surface approximation.
Typically CAGD_CONST_U_DIR.
|
---|
Space: | Increment on Y on the offset vector, after this
cross section was placed in the XY plane.
|
---|
Returned Value:
CagdCrvStruct *: A list of cross sections. The cross sections will
be in the XY plane the cross section is indeed planar
or approximately in the XY plane otherwise.
|
---|
See Also:
SymbPrisaRuledSrf
SymbPiecewiseRuledSrfApprox
SymbAllPrisaSrfs
SymbPrisaGetOneCrossSection
Keywords:
(prisa.c:585)
Prototype:
CagdCrvStruct *SymbPrisaGetOneCrossSection(const CagdSrfStruct *RSrf,
CagdSrfDirType Dir,
CagdBType Starting,
CagdBType Ending)
Description:
Given a ruled surface in 3-space, extract its starting/ending cross
sections and return a list of one or two cross sections. The given ruled
surface is assumed to be a layout decomposition of a freeform surface
using the function SymbPiecewiseRuledSrfApprox.
Parameters:
RSrf: | A ruled surface to extract cross section(s) from.
|
---|
Dir: | Ruling direction of ruled/developable surface approximation.
Typically CAGD_CONST_U_DIR.
|
---|
Starting: | If TRUE, extracts the first cross section.
|
---|
Ending: | If TRUE, extracts the last cross section.
|
---|
Returned Value:
CagdCrvStruct *: A list of one or two cross sections. The cross sections
will be in the XY plane the cross section is indeed
planar or approximately in the XY plane otherwise.
|
---|
See Also:
SymbPrisaRuledSrf
SymbPiecewiseRuledSrfApprox
SymbAllPrisaSrfs
SymbPrisaGetCrossSections
Keywords:
(prisa.c:359)
Prototype:
CagdSrfStruct *SymbPrisaRuledSrf(const CagdSrfStruct *Srf,
int SamplesPerCurve,
CagdRType Space,
CagdVType Offset)
Description:
Layout a single ruled surface, by approximating it as a set of polygons.
The given ruled surface might be non-developable, in which case
approximation will be of a surface with no twist.
The ruled surface is assumed to be constructed using CagdRuledSrf and
that the ruled direction is consistent and is always CAGD_CONST_V_DIR.
Parameters:
Srf: | A ruled surface to layout flat on the XY plane.
|
---|
SamplesPerCurve: | uring the approximation of a ruled surface as a
developable surface.
|
---|
Space: | Increment on Y on the offset vector, after this
surface was placed in the XY plane.
|
---|
Offset: | A vector in the XY plane to denote the amount of
translation for the flatten surface in the XY plane.
|
---|
Returned Value:
CagdSrfStruct *: A planar surface in the XY plane approximating the
falttening process of Srf.
|
---|
See Also:
SymbPiecewiseRuledSrfApprox
SymbAllPrisaSrfs
TrimAllPrisaSrfs
Keywords:
layout
prisa
(symb_crv.c:1564)
Prototype:
CagdCrvStruct *SymbPrmtSclrCrvTo2D(const CagdCrvStruct *Crv,
CagdRType Min,
CagdRType Max)
Description:
Promote a scalar curve to two dimensions by moving the scalar axis to be
the Y axis and adding monotone X axis.
Parameters:
Crv: | Scalar curve to promose to a two dimensional one.
|
---|
Min: | Minimum of new monotone X axis.
|
---|
Max: | Maximum of new monotone X axis.
|
---|
Returned Value:
CagdCrvStruct *: A two dimensional curve.
|
---|
See Also:
SymbPrmtSclrSrfTo3D
Keywords:
promotion
conversion
symbolic computation
(symb_srf.c:1519)
Prototype:
CagdSrfStruct *SymbPrmtSclrSrfTo3D(const CagdSrfStruct *Srf,
CagdRType UMin,
CagdRType UMax,
CagdRType VMin,
CagdRType VMax)
Description:
Promote a scalar surface to three dimensions by moving the scalar axis to
be the Z axis and adding monotone X and Y axes.
Parameters:
Srf: | Surface to promote from one to three dimensions.
|
---|
UMin: | Minimum of new monotone X axis.
|
---|
UMax: | Maximum of new monotone X axis.
|
---|
VMin: | Minimum of new monotone Y axis.
|
---|
VMax: | Maximum of new monotone Y axis.
|
---|
Returned Value:
CagdSrfStruct *: A three dimensional surface.
|
---|
See Also:
SymbPrmtSclrCrvTo2D
Keywords:
promotion
conversion
symbolic computation
(smp_skel.c:69)
Prototype:
CagdCrvStruct *SymbPtCrvBisectOnSphere(const CagdPType Pt,
const CagdCrvStruct *CCrv)
Description:
Computes the bisector curve on a sphere of a point and a curve, both
assumed to be on the unit sphere
The following assumption are made and must be met for proper answer:
1. Both the curve and the point are indeed on the unit sphere.
2. Both the curve and the point are on the northern hemisphere. That is
the Z coefficients of all points on both Pt and Crv are positive.
The end result is NOT a curve on the sphere but rather a rational curve
in the Z = 1 plane whose central projection onto the sphere (i.e.
normalization) would yield the proper bisector on the unit sphere.
Let P be the bisector point. Then, the following must be satisified:
< P, Pt > = < P, C(t) > (Equality of angular distance)
< P - C(t), C'(t) > = 0 (orthogonality of distance measure)
< P, (0, 0, 1) > = 1 (containment in the Z = 1 plane, or Pz = 1)
Note we have only two unknowns (Px, Py) as Pz equals 1.
Parameters:
Pt: | A point on the unit sphere, on the northern hemisphere.
|
---|
CCrv: | A curve on the unit sphere, on the northern hemisphere.
|
---|
Returned Value:
CagdCrvStruct *: The bisector curve on Z = 1 plane to be centrally
projected onto the unit sphere as the spherical bisector.
|
---|
See Also:
SymbCrvCrvBisectOnSphere
Keywords:
bisectors
skeleton
(smp_skel.c:188)
Prototype:
CagdCrvStruct *SymbPtCrvBisectOnSphere2(const CagdPType Pt,
const CagdCrvStruct *CCrv,
CagdRType SubdivTol)
Description:
Computes the bisector on a sphere between a point and a curve on the
sphere. The returned result is a piecewise linear curve on the sphere.
Parameters:
Pt: | A point on the unit sphere, on the northern hemisphere.
|
---|
CCrv: | A curve on the unit sphere, on the northern hemisphere.
|
---|
SubdivTol: | Accuracy of piecewise linear approximation.
|
---|
Returned Value:
CagdCrvStruct *: A piecewise linear curve approximating the bisector
of Crv1 and Crv2 on the sphere.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbCrvCrvBisectOnSphere
Keywords:
bisectors
skeleton
(rflct_ln.c:311)
Prototype:
void SymbRflctCircFree(CagdSrfStruct *Srf)
Description:
Free the internal data sets, if any of the given surface, toward the
computation of the reflection circles. as created by SymbRflctCircPrepSrf.
Parameters:
Srf: | Surface to free its internal data sets saved as attributes.
|
---|
Returned Value:
See Also:
SymbRflctCircPrepSrf
SymbRflctCircGen
Keywords:
(rflct_ln.c:272)
Prototype:
CagdSrfStruct *SymbRflctCircGen(CagdSrfStruct *Srf,
const CagdVType ViewDir,
const CagdPType SprCntr,
CagdRType ConeAngle)
Description:
Compute the reflection circles through a sphere centered at SprCntr off
the given surface. The surface is assumed to have been preprocessed in
SymbRflctCircPrepSrf for the requested preprocessed named attribute, or
otherwise SymbRflctCircPrepSrf will be invoked on the fly.
Parameters:
Srf: | Surface to preprocess.
|
---|
ViewDir: | Direction of view.
|
---|
SprCntr: | Center of sphere that reflection lines should be tangent to.
|
---|
ConeAngle: | Opening angle assumed for a cone holding the sphere with the
apex of the cone at S(u, v), in degrees.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface whose zero set is the reflection
circles sought on Srf.
|
---|
See Also:
SymbRflctCircPrepSrf
SymbRflctCircFree
Keywords:
(rflct_ln.c:208)
Prototype:
void SymbRflctCircPrepSrf(CagdSrfStruct *Srf,
const CagdVType ViewDir,
const CagdPType SprCntr)
Description:
Precompute the necessary data set for as efficient as possible
reflection circles' extractions. Data set is kept as an attribute on the
surface.
Parameters:
Srf: | Surface to preprocess.
|
---|
ViewDir: | Direction of view.
|
---|
SprCntr: | Center of sphere that reflection lines should be tangent to.
|
---|
Returned Value:
See Also:
SymbRflctCircGen
SymbRflctCircFree
Keywords:
(rflct_ln.c:171)
Prototype:
void SymbRflctLnFree(CagdSrfStruct *Srf)
Description:
Free the internal data sets, if any of the given surface, toward the
computation of the reflection lines. as created by SymbRflctLnPrepSrf. m
Parameters:
Srf: | Surface to free its internal data sets saved as attributes.
|
---|
Returned Value:
See Also:
SymbRflctLnPrepSrf
SymbRflctLnGen
Keywords:
(rflct_ln.c:130)
Prototype:
CagdSrfStruct *SymbRflctLnGen(CagdSrfStruct *Srf,
const CagdVType ViewDir,
const CagdPType LnPt,
const CagdVType LnDir)
Description:
Compute the reflection line through LnPt off the given surface. The
surface is assumed to have been preprocessed in SymbRflctLnPrepSrf for the
requested preprocessed named attribute, or otherwise SymbRflctLnPrepSrf
will be invoked on the fly.
Parameters:
Srf: | Surface to preprocess.
|
---|
ViewDir: | Direction of view.
|
---|
LnPt: | Point on a reflection line.
|
---|
LnDir: | Direction of reflection line.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface whose zero set is the reflection line
sought on Srf.
|
---|
See Also:
SymbRflctLnPrepSrf
SymbRflctLnFree
Keywords:
(rflct_ln.c:87)
Prototype:
void SymbRflctLnPrepSrf(CagdSrfStruct *Srf,
const CagdVType ViewDir,
const CagdVType LnDir)
Description:
Precompute the necessary data set for as efficient as possible
reflection lines' extractions. Data set is kept as an attribute on the
surface. Note that only the direction of the reflection line is employed
at this time, and exact location will be required by SymbRflctLnGen only.
Parameters:
Srf: | Surface to preprocess.
|
---|
ViewDir: | Direction of view.
|
---|
LnDir: | Direction of reflection line.
|
---|
Returned Value:
See Also:
SymbRflctLnGen
SymbRflctLnFree
Keywords:
(rrinter.c:876)
Prototype:
CagdCrvStruct *SymbRingRingIntersection(CagdCrvStruct *C1,
CagdCrvStruct *r1,
CagdCrvStruct *C2,
CagdCrvStruct *r2,
CagdRType SubdivTol,
CagdCrvStruct **PCrvs1,
CagdCrvStruct **PCrvs2)
Description:
Computes the intersection curve of two ring surfaces:
S1(u, t) = C1(u) + Circ1(t) r1(u)
S2(v, s) = C2(v) + Circ2(s) r2(v)
where Circ1 and Circ2 are oriented to be in the normal plane of C1/C2.
The intersection is derived from the zero set of the function that is
computed by SymbRingRingZeroSetFunc.
Parameters:
C1, r1: | The two curves prescribing the first ring surface. Must be
integral curves.
|
---|
C2, r2: | The two curves prescribing the second ring surface. Must be
integral curves.
|
---|
SubdivTol: | Accuracy of zero set computation as part of the solution.
Value of 0.01 is a good start.
|
---|
PCrvs1, PCrvs2: | The parametric domains of the intersection curves, in
the two surfaces.
|
---|
Returned Value:
CagdCrvStruct *: Intersection curves in Euclidean space.
|
---|
See Also:
SymbRingRingZeroSetFunc
Keywords:
(rrinter.c:1037)
Prototype:
CagdSrfStruct *SymbRingRingZeroSetFunc(CagdCrvStruct *C1,
CagdCrvStruct *r1,
CagdCrvStruct *C2,
CagdCrvStruct *r2)
Description:
Computes the intersection curve of two ring surfaces:
S1(u, t) = C1(u) + Circ1(t) r1(u)
S2(v, s) = C2(v) + Circ2(s) r2(v)
where Circ1 and Circ2 are oriented to be in the normal plane of C1/C2.
Let n1(u) and n2(v) be the normals of the normal plane of C1/C2,
n1(u) = C1'(u), n2(v) = C2'(v). Then, solve for x(u, v), y(u, v), z(u, v)
| n1(u) | | x | | < n1(u), C1(u) > |
| | | | | |
| n2(v) | | y | = | < n2(v), C2(v) > |
| | | | | |
| C1(u) - C2(v) | | z | | ( < C1(u), C1(u) > - < C2(v), C2(v) > |
| | | | | + r2^2(v) - r1^2(u) ) / 2 |
Lets P(u, v) = (x(u, v), y(u, v), z(u, v)). Find the zero set of
F(u, v): < P(u, v) - C1(u), P(u, v) - C1(u) > - r1^2(u) = 0,
or, alternatively, the zero set of,
F(u, v): < P(u, v) - C2(v), P(u, v) - C2(v) > - r2^2(v) = 0.
Parameters:
C1, r1: | The two curves prescribing the first ring surface. Must be
integral curves.
|
---|
C2, r2: | The two curves prescribing the second ring surface. Must be
integral curves.
|
---|
Returned Value:
CagdSrfStruct *: F(u, v).
|
---|
See Also:
SymbRingRingIntersection
Keywords:
(bspkntrm.c:261)
Prototype:
CagdCrvStruct *SymbRmKntBspCrvCleanKnots(const CagdCrvStruct *Crv)
Description:
Remove only knots which do not change the given curve.
Parameters:
Crv: | Curve to remove knot from.
|
---|
Returned Value:
CagdCrvStruct *: The new curve after removal.
|
---|
See Also:
SymbRmKntBspCrvRemoveKnots
SymbRmKntBspCrvRemoveKnotsError
Keywords:
(bspkntrm.c:216)
Prototype:
CagdCrvStruct *SymbRmKntBspCrvRemoveKnots(const CagdCrvStruct *CCrv,
CagdRType Tolerance)
Description:
Remove knots while Tolerance is kept.
Parameters:
CCrv: | Curve to remove knots from.
|
---|
Tolerance: | Desired accuracy to be kept, in L-infinity norm.
|
---|
Returned Value:
CagdCrvStruct *: The new curve after removal.
|
---|
See Also:
SymbRmKntBspCrvCleanKnots
Keywords:
(bspkntrm.c:489)
Prototype:
CagdSrfStruct *SymbRmKntBspSrfCleanKnots(const CagdSrfStruct *Srf)
Description:
Remove only knots which do not change the given surface.
Parameters:
Srf: | Surface to remove knot from.
|
---|
Returned Value:
CagdSrfStruct *: The new surface after removal.
|
---|
See Also:
SymbRmKntBspCrvRemoveKnots
SymbRmKntBspCrvRemoveKnotsError
SymbRmKntBspCrvCleanKnots
Keywords:
(bspkntrm.c:286)
Prototype:
CagdSrfStruct *SymbRmKntBspSrfRemoveKnots(const CagdSrfStruct *CSrf,
CagdRType Tolerance)
Description:
Remove knots while Tolerance is kept.
Parameters:
CSrf: | Surface to remove knots from.
|
---|
Tolerance: | Desired accuracy to be kept, in L-infinity norm.
|
---|
Returned Value:
CagdSrfStruct *: The new surface after removal.
|
---|
See Also:
SymbRmKntBspCrvCleanKnots
SymbRmKntBspCrvRemoveKnots
ymbRmKntBspSrfRemoveKnotsDir
SymbRmKntBspSrfCleanKnots
Keywords:
(bspkntrm.c:319)
Prototype:
CagdSrfStruct *SymbRmKntBspSrfRemoveKnotsDir(const CagdSrfStruct *CSrf,
CagdSrfDirType Dir,
CagdRType Tolerance)
Description:
Remove knots while Tolerance is kept.
Parameters:
CSrf: | Surface to remove knots from.
|
---|
Dir: | Parametric direction of Srf to consider - row or column.
|
---|
Tolerance: | Desired accuracy to be kept, in L-infinity norm.
|
---|
Returned Value:
CagdSrfStruct *: The new surface after removal.
|
---|
See Also:
SymbRmKntBspCrvCleanKnots
SymbRmKntBspCrvRemoveKnots
Keywords:
(rrinter.c:144)
Prototype:
CagdCrvStruct *SymbRuledRuledIntersection(CagdCrvStruct *C1,
CagdCrvStruct *C2,
CagdCrvStruct *D1,
CagdCrvStruct *D2,
CagdRType SubdivTol,
CagdCrvStruct **PCrvs1,
CagdCrvStruct **PCrvs2)
Description:
Computes the intersection curve of two ruled surfaces:
S1(u, t) = t C1(u) + (1-t) C2(u)
S2(v, s) = s D1(v) + (1-s) D2(s)
Then S1(u, t) = S2(v, s) yields,
C1(u) - D1(v) = s (C1(u) - C2(u)) + t (D2(v) - D1(v))
N
or solve for the zero set of the determinant of,
| C1(u) - D1(u) |
Gamma(u, v) = | C1(u) - C2(u) | = 0
| D1(v) - D2(v) |
Parameters:
C1, C2: | The two curves forming the first ruled surface.
|
---|
D1, D2: | The two curves forming the second ruled surface.
|
---|
SubdivTol: | Accuracy of zero set computation as part of the solution.
Value of 0.01 is a good start. If SubdivTol is negative
the ruled surfaces are assumed infinite (and absolute value
of SubdivTol is employed). Otherwise, the ruled surface is
bound between C1 and C2 and between D1 and D2 respectively.
|
---|
PCrvs1, PCrvs2: | The parametric domains of the intersection curves, in
the two surfaces.
|
---|
Returned Value:
CagdCrvStruct *: Intersection curves in Euclidean space.
|
---|
Keywords:
(rrinter.c:80)
Prototype:
CagdSrfStruct *SymbRuledRuledZeroSetFunc(CagdCrvStruct *C1,
CagdCrvStruct *C2,
CagdCrvStruct *D1,
CagdCrvStruct *D2)
Description:
Computes the intersection curve of two ruled surfaces:
S1(u, t) = t C1(u) + (1-t) C2(u)
S2(v, s) = s D1(v) + (1-s) D2(s)
Then S1(u, t) = S2(v, s) yields,
C1(u) - D1(v) = s (C1(u) - C2(u)) + t (D2(v) - D1(v))
N
or solve for the zero set of the determinant of,
| C1(u) - D1(u) |
Gamma(u, v) = | C1(u) - C2(u) | = 0
| D1(v) - D2(v) |
Parameters:
C1, C2: | The two curves forming the first ruled surface.
|
---|
D1, D2: | The two curves forming the second ruled surface.
|
---|
Returned Value:
CagdSrfStruct *: Gamma(u, v).
|
---|
Keywords:
(rrinter.c:606)
Prototype:
CagdCrvStruct *SymbRuledSelfIntersection(CagdCrvStruct *C1,
CagdCrvStruct *C2,
CagdRType SubdivTol,
CagdCrvStruct **PCrvs1,
CagdCrvStruct **PCrvs2)
Description:
Computes the self intersection curve of a ruled surfaces:
Parameters:
C1, C2: | The two curves forming the ruled surface.
|
---|
SubdivTol: | Accuracy of zero set computation as part of the solution.
Value of 0.01 is a good start. If SubdivTol is negative
the ruled surfaces are assumed infinite (and absolute value
of SubdivTol is employed). Otherwise, the ruled surface is
bound between C1 and C2 and between D1 and D2 respectively.
|
---|
PCrvs1, PCrvs2: | The parametric domains of the intersection curves, in
the two surfaces.
|
---|
Returned Value:
CagdCrvStruct *: Intersection curves in Euclidean space.
|
---|
Keywords:
(symbzero.c:425)
Prototype:
CagdPtStruct *SymbScalarCrvLowDegZeroSet(CagdCrvStruct *Crv)
Description:
Computes the zeros of low degree polynomial, analytically.
Parameters:
Crv: | Low degree polynomial to derive its roots analytically.
|
---|
Returned Value:
CagdPtStruct *: list of zeros.
|
---|
Keywords:
(symb_ftl.c:28)
Prototype:
SymbSetErrorFuncType SymbSetFatalErrorFunc(SymbSetErrorFuncType ErrorFunc)
Description:
Sets the error function to be used by Symb_lib.
Parameters:
ErrorFunc: | New error function to use.
|
---|
Returned Value:
SymbSetErrorFuncType: Old error function reference.
|
---|
Keywords:
error handling
(blending.c:154)
Prototype:
CagdSrfStruct *SymbShapeBlendOnSrf(CagdSrfStruct *Srf,
CagdCrvStruct *UVCrv,
const CagdCrvStruct *CrossSecShape,
CagdRType TanScale,
CagdRType Width,
const CagdCrvStruct *WidthField,
CagdRType Height,
const CagdCrvStruct *HeightField)
Description:
Constructs a surface, C^1 tangent to given surface and has the
prescribed cross section shape.
Parameters:
Srf: | Surface to construct the blended shape on, with C^1 continuity.
|
---|
UVCrv: | The curve along which to blend the formed shae, in the
parametric domain of the surface. Assumed to be in Srf.
|
---|
CrossSecShape: | The cross section of this blended shape.
|
---|
TanScale: | Scale factor of derived tangent fields.
|
---|
Width: | Of swept shape, in parametric space units.
|
---|
WidthField: | If not NULL, a scaling field to modulate the width of
the constructed blended surface.
|
---|
Height: | Of swept shape, in Euclidean space units.
|
---|
HeightField: | If not NULL, a scaling field to modulate the height of
the constructed blended surface.
|
---|
Returned Value:
CagdSrfStruct *: A newly form swept shape with CrossSecShape as
approximated cross section, along UVCrv.
|
---|
See Also:
SymbShapeBlendSrf
Keywords:
(blending.c:302)
Prototype:
CagdSrfStruct *SymbShapeBlendSrf(const CagdCrvStruct *Pos1Crv,
const CagdCrvStruct *Pos2Crv,
const CagdCrvStruct *CDir1Crv,
const CagdCrvStruct *CDir2Crv,
const CagdCrvStruct *CrossSecShape,
const CagdCrvStruct *Normal)
Description:
Construct a surface that interpolates Pos1Crv and Pos2Crv so that the
surface is tangent to Dir1Crv and Dir2Crv there. CrossSecShape is a
blending shaping curve that must satisfy the following (CrossSecShape is
C(t), t in [0, 1]):
C(0) = (-1, 0), C(1) = (1,0), C'(0) = (0, 0), C'(1) = (0, 0).
Parameters:
Pos1Crv, Pos2Crv: | Starting and end curves of surface.
|
---|
CDir1Crv, CDir2Crv: | Starting and end tangent fields surface.
|
---|
CrossSecShape: | The shape of the cross section of the blend.
|
---|
Normal: | A unit vector field orthogonal to Pos1Crv - Pos2Crv.
|
---|
Returned Value:
CagdSrfStruct *: The blended surface. This surface will equal to -
Let S(t) = ( Pos1Crv(t) + Pos2Crv(t) ) / 2
Let D(t) = ( Pos2Crv(t) - Pos1Crv(t) ) / 2
Then S(t, r) = H01(r) * Dir1Crv(t) +
H11(r) * Dir2Crv(t) +
S(t) + D(t) * CrossSecShape_x(r)
Normal(t) * CrossSecShape_y(r)
where H are the cubic Hermite functions for the two
tangent fields.
|
---|
See Also:
CagdCubicHermiteSrf
SymbShapeBlendOnSrf
Keywords:
Hermite
(crvtrrec.c:137)
Prototype:
CagdCrvStruct *SymbSignedCrvtrGenCrv(const CagdCrvStruct *Crvtr,
CagdRType Tol,
int Order,
CagdBType Periodic)
Description:
Reconstructs a planar curve from the given arc-length curvature
signature. The reconstruction is conducted as follows:
1. Tetha(s) = Integral(Crvtr(s)), the angular changes as function of s.
2. T(s) = Circ(Tetha(s)), the tangent field of the reconstructed curve.
3. C(s) = Integral(T(s)), the final curve.
Parameters:
Crvtr: | The signed curvature signature to reconstruct. Assumed to
be a piecewise polynomial arc-length function.
|
---|
Tol: | Tolerance of approximations (arclen/subdivision) of curves.
|
---|
Order: | Order of output, approximated curve. At least quadratic.
|
---|
Periodic: | If TRUE, teh recostructed curve is periodic so shift the
result to be closed.
|
---|
Returned Value:
CagdCrvStruct *: Reconstructed planar curve, in the XY plane.
This result is invariant to rotations and translations.
|
---|
See Also:
SymbCrvGenSignedCrvtr
Keywords:
(smp_skel.c:1103)
Prototype:
CagdSrfStruct *SymbSphereLineBisect(const CagdPType SprCntr,
CagdRType SprRad,
CagdRType Size)
Description:
Compute the bisector surface between a sphere and a line.
The computation is reduced to that of a bisector between a point and a
cylinder, that has a rational form. The line is assumed to be the Z axis.
Parameters:
SprCntr: | Center location of the sphere.
|
---|
SprRad: | Radius of sphere.
|
---|
Size: | Portion of result as it is infinite.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbPlaneLineBisect
SymbConePlaneBisect
SymbCylinPlaneBisect
SymbSpherePlaneBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(smp_skel.c:1152)
Prototype:
CagdSrfStruct *SymbSpherePlaneBisect(const CagdPType SprCntr,
CagdRType SprRad,
CagdRType Size)
Description:
Compute the bisector surface between a sphere and the XY plane.
The computation is reduced to that of a bisector between a point and a
plane, that has a rational form. Only the portion for which Z > 0 should
be considered in the output.
Parameters:
SprCntr: | Center location of the sphere. Must be in northern
hemisphere (positive Z coefficient).
|
---|
SprRad: | Radius of sphere.
|
---|
Size: | Portion of result as it is infinite.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbPlaneLineBisect
SymbConePlaneBisect
SymbCylinPlaneBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(smp_skel.c:859)
Prototype:
CagdSrfStruct *SymbSpherePointBisect(const CagdPType SprCntr,
CagdRType SprRad,
const CagdPType Pt)
Description:
Compute the bisector surface between a sphere and a point.
Parameters:
SprCntr: | enter location of the sphere.
|
---|
SprRad: | Radius of sphere.
|
---|
Pt: | Direction of line from origin.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbTorusPointBisect
SymbConePlaneBisect
SymbCylinPlaneBisect
SymbSpherePlaneBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(smp_skel.c:1364)
Prototype:
CagdSrfStruct *SymbSphereSphereBisect(const CagdVType SprCntr1,
CagdRType SprRad1,
const CagdVType SprCntr2,
CagdRType SprRad2)
Description:
Compute the bisector surface between wto spheres.
The computation is reduced to that of a bisector between a point and a
sphere, that has a rational form.
Parameters:
SprCntr1: | Center location of the first sphere.
|
---|
SprRad1: | Radius of first sphere.
|
---|
SprCntr2: | Center location of the second sphere.
|
---|
SprRad2: | Radius of second sphere.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbPlaneLineBisect
SymbCylinPlaneBisect
SymbConePlaneBisect
SymbSpherePlaneBisect
SymbCylinSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(crv_lenv.c:93)
Prototype:
CagdCrvStruct *SymbSplitCrvsAtExtremums(const CagdCrvStruct *CCrvs,
int Axis,
const CagdPType Pt,
CagdRType Eps)
Description:
Split the given list of curves at the extremum values of each curve, if
any.
Parameters:
CCrvs: | Input list of curves to split at all extremum values the curves
assumes.
|
---|
Axis: | Extremum to consider:
0 - Radials silhouette as viewed from Pt.
1,2 - Look for extremum (silhouette) in X,Y dir.
|
---|
Pt: | If radial silhouette are sought, use this as Eye location.
|
---|
Eps: | Tolerance of computations.
|
---|
Returned Value:
CagdCrvStruct *: List of splitted curves.
|
---|
See Also:
Keywords:
(symbzero.c:550)
Prototype:
CagdPtStruct *SymbSplitRationalCrvsPoles(const CagdCrvStruct *Crv,
CagdRType Epsilon)
Description:
Computes the poles of a rational surface, solving for the zeros of the
surface's denominator.
Parameters:
Crv: | Rational curves to extract its poles.
|
---|
Epsilon: | The numerical tolerance to use.
|
---|
Returned Value:
CagdPtStruct *: The poles, as piecewise linear approximations.
|
---|
See Also:
CagdPointsHasPoles
MvarRationalCrvsPoles
Keywords:
(symbpoly.c:208)
Prototype:
CagdCrvStruct *SymbSrf2Curves(const CagdSrfStruct *Srf, int NumOfIsocurves[2])
Description:
Routine to extract from a surface NumOfIsoline isocurve list
in each param. direction.
Iso parametric curves are sampled equally spaced in parametric space.
NULL is returned in case of an error, otherwise list of CagdCrvStruct.
Parameters:
Srf: | To extract isoparametric curves from.
|
---|
NumOfIsocurves: | In each (U or V) direction.
|
---|
Returned Value:
CagdCrvStruct *: List of extracted isoparametric curves. These curves
inherit the order and continuity of the original Srf.
NULL is returned in case of an error.
|
---|
See Also:
BspSrf2PCurves
BzrSrf2Curves
CagdSrf2Curves
Keywords:
curves
isoparametric curves
(symbpoly.c:72)
Prototype:
IPPolygonStruct *SymbSrf2Polygons(const CagdSrfStruct *Srf,
int FineNess,
CagdBType ComputeNormals,
CagdBType FourPerFlat,
CagdBType ComputeUV)
Description:
Routine to convert a single surface to set of triangles approximating it.
FineNess is a fineness control on result and the larger it is more
triangles may result.
A value of 10 is a good starting value.
NULL is returned in case of an error, otherwise list of IPPolygonStruct.
Parameters:
Srf: | To approximate into triangles.
|
---|
FineNess: | Control on accuracy, the higher the finer.
|
---|
ComputeNormals: | If TRUE, normal information is also computed.
|
---|
FourPerFlat: | If TRUE, four triangles are created per flat surface.
If FALSE, only 2 triangles are created.
|
---|
ComputeUV: | If TRUE, UV values are stored and returned as well.
|
---|
Returned Value:
IPPolygonStruct *: A list of polygons with optional normal and/or
UV parametric information.
NULL is returned in case of an error.
|
---|
See Also:
BzrSrf2Polygons
IritSurface2Polygons
IritTrimSrf2Polygons
BspSrf2Polygons
TrimSrf2Polygons
Keywords:
polygonization
surface approximation
(symbpoly.c:138)
Prototype:
CagdPolylineStruct *SymbSrf2Polylines(const CagdSrfStruct *Srf,
int NumOfIsocurves[2],
CagdRType TolSamples,
SymbCrvApproxMethodType Method)
Description:
Routine to convert a single surface to NumOfIsolines polylines in each
parametric direction with SamplesPerCurve in each isoparametric curve.
Polyline are always E3 of CagdPolylineStruct type.
NULL is returned in case of an error, otherwise list of
CagdPolylineStruct. Attempt is made to extract isolines along C1
discontinuities first.
Parameters:
Srf: | Srf to extract isoparametric curves from.
|
---|
NumOfIsocurves: | o extarct from Srf in each (U or V) direction.
|
---|
TolSamples: | Tolerance of approximation error (Method = 2) or
Number of samples to compute on polyline (Method = 0, 1).
|
---|
Method: | 0 - TolSamples are set uniformly in parametric space,
1 - TolSamples are set optimally, considering the
isocurve's curvature.
2 - TolSamples sets the maximum error allowed between the
piecewise linear approximation and original curve.
|
---|
Returned Value:
CagdPolylineStruct *: List of polylines representing a piecewise linear
approximation of the extracted isoparamteric
curves or NULL is case of an error.
|
---|
See Also:
BspSrf2Polylines
BzrSrf2Polylines
IritSurface2Polylines
IritTrimSrf2Polylines
TrimSrf2Polylines
Keywords:
polylines
isoparametric curves
(symb_srf.c:38)
Prototype:
CagdSrfStruct *SymbSrfAdd(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Given two surfaces - add them coordinate-wise.
The two surfaces are promoted to same point type before the
multiplication can take place. Furthermore, order and continuity are
matched as well.
Parameters:
Srf1, Srf2: | Two surface to add up coordinate-wise.
|
---|
Returned Value:
CagdSrfStruct *: The summation of Srf1 + Srf2 coordinate-wise.
|
---|
See Also:
SymbSrfSub
SymbMeshAddSub
SymbSrfMult
Keywords:
addition
symbolic computation
(crvtr_bnds.c:548)
Prototype:
int SymbSrfCalcAsympDirsCoeffs(const CagdSrfStruct *SffMatrix[3],
IrtRType *AsympLimits,
SymbSrfAsympBoundsMethod *ChosenMethod)
Description:
Finds the maximal and minimal bounds of the asymptotic directions of a
surface, as coefficients of dS/du and dS/dv. The function finds the best
method for computation out of the following three:
[1 b] II [1 b]^2, [a 1] II [a 1]^T, and [t 1-t] II [t 1-t]^T, where II is
the second fundamental form matrix. The function is chosen by a heuristic
which makes sure the computation does not involve dividing by zero, and
prefers a more stable division. The chosen computation method is returned
as an output parameter.
Parameters:
SffMatrix: | The second fundamental form matrix of the surface, as an
array of the form - (L, M, N).
|
---|
AsympLimits: | Output parameter - the asymptotic directions coefficients.
|
---|
ChosenMethod: | Output parameter - the chosen computation method.
|
---|
Returned Value:
int: The number of asymptotic directions found, or -1, if failed.
|
---|
See Also:
Keywords:
(offset.c:714)
Prototype:
CagdSrfStruct *SymbSrfCloseParallelSrfs2Shell(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Given two parallel surfaces (a surface and its offsets or two offsets of
some surface, etc.) builds the (up to) four ruled surfaces that fills in
the gaps on the Umin/max, Vmin/max boundaries. Note that if UMin == UMax
(VMin == VMax) no new surfaces will be added.
Parameters:
Srf1, Srf2: | The two surfaces to fill in their gaps between their
boundaries by new (ruled) surfaces.
|
---|
Returned Value:
CagdSrfStruct *: Upto four surfaces that fill in the gaps between the
boundaries of Srf1 and Srf2.
|
---|
Keywords:
(symb_srf.c:584)
Prototype:
CagdSrfStruct *SymbSrfCrossProd(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Given two surfaces - computes their cross product in R3.
Returned surface is a surface representing the cross product of the two
given surfaces.
Parameters:
Srf1, Srf2: | wo surface to multiply in R3 and compute cross product for.
|
---|
Returned Value:
CagdSrfStruct *: A vector surface representing the cross product of
Srf1 x Srf2.
|
---|
See Also:
SymbSrfDotProd
SymbSrfVecDotProd
SymbSrfScalarScale
SymbSrfMultScalar
SymbSrfInvert
SymbSrfVecCrossProd
Keywords:
product
cross product
symbolic computation
(crvtr_bnds.c:300)
Prototype:
void SymbSrfCrvtrBndsCalcBnds(const SymbSrfCrvtrBndsInfoStructPtr Info,
IrtRType *K1Limits,
IrtRType *K2Limits)
Description:
Calculate curvature limits for a given surface.
Parameters:
Info: | The SymbSrfCrvtrBndsInfoStruct.
|
---|
K1Limits: | Minimal and maximal K1 values (array of size 2).
|
---|
K2Limits: | Minimal and maximal K2 values (array of size 2).
|
---|
Returned Value:
See Also:
SymbSrfCurvatureUpperBound
SymbSrfCurvatureUpperBound
SymbSrfCrvtrBndsCalcBnds2
Keywords:
(crvtr_bnds.c:410)
Prototype:
void SymbSrfCrvtrBndsCalcBnds2(const SymbSrfCrvtrBndsInfoStructPtr Info,
int Count,
IrtRType ValMin,
IrtRType ValMax,
IrtRType ValRes,
IrtRType *K1Limits,
IrtRType *K2Limits)
Description:
Calculate curvature limits for a given surface, with given accuracy
requirements. If the accuracy is not met bounds will be calculated
recursively for subdivisions of the original surface.
Required accuracy is defined by ValRes as the difference between the
maximal and minimal curvature values.
Required accuracy is only tested in the curvature range overlaps the
range given by ValMin, ValMax.
Parameters:
Info: | The SymbSrfCrvtrBndsInfoStruct.
|
---|
Count: | Maximal number of recursion calls.
|
---|
ValMin: | Lower end of relevant curvature range.
|
---|
ValMax: | Upper end of relevant curvature range.
|
---|
ValRes: | Required gap between minimal and maximal value for K1, K2.
|
---|
K1Limits: | inimal and maximal K1 values (array of size 2).
|
---|
K2Limits: | inimal and maximal K2 values (array of size 2).
|
---|
Returned Value:
See Also:
SymbSrfCurvatureUpperBound
SymbSrfCurvatureUpperBound
SymbSrfCrvtrBndsCalcBnds2
Keywords:
(crvtr_bnds.c:488)
Prototype:
void SymbSrfCrvtrBndsInfoClear(SymbSrfCrvtrBndsInfoStruct *Info)
Description:
Clears a given SymbSrfCrvtrBndsInfoStruct (frees internal data).
Parameters:
Info: | The SymbSrfCrvtrBndsInfoStruct.
|
---|
Returned Value:
See Also:
Keywords:
(crvtr_bnds.c:156)
Prototype:
SymbSrfCrvtrBndsInfoStruct *SymbSrfCrvtrBndsInfoCreate(const CagdSrfStruct
*Srf)
Description:
Creates the information needed for normal curvature limits (bounds)
calculations on the given surface.
Parameters:
Returned Value:
SymbSrfCrvtrBndsInfoStruct *: The handle for normal curvature bound
functions.
|
---|
See Also:
Keywords:
(crvtr_bnds.c:514)
Prototype:
void SymbSrfCrvtrBndsInfoFree(SymbSrfCrvtrBndsInfoStruct *Info)
Description:
Frees a given SymbSrfCrvtrBndsInfoStruct.
Parameters:
Info: | The SymbSrfCrvtrBndsInfoStruct.
|
---|
Returned Value:
See Also:
Keywords:
(crvtr_bnds.c:211)
Prototype:
void SymbSrfCrvtrBndsSplitInfo(const SymbSrfCrvtrBndsInfoStructPtr Info,
SymbSrfCrvtrBndsInfoStructPtr Ret,
CagdSrfDirType Dir)
Description:
Splits a SymbSrfCrvtrBndsInfoStruct along the given parameter direction.
Parameters:
Info: | The SymbSrfCrvtrBndsInfoStruct.
|
---|
Ret: | The two resulting SymbSrfCrvtrBndsInfoStruct (array size 2).
|
---|
Dir: | The splitting direction.
|
---|
Returned Value:
See Also:
Keywords:
(crvtr_bnds.c:262)
Prototype:
SymbSrfCrvtrBndsInfoStructPtr SymbSrfCrvtrBndsSubInfo(
const SymbSrfCrvtrBndsInfoStructPtr Info,
IrtRType UMin,
IrtRType UMax,
IrtRType VMin,
IrtRType VMax)
Description:
Gets SymbSrfCrvtrBndsInfoStruct for a subsurface of the original surface.
Parameters:
Info: | The SymbSrfCrvtrBndsInfoStruct.
|
---|
UMin: | Minimal U value.
|
---|
UMax: | Maximal U value.
|
---|
VMin: | Minimal V value.
|
---|
VMax: | Maximal V value.
|
---|
Returned Value:
SymbSrfCrvtrBndsInfoStructPtr: The information for the subsurface.
|
---|
See Also:
Keywords:
(curvatur.c:1439)
Prototype:
CagdSrfStruct *SymbSrfCurvatureUpperBound(const CagdSrfStruct *Srf)
Description:
Computes curvature upper bound as Xi = k1^2 + k2^2, where k1 and k2 are
the principal curvatures.
Gij are the coefficients of the first fundamental form and Lij are of the
second, using non unit normal n,
( G11 L22 + G22 L11 - 2 G12 L12 )^2 - 2 |G| |L|
Xi = -----------------------------------------------
|G|^2 ||n||^2
See: "Second Order Surface Analysis Using Hybrid of Symbolic and Numeric
Operators", By Gershon Elber and Elaine Cohen, Transaction on graphics,
Vol. 12, No. 2, pp 160-178, April 1993.
Parameters:
Srf: | Surface to compute curvature bound for.
|
---|
Returned Value:
CagdSrfStruct *: A scalar field representing the curvature bound.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfMeanNumer
SymbSrfIsoFocalSrf
SymbSrfIsoDirNormalCurvatureBound
SymbSrfCrvtrBndsCalcBnds
SymbSrfCrvtrBndsCalcBnds2
Keywords:
curvature
(symb_srf.c:851)
Prototype:
CagdSrfStruct *SymbSrfDeriveRational(const CagdSrfStruct *Srf,
CagdSrfDirType Dir)
Description:
Given a rational surface - computes its derivative surface in Dir,
using the quotient rule for differentiation.
Parameters:
Srf: | A surface to differentiate.
|
---|
Dir: | Direction of differentiation.
|
---|
Returned Value:
CagdSrfStruct *: Differentiated rational surface.
|
---|
See Also:
BzrSrfDerive
BspSrfDerive
CagdSrfDerive
SymbCrvDeriveRational
Keywords:
derivatives
(curvatur.c:971)
Prototype:
CagdSrfStruct *SymbSrfDeterminant2(const CagdSrfStruct *Srf11,
const CagdSrfStruct *Srf12,
const CagdSrfStruct *Srf21,
const CagdSrfStruct *Srf22)
Description:
Computes the expression of Srf11 * Srf22 - Srf12 * Srf21, which is a
determinant of a 2 by 2 matrix.
Parameters:
Srf11, Srf12, Srf21, Srf22: | The four factors of the determinant.
|
---|
Returned Value:
CagdSrfStruct *: A scalar field representing the determinant computation.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
SymbSrfDeterminant3
SymbCrvDeterminant2
Keywords:
determinant
(crv_skel.c:983)
Prototype:
CagdSrfStruct *SymbSrfDeterminant3(const CagdSrfStruct *Srf11,
const CagdSrfStruct *Srf12,
const CagdSrfStruct *Srf13,
const CagdSrfStruct *Srf21,
const CagdSrfStruct *Srf22,
const CagdSrfStruct *Srf23,
const CagdSrfStruct *Srf31,
const CagdSrfStruct *Srf32,
const CagdSrfStruct *Srf33)
Description:
Computes the expression of a 3 by 3 determinants.
Parameters:
Srf11, Srf12, Srf13: | The nine factors of the determinant.
|
---|
Srf21, Srf22, Srf23: | "
|
---|
Srf31, Srf32, Srf33: | "
|
---|
Returned Value:
CagdSrfStruct *: A scalar field representing the determinant computation.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
SymbSrfDeterminant2
SymbCrvDeterminant3
Keywords:
determinant
(dvlp_srf.c:59)
Prototype:
CagdSrfStruct *SymbSrfDevelopableCrvOnSrf(const CagdSrfStruct *Srf,
const CagdCrvStruct *Crv,
IrtRType Scale)
Description:
Computes the developable surface of the swept tangent plane of surface,
S, along a curve on the surface C. Let N be the normal field of S. Then:
D(r, t) = C(t) + r N(t) x N'(t).
Parameters:
Srf: | The surface Crv is on.
|
---|
Crv: | The curve in the parametric domain of Srf.
|
---|
Scale: | scaling factor of the r (developing) parameter.
|
---|
Returned Value:
CagdSrfStruct *: The computed developable sheet.
|
---|
See Also:
SymbSrfNormalSrf
Keywords:
(dvlp_srf.c:129)
Prototype:
CagdSrfStruct *SymbSrfDevelopableSrfBetweenFrames(const CagdVType Frame1Pos,
const CagdVType Frame1Tan,
const CagdVType Frame1Nrml,
const CagdVType Frame2Pos,
const CagdVType Frame2Tan,
const CagdVType Frame2Nrml,
CagdRType OtherScale,
CagdRType Tension)
Description:
Computes a developable surface between given two orientation frames.
Solution is simply by building a ruled surface with the desired shape
between the two frames only to extract the developable surface between the
frame, using SymbSrfDevelopableCrvOnSrf.
Parameters:
Frame1Pos: | Position of initial location.
|
---|
Frame1Tan: | Tangent of initial location.
|
---|
Frame1Nrml: | ormal of initial location (sets the boundary at init.).
|
---|
Frame2Pos: | osition of terminal location.
|
---|
Frame2Tan: | Tangent of terminal location.
|
---|
Frame2Nrml: | ormal of terminal location (sets the boundary at init.).
|
---|
OtherScale: | ther direction scale of constructed developable surface.
|
---|
Tension: | Controls the tension of the result. A positive value.
|
---|
Returned Value:
CagdSrfStruct *: The constructed surface.
|
---|
See Also:
SymbSrfDevelopableCrvOnSrf
SymbSrfDevelopableSrfBetweenFrames2
Keywords:
(dvlp_srf.c:306)
Prototype:
CagdSrfStruct *SymbSrfDevelopableSrfBetweenFrames2(const CagdVType Frame1Pos,
const CagdVType Frame1Tan,
const CagdVType Frame1Nrml,
const CagdVType Frame2Pos,
const CagdVType Frame2Tan,
const CagdVType Frame2Nrml,
CagdRType OtherScale,
CagdRType Tension,
int DOFs)
Description:
Computes an approximated developable surface between given two
orientation frames.
Solution is based on building a curve with fixed Frenet frames at the
end locations as prescribed and minimizing the torsion in the curve.
This curve is then used to build an approximated developable sheet
with a ruling along N, its normal.
Parameters:
Frame1Pos: | Position of initial location.
|
---|
Frame1Tan: | Tangent of initial location.
|
---|
Frame1Nrml: | ormal of initial location (sets the boundary at init.).
|
---|
Frame2Pos: | Position of terminal location.
|
---|
Frame2Tan: | Tangent of terminal location.
|
---|
Frame2Nrml: | ormal of terminal location (sets the boundary at init.).
|
---|
OtherScale: | ther direction scale of constructed developable surface.
|
---|
Tension: | Controls the tension of the result. A positive value.
|
---|
DOFs: | Number of degrees of freedoms (control points to add to the
base curve, that is Bezier (using refinement).
|
---|
Returned Value:
CagdSrfStruct *: The constructed surface.
|
---|
See Also:
SymbSrfDevelopableCrvOnSrf
SymbSrfDevelopableSrfBetweenFrames
Keywords:
(distance.c:649)
Prototype:
CagdSrfStruct *SymbSrfDistCrvCrv(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
int DistType)
Description:
Given two curves, creates a bivariate scalar surface representing the
distance function square, between them.
Parameters:
Crv1, Crv2: | The two curves, Crv1(u) and Crv2(v), to form their distance
function square between them as a bivariate 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 Crv2.
4 for distance vector projected on the tangent of Crv1.
5 for distance vector projected on the tangent of Crv2.
In cases 2 to 5 the vector field is not normalized.
|
---|
Returned Value:
CagdSrfStruct *: The distance function square d2(u, v) of the distance
from Crv1(u) to Crv2(v).
|
---|
See Also:
SymbCrvCrvInter
SymbSrfDistFindPoints
MvarCrvCrvMinimalDist
Keywords:
curve curve distance
(distance.c:758)
Prototype:
CagdPtStruct *SymbSrfDistFindPoints(const CagdSrfStruct *CSrf,
CagdRType Epsilon,
CagdBType SelfInter)
Description:
Given a scalar surface representing the distance function square between
two curves, finds the zero set of the distance surface, if any, and
returns it.
The given surface is a non negative surface and zero set is its minima.
The returned points will contain the two parameter values of the two
curves that intersect in the detected zero set points.
Parameters:
CSrf: | A bivariate function that represent the distance square
function between two curves.
|
---|
Epsilon: | Accuracy control.
|
---|
SelfInter: | Should we consider self intersection? That is, is Srf
computed from a curve to itself!?
|
---|
Returned Value:
CagdPtStruct *: A list of parameter values of both curves, at all
detected intersection locations.
|
---|
See Also:
SymbSrfDistCrvCrv
SymvCrvCrvInter
Keywords:
curve curve distance
curve curve intersection
(symb_srf.c:461)
Prototype:
CagdSrfStruct *SymbSrfDotProd(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Given two surfaces - computes their dot product.
Returned surface is a scalar surface representing the dot product of the
two given surfaces.
Parameters:
Srf1, Srf2: | Two surface to multiply and compute a dot product for.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface representing the dot product of
Srf1 . Srf2.
|
---|
See Also:
SymbSrfMult
SymbSrfVecDotProd
SymbSrfScalarScale
SymbSrfMultScalar
SymbSrfInvert
SymbSrfCrossProd
SymbSrfVecCrossProd
Keywords:
product
dot product
symbolic computation
(duality.c:126)
Prototype:
CagdSrfStruct *SymbSrfDual(const CagdSrfStruct *Srf)
Description:
Computes the dual of the given syrface. The dual curve is a mapping of
the tangent planes of Srf (for which Srf is the envelop of) to points in
the dual space.
Duality is derived by computing the tangent plane "Ax + By + Cz + D = 0"
to surface Srf and mapping this plane to homogeneous point (A/D, B/D, C/D).
Parameters:
Srf: | The surface to compute its dual.
|
---|
Returned Value:
CagdSrfStruct *: The dual surface.
|
---|
See Also:
SymbCrvDual
Keywords:
(curvatur.c:802)
Prototype:
void SymbSrfFff(const CagdSrfStruct *Srf,
CagdSrfStruct **DuSrf,
CagdSrfStruct **DvSrf,
CagdSrfStruct **FffG11,
CagdSrfStruct **FffG12,
CagdSrfStruct **FffG22)
Description:
Computes coefficients of the first fundamental form of given surface Srf.
Parameters:
Srf: | Do compute the coefficients of the FFF for.
|
---|
DuSrf: | First derivative of Srf with respect to U goes to here.
|
---|
DvSrf: | First derivative of Srf with respect to V goes to here.
|
---|
FffG11: | FFF G11 scalar field.
|
---|
FffG12: | FFF G12 scalar field.
|
---|
FffG22: | FFF G22 scalar field.
|
---|
Returned Value:
See Also:
SymbSrfSff
SymbSrfTff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
Keywords:
first fundamental form
(moments.c:298)
Prototype:
CagdRType SymbSrfFirstMoment(const CagdSrfStruct *Srf, int Axis)
Description:
Computes the first moment of the given surface.
The computed moment is for the (signed) volume between the surface and
its projection onto the XY plane.
Parameters:
Srf: | Surface to compute the first moment for.
|
---|
Axis: | 1 for X, 2 for Y, 3 for Z.
|
---|
Returned Value:
CagdRType: The computed moment.
|
---|
See Also:
SymbSrfFirstMomentSrf
SymbSrfFirstMomentSrf
SymbSrfVolume
Keywords:
(moments.c:231)
Prototype:
CagdSrfStruct *SymbSrfFirstMomentSrf(const CagdSrfStruct *Srf,
int Axis,
CagdBType Integrate)
Description:
Computes the first moment function of the given surface.
The computed moment is for the (signed) volume between the surface and
its projection onto the XY plane.
Parameters:
Srf: | Surface to compute the first moment for.
|
---|
Axis: | 1 for X, 2 for Y, 3 for Z.
|
---|
Integrate: | TRUE to also integrate the resulting surface.
|
---|
Returned Value:
CagdSrfStruct *: The computed moment function.
|
---|
See Also:
SymbSrfFirstMoment
SymbSrfFirstMomentSrf
SymbSrfVolume
Keywords:
(curvatur.c:1003)
Prototype:
CagdSrfStruct *SymbSrfGaussCurvature(const CagdSrfStruct *Srf,
CagdBType NumerOnly)
Description:
Computes the Gaussian curvature of a given surface.
Parameters:
Srf: | Surface to compute Gaussian curvature for.
|
---|
NumerOnly: | f TRUE, only the numerator component of K is returned.
|
---|
Returned Value:
CagdSrfStruct *: A surface representing the Gaussian curvature field.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature
(symb_srf.c:284)
Prototype:
CagdSrfStruct *SymbSrfInvert(const CagdSrfStruct *Srf)
Description:
Given a scalar surface, returns a scalar surface representing the
reciprocal values, by making it rational (if was not one) and flipping
the numerator and the denominator.
Parameters:
Srf: | A scalar surface to compute a reciprocal value for.
|
---|
Returned Value:
CagdSrfStruct *: A rational scalar surface that is equal to the
reciprocal value of Srf.
|
---|
See Also:
SymbSrfDotProd
SymbSrfVecDotProd
SymbSrfScalarScale
SymbSrfMultScalar
SymbSrfMult
SymbSrfCrossProd
Keywords:
division
symbolic computation
reciprocal value
(curvatur.c:1523)
Prototype:
CagdSrfStruct *SymbSrfIsoDirNormalCurvatureBound(const CagdSrfStruct *Srf,
CagdSrfDirType Dir)
Description:
Computes normal curvature bound in given isoparametric direction.
This turns out to be (L11 . n) / G11 for u and (L22 . n) / G22 for v.
Herein the square of these equations is computed symbolically and
returned.
Parameters:
Srf: | To compute normal curvature in an isoparametric direction Dir.
|
---|
Dir: | Direction to compute normal curvature. Either U or V.
|
---|
Returned Value:
CagdSrfStruct *: A scalar field representing the normal curvature
square of Srf in dirction Dir.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfMeanNumer
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfCrvtrBndsCalcBnds
SymbSrfCrvtrBndsCalcBnds2
Keywords:
curvature
(curvatur.c:1306)
Prototype:
CagdSrfStruct *SymbSrfIsoFocalSrf(const CagdSrfStruct *Srf,
CagdSrfDirType Dir)
Description:
Computes a focal surface for a principal curvature in an isoparametric
direction. For the u isoparametric direction,
1 G11
F(u, v) = n(u, v) --------- = n(u, v) ---
u
k (u, v) L11
n
Because Lii also has n(u,v) we can use the nonnormalized surface normal
to compute F(u, v), which is therefore computable and representable.
Parameters:
Srf: | Surface to compute iso focal surface.
|
---|
Dir: | Direction to compute iso focal surface. Either U or V.
|
---|
Returned Value:
CagdSrfStruct *: A surface representing the iso focal surface.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfMeanNumer
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature
focal surface
evolute
(orthotom.c:336)
Prototype:
IPPolygonStruct *SymbSrfIsocline(const CagdSrfStruct *Srf,
const CagdVType VDir,
CagdRType Theta,
CagdRType SubdivTol,
CagdBType Euclidean)
Description:
Computes the isocline edges of the given surfaces, orthographically
seen from the given view direction VDir, at an inclination angle of Theta
degrees.
The isocline is a curve with a fixed angle between the surface normal
and the viewing direction. An angle of 90 degrees yields the silhouettes.
Computed as the zero set of:
()^2 - (Cos(Theta))^2
Parameters:
Srf: | To compute its isocline edges.
|
---|
VDir: | View direction vector (a unit vector).
|
---|
Theta: | The fixed angle between the viewing direction and the
surface normal, in degrees.
An angle of 90 degrees yields the silhouettes.
|
---|
SubdivTol: | Accuracy of computation.
|
---|
Euclidean: | If TRUE, returns the isoclines in Euclidean space.
Otherwise, the isocline edges are returned in the
Parametric domain.
|
---|
Returned Value:
IPPolygonStruct *: The isoclines as piecewise linear edges.
|
---|
See Also:
SymbSrfOrthotomic
SymbSrfSilhouette
UserMoldReliefAngle2Srf
Keywords:
(prm_dmn.c:679)
Prototype:
CagdRType SymbSrfJacobianImprove(CagdSrfStruct *Srf,
CagdRType StepSize,
int MaxIter)
Description:
Numerically iterate and improve, in place, the ratio between the minimal
and maximal Jacobians by shift around interior control points.
Parameters:
Srf: | To try and improve its parameterizations, in place. Can have
negative Jacobian to begin with (that hopefully will be corrected
here). Only XY coordinates are considered, in the XY plane.
|
---|
StepSize: | Marching amount along the gradient.
Set to a non positive value to automatically estimate the step.
|
---|
MaxIter: | The number of iterations to apply.
|
---|
Returned Value:
CagdRType: The final ratio between the minimal and maximal jacobian.
A negative ratio clearly means the surface self intersects
|
---|
See Also:
Symb2DSrfJacobian
Keywords:
(curvatur.c:1261)
Prototype:
CagdSrfStruct *SymbSrfMeanCurvatureSqr(const CagdSrfStruct *Srf)
Description:
Computes the Mean curvature square of a given surface
H^2 = ((k1 + k2) / 2)^2.
Parameters:
Srf: | Surface to compute Mean curvature square for.
|
---|
Returned Value:
CagdSrfStruct *: A surface representing the Mean curvature square field.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanNumer
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature
(curvatur.c:1148)
Prototype:
CagdSrfStruct *SymbSrfMeanEvolute(const CagdSrfStruct *Srf)
Description:
Computes an "evolute surface" to a given surface using twice the Mean
curvature as magnitude.
1 |G|
E(u, v) = n(u, v) --------- = n(u, v) ---------------------------------
2 H(u, v) ( G11 L22 + G22 L11 - 2 G12 L12 )
Becuase H(u,v) also has n(u,v) we can use the nonnormalized surface normal
to compute E(u, v), which is therefore computable and representable.
Parameters:
Srf: | Surface to compute mean evolute.
|
---|
Returned Value:
CagdSrfStruct *: A surface representing the mean evolute surface.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanCurvatureSqr
SymbSrfMeanNumer
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature
evolute
(curvatur.c:1089)
Prototype:
CagdSrfStruct *SymbSrfMeanNumer(const CagdSrfStruct *Srf)
Description:
Computes the numerator expression of the Mean as:
H(u, v) = G11 L22 + G22 L11 - 2 G12 L12
Parameters:
Srf: | Surface to compute mean evolute.
|
---|
Returned Value:
CagdSrfStruct *: A surface representing the mean evolute surface.
|
---|
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanCurvatureSqr
SymbSrfMeanEvolute
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
Keywords:
curvature
evolute
(symb_srf.c:1433)
Prototype:
CagdSrfStruct *SymbSrfMergeScalar(const CagdSrfStruct *SrfW,
const CagdSrfStruct *SrfX,
const CagdSrfStruct *SrfY,
const CagdSrfStruct *SrfZ)
Description:
Given a set of scalar surfaces, treat them as coordinates into a new
surface.
Assumes at least SrfX is not NULL in which a scalar surface is returned.
Assumes SrfX/Y/Z/W are either E1 or P1 in which the weights are assumed
to be identical and can be ignored if SrfW exists or copied otherwise.
Parameters:
SrfW: | The weight component of new constructed surface, if have any.
|
---|
SrfX: | The X component of new constructed surface.
|
---|
SrfY: | The Y component of new constructed surface, if have any.
|
---|
SrfZ: | The Z component of new constructed surface, if have any.
|
---|
Returned Value:
CagdSrfStruct *: A new surface constructed from given scalar surfaces.
|
---|
See Also:
SymbSrfSplitScalar
SymbCrvMergeScalar
Keywords:
merge
symbolic computation
(symb_srf.c:1344)
Prototype:
CagdSrfStruct *SymbSrfMergeScalarN(CagdSrfStruct * const *SrfVec,
int NumSrfs)
Description:
Given a vector of scalar surfaces, treat them as coordinates into a new
vector surface.
Assumes at least SrfVec[1] is not NULL in which case a scalar surface is
returned.
Assumes SrfVec[i] are either E1 or P1 in which case the weights are
assumed to be identical and can be simply copied if exist.
Parameters:
SrfVec: | A vector of scalar surfaces, SrfVec[0] holds weights if any.
|
---|
NumSrfs: | Number of surfaces in CrvVec.
|
---|
Returned Value:
CagdSrfStruct *: A new surface constructed from given scalar surfaces.
|
---|
See Also:
SymbSrfMergeScalar
SymbSrfSplitScalarN
Keywords:
merge
symbolic computation
(symb_srf.c:205)
Prototype:
CagdSrfStruct *SymbSrfMult(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Given two surfaces - multiply them coordinate-wise.
The two surfaces are promoted to same point type before the
multiplication can take place.
Parameters:
Srf1, Srf2: | Two surface to multiply coordinate-wise.
|
---|
Returned Value:
CagdSrfStruct *: The product of Srf1 * Srf2 coordinate-wise.
|
---|
See Also:
SymbSrfDotProd
SymbSrfVecDotProd
SymbSrfScalarScale
SymbSrfMultScalar
SymbSrfInvert
Keywords:
product
symbolic computation
(symb_srf.c:391)
Prototype:
CagdSrfStruct *SymbSrfMultScalar(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Given two surface - a vector curve Srf1 and a scalar curve Srf2, multiply
all Srf1's coordinates by the scalar curve Srf2.
Returned surface is a surface representing the product of the two given
surfaces.
Parameters:
Srf1, Srf2: | Two surfaces to multiply.
|
---|
Returned Value:
CagdSrfStruct *: A surface representing the product of Srf1 and Srf2.
|
---|
See Also:
SymbSrfDotProd
SymbSrfVecDotProd
SymbSrfMult
SymbSrfCrossProd
SymbCrvMultScalar
Keywords:
product
symbolic computation
(symb_srf.c:942)
Prototype:
CagdSrfStruct *SymbSrfNormalSrf(const CagdSrfStruct *Srf)
Description:
Given a surface - compute its unnormalized normal vector field surface, as
the cross product if its partial derivatives.
Parameters:
Srf: | To compute an unnormalized normal vector field for.
|
---|
Returned Value:
CagdSrfStruct *: A vector field representing the unnormalized normal
vector field of Srf.
|
---|
See Also:
Symb2DSrfJacobian
SymbSrfNormalSrfReversed
Keywords:
normal
symbolic computation
(symb_srf.c:974)
Prototype:
CagdSrfStruct *SymbSrfNormalSrfReversed(const CagdSrfStruct *Srf)
Description:
Given a surface - compute its unnormalized normal vector field surface, as
the cross product if its partial derivatives.
Here, the normal field is reversed, compared to SymbSrfNormalSrf.
Parameters:
Srf: | To compute an unnormalized normal vector field for.
|
---|
Returned Value:
CagdSrfStruct *: A vector field representing the unnormalized normal
vector field of Srf.
|
---|
See Also:
Symb2DSrfJacobian
SymbSrfNormalSrf
Keywords:
normal
symbolic computation
(offset.c:499)
Prototype:
CagdSrfStruct *SymbSrfOffset(const CagdSrfStruct *CSrf, CagdRType OffsetDist)
Description:
Given a surface and an offset amount OffsetDist, returns an approximation
to the offset surface by offseting the control mesh in the normal
direction.
Parameters:
CSrf: | To approximate its offset surface with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
Returned Value:
CagdSrfStruct *: An approximation to the offset surface.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfSubdivOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
Keywords:
offset
(orthotom.c:117)
Prototype:
CagdSrfStruct *SymbSrfOrthotomic(const CagdSrfStruct *Srf,
const CagdPType P,
CagdRType K)
Description:
Computes the K-orthotomic of a surface with respect to point P:
P + K < (S(u,v) - P), N(u,v) > N(u,v)
See "Fundamentals of Computer Aided Geometric Design, by J. Hoschek and
and D. Lasser.
Parameters:
Srf: | To compute its K-orthotomic
|
---|
P: | The points to which the K-orthotomic is computed for Srf for.
|
---|
K: | The magnitude of the orthotomic function.
|
---|
Returned Value:
CagdSrfStruct *: The K-orthotomic
|
---|
See Also:
SymbCrvOrthotomic
SymbSrfSilhouette
Keywords:
(orthotom.c:263)
Prototype:
IPPolygonStruct *SymbSrfPolarSilhouette(const CagdSrfStruct *Srf,
const CagdVType VDir,
CagdRType SubdivTol,
CagdBType Euclidean)
Description:
Computes the polar silhouette edges of the given surfaces, along axis
VDir. Equal to < S(u, v) x N(u, v), VDir > = 0.
Parameters:
Srf: | To compute its polar silhouette edges.
|
---|
VDir: | Axis of polar silhouette.
|
---|
SubdivTol: | Accuracy of computation.
|
---|
Euclidean: | If TRUE, returns the silhouettes in Euclidean space.
Otherwise, the silhouette edges are returned in the
Parametric domain.
|
---|
Returned Value:
IPPolygonStruct *: The silhouettes as piecewise linear edges.
|
---|
See Also:
SymbSrfOrthotomic
SymbSrfSilhouette
SymbSrfIsocline
Keywords:
(crv_skel.c:1556)
Prototype:
CagdSrfStruct *SymbSrfPtBisectorSrf3D(const CagdSrfStruct *CSrf,
const CagdPType Pt)
Description:
Computes the bisector surface of a surface in arbitrary general three
space position and a point in three space.
Solution bisector surface R is derived by solving the three linear
equations of (S for Srf, P for Pt):
< dS/du, R > = < dS/du, S >
< dS/dv, R > = < dS/dv, S >
< S - P, R > = (< S, S > - < P, P >) / 2
Parameters:
CSrf: | Three space surface too compute its bisector surface with Pt.
|
---|
Pt: | A point in three space to compute its bisector with Srf.
|
---|
Returned Value:
CagdSrfStruct *: The bisector surface.
|
---|
See Also:
SymbCrvDiameter
SymbCrvCnvxHull
SymbCrvBisectorsSrf
SymbCrvCrvBisectorSrf3D
Keywords:
bisector
(symb_srf.c:812)
Prototype:
CagdSrfStruct *SymbSrfRtnlMult(const CagdSrfStruct *Srf1X,
const CagdSrfStruct *Srf1W,
const CagdSrfStruct *Srf2X,
const CagdSrfStruct *Srf2W,
CagdBType OperationAdd)
Description:
Given two surfaces - multiply them using the quotient product rule:
X = X1 W2 +/- X2 W1
All provided surfaces are assumed to be non rational scalar surfaces.
Returned is a non rational scalar surface (CAGD_PT_E1_TYPE).
Parameters:
Srf1X: | Numerator of first surface.
|
---|
Srf1W: | Denominator of first surface. Can be NULL.
|
---|
Srf2X: | Numerator of second surface.
|
---|
Srf2W: | Denominator of second surface. Can be NULL.
|
---|
OperationAdd: | TRUE for addition, FALSE for subtraction.
|
---|
Returned Value:
CagdSrfStruct *: The result of Srf1X Srf2W +/- Srf2X Srf1W.
|
---|
See Also:
SymbSrfDotProd
SymbSrfVecDotProd
SymbSrfScalarScale
SymbSrfMultScalar
SymbSrfInvert
Keywords:
product
symbolic computation
(symb_srf.c:347)
Prototype:
CagdSrfStruct *SymbSrfScalarScale(const CagdSrfStruct *Srf, CagdRType Scale)
Description:
Given a surface, scale it by Scale.
Parameters:
Srf: | A surface to scale by magnitude Scale.
|
---|
Scale: | Scaling factor.
|
---|
Returned Value:
CagdSrfStruct *: A surfaces scaled by Scale compared to Srf.
|
---|
See Also:
SymbSrfDotProd
SymbSrfVecDotProd
SymbSrfMult
SymbSrfMultScalar
SymbSrfInvert
SymbSrfCrossProd
Keywords:
scaling
symbolic computation
(moments.c:403)
Prototype:
CagdRType SymbSrfSecondMoment(const CagdSrfStruct *Srf, int Axis1, int Axis2)
Description:
Computes the second moment of the given surface.
The computed moment is for the (signed) volume between the surface and
its projection onto the XY plane.
Parameters:
Srf: | Surface to compute the second moment for.
|
---|
Axis1, Axis2: | 1 for X, 2 for Y, 3 for Z.
|
---|
Returned Value:
CagdRType: The computed moment.
|
---|
See Also:
SymbSrfSecondMomentSrf
SymbSrfFirstMoment
SymbSrfVolume
Keywords:
(moments.c:337)
Prototype:
CagdSrfStruct *SymbSrfSecondMomentSrf(const CagdSrfStruct *Srf,
int Axis1,
int Axis2,
CagdBType Integrate)
Description:
Computes the second moment function of the given surface.
The computed moment is for the (signed) volume between the surface and
its projection onto the XY plane.
Parameters:
Srf: | Surface to compute the first moment for.
|
---|
Axis1, Axis2: | 1 for X, 2 for Y, 3 for Z.
|
---|
Integrate: | TRUE to also integrate the resulting surface.
|
---|
Returned Value:
CagdSrfStruct *: The computed moment function.
|
---|
See Also:
SymbSrfFirstMoment
SymbSrfFirstMomentSrf
SymbSrfVolumeSrf
Keywords:
(curvatur.c:842)
Prototype:
void SymbSrfSff(const CagdSrfStruct *DuSrf,
const CagdSrfStruct *DvSrf,
CagdSrfStruct **SffL11,
CagdSrfStruct **SffL12,
CagdSrfStruct **SffL22,
CagdSrfStruct **SNormal)
Description:
Computes coefficients of the second fundamental form of given surface Srf
that is prescribed via its two partial derivatives DuSrf and DvSrf.
These coefficients are using non normalized normal that is also returned.
Parameters:
DuSrf: | First derivative of Srf with respect to U.
|
---|
DvSrf: | First derivative of Srf with respect to V.
|
---|
SffL11: | SFF L11 scalar field returned herein.
|
---|
SffL12: | SFF L12 scalar field returned herein.
|
---|
SffL22: | SFF L22 scalar field returned herein.
|
---|
SNormal: | Unnormalized normal vector field returned herein.
|
---|
Returned Value:
See Also:
SymbSrfFff
SymbSrfTff
SymbSrfDeterminant2
SymbSrfGaussCurvature
SymbSrfMeanEvolute
SymbSrfMeanCurvatureSqr
SymbSrfIsoFocalSrf
SymbSrfCurvatureUpperBound
SymbSrfIsoDirNormalCurvatureBound
Keywords:
second fundamental form
(orthotom.c:194)
Prototype:
IPPolygonStruct *SymbSrfSilhouette(const CagdSrfStruct *Srf,
const CagdVType VDir,
CagdRType SubdivTol,
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).
|
---|
SubdivTol: | Accuracy of computation. 0.001 will be a good start.
|
---|
Euclidean: | If TRUE, returns the silhouettes in Euclidean space.
Otherwise, the silhouette edges are returned in the
Parametric domain.
|
---|
Returned Value:
IPPolygonStruct *: The silhouettes as piecewise linear edges.
|
---|
See Also:
SymbSrfOrthotomic
SymbSrfIsocline
SymbSrfPolarSilhouette
MvarSrfSilhouette
Keywords:
(prm_dmn.c:605)
Prototype:
void SymbSrfSmoothInternalCtlPts(CagdSrfStruct *Srf, CagdRType Weight)
Description:
Mesh smoothing - move all internal points toward the average of their
neigbors.
Parameters:
Srf: | To smooth its internal vcontrol points.
|
---|
Weight: | Of movement. Zero to move nothing. 1.0 to move to average pt.
|
---|
Returned Value:
See Also:
Keywords:
(symb_srf.c:1282)
Prototype:
void SymbSrfSplitScalar(const CagdSrfStruct *Srf,
CagdSrfStruct **SrfW,
CagdSrfStruct **SrfX,
CagdSrfStruct **SrfY,
CagdSrfStruct **SrfZ)
Description:
Given a surface splits it to its scalar component surfaces. Ignores all
dimensions beyond the third, Z, dimension.
Parameters:
Srf: | Surface to split.
|
---|
SrfW: | The weight component of Srf, if have any.
|
---|
SrfX: | The X component of Srf.
|
---|
SrfY: | The Y component of Srf, if have any.
|
---|
SrfZ: | The Z component of Srf, if have any.
|
---|
Returned Value:
See Also:
SymbSrfMergeScalar
SymbSrfSplitScalar
SymbSrfSplitScalarN
Keywords:
split
symbolic computation
(symb_srf.c:1226)
Prototype:
void SymbSrfSplitScalarN(const CagdSrfStruct *Srf,
CagdSrfStruct *Srfs[CAGD_MAX_PT_SIZE])
Description:
Given a surface, splits it to its scalar component surfaces.
Parameters:
Srf: | Surface to split.
|
---|
Srfs: | A vector of scalar surfaces - components of Srf.
A vector of dynamically allocated scalar srfs.
|
---|
Returned Value:
See Also:
SymbSrfSplitScalar
SymbSrfMergeScalarN
Keywords:
split
symbolic computation
(symb_srf.c:110)
Prototype:
CagdSrfStruct *SymbSrfSub(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2)
Description:
Given two surfaces - subtract them coordinate-wise.
The two surfaces are promoted to same point type before the
multiplication can take place. Furthermore, order and continuity are
matched as well.
Parameters:
Srf1, Srf2: | Two surface to subtract coordinate-wise.
|
---|
Returned Value:
CagdSrfStruct *: The difference of Srf1 - Srf2 coordinate-wise.
|
---|
See Also:
SymbSrfAdd
SymbMeshAddSub
SymbSrfMult
Keywords:
subtraction
symbolic computation
(offset.c:621)
Prototype:
CagdSrfStruct *SymbSrfSubdivOffset(const CagdSrfStruct *CSrf,
CagdRType OffsetDist,
CagdRType Tolerance)
Description:
Given a surface and an offset amount OffsetDist, returns an approximation
to the offset surface by offseting the control mesh in the normal
direction.
If resulting offset is not satisfying the required tolerance the surface
is subdivided and the algorithm recurses on both parts.
Parameters:
CSrf: | To approximate its offset surface with distance OffsetDist.
|
---|
OffsetDist: | Amount of offset. Negative denotes other offset direction.
|
---|
Tolerance: | Accuracy control.
|
---|
Returned Value:
CagdSrfStruct *: An approximation to the offset surface, to within
Tolerance.
|
---|
See Also:
SymbCrvOffset
SymbCrvSubdivOffset
SymbSrfOffset
SymbCrvAdapOffset
SymbCrvAdapOffsetTrim
SymbCrvLeastSquarOffset
SymbCrvMatchingOffset
Keywords:
offset
(curvatur.c:892)
Prototype:
void SymbSrfTff(const CagdSrfStruct *Srf,
CagdSrfStruct **TffL11,
CagdSrfStruct **TffL12,
CagdSrfStruct **TffL22)
Description:
Computes coefficients of the third fundamental form of given surface Srf.
These coefficients are using non normalized normal that is also returned.
The coefficients of the TFF equal:
d m d m d m d m
< ---, --- > < m, m > - < m, --- > < m, --- >
d n d n dui duj dui duj
Lij = < --- ,--- > = ---------------------------------------------
dui duj < m, m > ^ 2
where n is the unit normal of Srf and m = dSrf/dui x dSrf/duj, the
unnormalized normal field of Srf.
Parameters:
Srf: | Surface to compute the coefficents of the TFF for.
|
---|
TffL11: | TFF L11 scalar field returned herein.
|
---|
TffL12: | TFF L12 scalar field returned herein.
|
---|
TffL22: | TFF L22 scalar field returned herein.
|
---|
Returned Value:
See Also:
SymbSrfFff
SymbSrfSff
SymbSrfDeterminant2
Keywords:
third fundamental form
(symb_srf.c:698)
Prototype:
CagdSrfStruct *SymbSrfVecCrossProd(const CagdSrfStruct *Srf,
const CagdVType Vec)
Description:
Given a surface and a vector - computes their cross product.
Returned surface is a scalar surface representing the cross product of
the surface and vector.
Parameters:
Srf: | Surface to multiply and compute a cross product for.
|
---|
Vec: | Vector to cross product Srf with.
|
---|
Returned Value:
CagdSrfStruct *: A vector surface representing the cross product of
Srf x Vec.
|
---|
See Also:
SymbSrfDotProd
SymbSrfVecDotProd
SymbSrfScalarScale
SymbSrfMultScalar
SymbSrfInvert
SymbSrfCrossProd
Keywords:
product
cross product
symbolic computation
(symb_srf.c:514)
Prototype:
CagdSrfStruct *SymbSrfVecDotProd(const CagdSrfStruct *Srf,
const CagdVType Vec)
Description:
Given a surface and a vector - computes their dot product.
Returned surface is a scalar surface representing the dot product.
Parameters:
Srf: | Surface to multiply and compute a dot product for.
|
---|
Vec: | Vector to project Srf onto.
|
---|
Returned Value:
CagdSrfStruct *: A scalar surface representing the dot product of
Srf . Vec.
|
---|
See Also:
SymbSrfDotProd
SymbSrfMult
SymbSrfScalarScale
SymbSrfMultScalar
SymbSrfInvert
SymbSrfCrossProd
SymbSrfVecCrossProd
Keywords:
product
dot product
symbolic computation
(moments.c:99)
Prototype:
CagdRType SymbSrfVolume1(const CagdSrfStruct *Srf)
Description:
A function to compute the enclosed volume by the given surface.
The computed volume is the (signed) volume between the surface and its
projection onto the XY plane.
Parameters:
Srf: | Surface to computes its enclosed volume.
|
---|
Returned Value:
CagdRType: The enclosed volume.
|
---|
See Also:
SymbSrfVolume1Srf
SymbSrfVolume2Srf
SymbSrfVolume2
Keywords:
(moments.c:30)
Prototype:
CagdSrfStruct *SymbSrfVolume1Srf(const CagdSrfStruct *Srf, CagdBType Integrate)
Description:
A function to compute the enclosed volume function of the given surface.
The computed volume is the (signed) volume between the surface and its
projection onto the XY plane.
Parameters:
Srf: | Surface to computes its enclosed volume.
|
---|
Integrate: | TRUE to also integrate the resulting surface.
|
---|
Returned Value:
CagdSrfStruct *: Integral volume function.
|
---|
See Also:
SymbSrfVolume1
SymbSrfVolume2Srf
SymbSrfVolume2
Keywords:
(moments.c:188)
Prototype:
CagdRType SymbSrfVolume2(const CagdSrfStruct *Srf)
Description:
A function to compute the enclosed volume by the given surface.
The computed volume is the (signed) volume occupied by all rays from the
origin to the surface.
Parameters:
Srf: | Surface to computes its enclosed volume.
|
---|
Returned Value:
CagdRType: The enclosed volume.
|
---|
See Also:
SymbSrfVolume1Srf
SymbSrfVolume2Srf
SymbSrfVolume2
Keywords:
(moments.c:139)
Prototype:
CagdSrfStruct *SymbSrfVolume2Srf(const CagdSrfStruct *Srf,
CagdBType Integrate)
Description:
A function to compute the enclosed volume function of the given surface.
The computed volume is the (signed) volume occupied by all rays from the
origin to the surface.
Parameters:
Srf: | Surface to computes its enclosed volume.
|
---|
Integrate: | TRUE to also integrate the resulting surface.
|
---|
Returned Value:
CagdSrfStruct *: Integral volume function.
|
---|
See Also:
SymbSrfVolume2
SymbSrfVolume1Srf
SymbSrfVolume1
Keywords:
(constrct.c:160)
Prototype:
CagdSrfStruct *SymbSwungAlgSumSrf(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2)
Description:
Adds up algebraically the given two curves, C1(r) and C2(t), as swung
surfaces (The NURBs book', by Piegl and Tiller, pp 455):
S(r, t) = (x1(r) x2(t), x1(r) y2(t), y1(r))
Parameters:
Crv1, Crv2: | Two curves to sum algebraically, forming a swung surface.
|
---|
Returned Value:
CagdSrfStruct *: A surface represent their swung algebraic sum.
|
---|
See Also:
SymbAlgebraicProdSrf
SymbAlgebraicSumSrf
Keywords:
(nrmlcone.c:136)
Prototype:
const SymbNormalConeStruct *SymbTangentConeForCrvMalloc(const CagdCrvStruct
*Crv,
CagdBType Planar)
Description:
Computes a tangent cone for a given curve, by examine the control polygon
of the curve and deriving its angular span.
Parameters:
Crv: | To compute a tangent cone for.
|
---|
Planar: | f TRUE, only the X and Y coefficients are considered.
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed tangent cone
|
---|
See Also:
SymbNormalConeOverlap
SymbNormalConeForSrf
Keywords:
tangents
tangent bound
(nrmlcone.c:45)
Prototype:
const SymbNormalConeStruct *SymbTangentConeForCrvToData(const CagdCrvStruct
*Crv,
CagdBType Planar,
SymbNormalConeStruct
*TangentCone)
Description:
Computes a tangent cone for a given curve, by examine the control polygon
of the curve and deriving its angular span.
Parameters:
Crv: | To compute a tangent cone for.
|
---|
Planar: | f TRUE, only the X and Y coefficients are considered.
|
---|
TangentCone: | The computed tangent cone
|
---|
Returned Value:
const SymbNormalConeStruct *: The computed tangent cone
|
---|
See Also:
SymbNormalConeOverlap
SymbNormalConeForSrf
Keywords:
tangents
tangent bound
(crv_tans.c:140)
Prototype:
CagdPtStruct *SymbTangentToCrvAtTwoPts(const CagdCrvStruct *CCrv,
CagdRType SubdivTol)
Description:
Computes all the lines that are tangent to Crv at two locations.
Returned is a list of parameter locations' pairs where the tangent is
tangent to the curve.
The tangents are computed as two sets of contours of the solution to
the two equations of:
1. [ C(t) - C(r) ] || C'(t)
2. [ C(t) - C(r) ] || C'(r)
and computing all the intersection points between these two sets of
contours.
Note that since equations 1 and 2 are symmetric, one only needs to solve
for once and flip the notation of r and t.
Parameters:
CCrv: | The curve to compute all tangent lines at two locations.
|
---|
SubdivTol: | f numeric search for the zero set (for surface subdivision).
A positive value (0.01 is a good start).
|
---|
Returned Value:
CagdPtStruct *: A list of parameter location on Crv with tangent lines
through Pt. Parameters are save in the X & Y coordinate.
|
---|
See Also:
SymbCrvPtTangents
SymbCircTanTo2Crvs
SymbCrvCnvxHull
SymbCrvDiameter
MvarMVTriTangentLine
Keywords:
(smp_skel.c:915)
Prototype:
CagdSrfStruct *SymbTorusPointBisect(const CagdVType TrsCntr,
const CagdVType TrsDir,
CagdRType TrsMajorRad,
CagdRType TrsMinorRad,
const CagdPType Pt)
Description:
Compute the bisector surface between a torus and a point.
Parameters:
TrsCntr: | Center of constructed torus.
|
---|
TrsDir: | Axis of symmetry of constructed torus.
|
---|
TrsMajorRad: | ajor radius of constructed torus.
|
---|
TrsMinorRad: | inor radius of constructed torus.
|
---|
Pt: | Direction of line from origin.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPtCrvBisectOnSphere
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbConePlaneBisect
SymbCylinPlaneBisect
SymbSpherePlaneBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbTorusSphereBisect
SymbTorusTorusBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
Keywords:
bisectors
skeleton
(smp_skel.c:1502)
Prototype:
CagdSrfStruct *SymbTorusSphereBisect(const CagdVType TrsCntr,
const CagdVType TrsDir,
CagdRType TrsMajorRad,
CagdRType TrsMinorRad,
const CagdVType SprCntr,
CagdRType SprRad)
Description:
Compute the bisector surface between a torus and a sphere.
The computation is reduced to that of a bisector between a point and a
torus, that has a rational form.
Parameters:
TrsCntr: | Center of constructed torus.
|
---|
TrsDir: | Axis of symmetry of constructed torus.
|
---|
TrsMajorRad: | ajor radius of constructed torus.
|
---|
TrsMinorRad: | inor radius of constructed torus.
|
---|
SprCntr: | Center location of the sphere. Must be in northern
hemisphere (positive Z coefficient).
|
---|
SprRad: | Radius of sphere.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbPlaneLineBisect
SymbCylinPlaneBisect
SymbConePlaneBisect
SymbSpherePlaneBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
SymbTorusTorusBisect
Keywords:
bisectors
skeleton
(smp_skel.c:1555)
Prototype:
CagdSrfStruct *SymbTorusTorusBisect(const CagdVType Trs1Cntr,
const CagdVType Trs1Dir,
CagdRType Trs1MajorRad,
const CagdVType Trs2Cntr,
const CagdVType Trs2Dir,
CagdRType Trs2MajorRad,
CagdRType Alpha)
Description:
Compute the bisector surface between two tori.
The Bisector is computed as the solution of the following three
linear equations:
< B - C1(u), C1'(u) > = 0,
< B - C2(v), C2'(V) > = 0,
< B, C2(u) - C1(v) > = (C2^2(u) - C1^2(v)) - Alpha) / 2,
where C1 and C2 are the circular main axes of the tori and R1 and R2 are
their minor radii.
Parameters:
Trs1Cntr: | Center of constructed torus1
|
---|
Trs1Dir: | Axis of symmetry of constructed torus1.
|
---|
Trs1MajorRad: | ajor radius of constructed torus1.
|
---|
Trs2Cntr: | Center of constructed torus2.
|
---|
Trs2Dir: | Axis of symmetry of constructed torus2.
|
---|
Trs2MajorRad: | ajor radius of constructed torus2.
|
---|
Alpha: | Some blend factor that allows one to shift the bisector
a bit. Zero for no effect and +/- to shift the bisector
toward one of the input surfaces.
|
---|
Returned Value:
CagdSrfStruct *: Constructed bisector surface.
|
---|
See Also:
SymbPlanePointBisect
SymbCylinPointBisect
SymbConePointBisect
SymbSpherePointBisect
SymbTorusPointBisect
SymbConeLineBisect
SymbSphereLineBisect
SymbPlaneLineBisect
SymbCylinPlaneBisect
SymbConePlaneBisect
SymbSpherePlaneBisect
SymbCylinSphereBisect
SymbSphereSphereBisect
SymbConeSphereBisect
SymbConeConeBisect
SymbConeConeBisect2
SymbConeCylinBisect
SymbCylinCylinBisect
SymbTorusSphereBisect
Keywords:
bisectors
skeleton
(morphing.c:58)
Prototype:
CagdCrvStruct *SymbTwoCrvsMorphing(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType Blend)
Description:
Given two compatible curves (See function CagdMakeCrvsCompatible),
computes a convex blend between them according to Blend which must be
between zero and one.
Returned is the new blended curve.
Parameters:
Crv1, Crv2: | The two curves to blend.
|
---|
Blend: | A parameter between zero and one
|
---|
Returned Value:
CagdCrvStruct *: Crv2 * Blend + Crv1 * (1 - Blend).
|
---|
See Also:
SymbTwoCrvsMorphingCornerCut
SymbTwoCrvsMorphingMultiRes
SymbTwoSrfsMorphing
TrivTwoTVsMorphing
Keywords:
morphing
(morphing.c:128)
Prototype:
CagdCrvStruct *SymbTwoCrvsMorphingCornerCut(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType MinDist,
CagdBType SameLength,
CagdBType FilterTangencies)
Description:
Given two compatible curves (See function CagdMakeCrvsCompatible),
computes a morph between them using corner cutting approach.
Returned is the new blended curve.
Parameters:
Crv1, Crv2: | The two curves to blend.
|
---|
MinDist: | Minimal maximum distance between adjacent curves to make
sure motion is visible. The curves will move at most twice
that much in their maximal distance (roughly).
|
---|
SameLength: | If TRUE, length of curves is preserved, otherwise BBOX is.
|
---|
FilterTangencies: | f TRUE, attempt is made to eliminate the intermediate
line representation.
|
---|
Returned Value:
CagdCrvStruct *: The blended curve.
|
---|
See Also:
SymbTwoCrvsMorphing
SymbTwoCrvsMorphingMultiRes
SymbTwoSrfsMorphing
TrivTwoTVsMorphing
Keywords:
morphing
(morphing.c:316)
Prototype:
CagdCrvStruct *SymbTwoCrvsMorphingMultiRes(const CagdCrvStruct *Crv1,
const CagdCrvStruct *Crv2,
CagdRType BlendStep)
Description:
Given two compatible curves (See function CagdMakeCrvsCompatible),
computes a morph between them using multiresolution decomposition.
Returned is a list of new blended curves.
Parameters:
Crv1, Crv2: | The two curves to blend.
|
---|
BlendStep: | A step size of the blending.
|
---|
Returned Value:
CagdCrvStruct *: A list of blended curves.
|
---|
See Also:
SymbTwoCrvsMorphing
SymbTwoCrvsMorphingCornerCut
SymbTwoSrfsMorphing
TrivTwoTVsMorphing
Keywords:
morphing
(morphing.c:760)
Prototype:
CagdSrfStruct *SymbTwoSrfsMorphing(const CagdSrfStruct *Srf1,
const CagdSrfStruct *Srf2,
CagdRType Blend)
Description:
Given two compatible surfaces (See function CagdMakeSrfsCompatible),
computes a convex blend between them according to Blend which must be
between zero and one.
Returned is the new blended surface.
Parameters:
Srf1, Srf2: | The two surfaces to blend.
|
---|
Blend: | A parameter between zero and one
|
---|
Returned Value:
CagdSrfStruct *: Srf2 * Blend + Srf1 * (1 - Blend).
|
---|
See Also:
SymbTwoCrvsMorphing
SymbTwoCrvsMorphingCornerCut
SymbTwoCrvsMorphingMultiRes
TrivTwoTVsMorphing
Keywords:
morphing
(ffptdist.c:44)
Prototype:
CagdRType *SymbUniformAprxPtOnCrvDistrib(const CagdCrvStruct *Crv,
CagdBType ParamUniform,
int n)
Description:
Computes a stocastically uniform distribution of points on a curve.
n points are placed at approximately equal distance from each other
along Crv's arc length. This distribution converges to a uniform
distribution as n approached infinity.
Parameters:
Crv: | To place n points along, uniformly.
|
---|
ParamUniform: | If TRUE, produces a distribution uniform in parametric
space. If FALSE, uniform in Euclidean space.
|
---|
n: | Number of points to distribute along Crv.
|
---|
Returned Value:
CagdRType *: A dynamically allocated vector of size n, of the parameter
values of the distributed points.
|
---|
See Also:
SymbUniformAprxPtOnSrfDistrib
Keywords:
uniform distribution
(ffptdist.c:119)
Prototype:
CagdUVType *SymbUniformAprxPtOnSrfDistrib(
const CagdSrfStruct *Srf,
CagdBType ParamUniform,
int n,
SymbUniformAprxSrfPtImportanceFuncType EvalImportance)
Description:
Computes a stochastically uniform distribution of points on a surface.
n points are placed at approximately equal distance from each other on
Srf's surface. This distribution converges to a uniform distribution as
n approached infinity.
Parameters:
Srf: | To place n points on, uniformly.
|
---|
ParamUniform: | If TRUE, produces a distribution uniform in parametric
space. If FALSE, uniform in Euclidean space.
|
---|
n: | Number of points to distribute along Srf.
|
---|
EvalImportance: | Optional function to evaluate the importance of each
selected points and if returning FALSE, that point is
purged. NULL to disable.
|
---|
Returned Value:
CagdUVType *: A dynamically allocated vector of size n, of parameter
values of the distributed points.
|
---|
See Also:
SymbUniformAprxPtOnCrvDistrib
Keywords:
uniform distribution
(ffptdist.c:260)
Prototype:
CagdUVType *SymbUniformAprxPtOnSrfGetDistrib(const CagdSrfStruct *Srf,
CagdUVType *DistUV,
CagdRType *DistProb,
int DistSize,
int *n)
Description:
Computes a uniform distribution of points on the surface Srf.
The points are placed at approximately equal distance from each other on
Srf's Euclidean space. A subset of the n points that were selected via
the last invokation of SymbUniformAprxPtOnSrfPrepDistrib is returned, such
that the points are at equal distance, approximately.
Parameters:
Srf: | To place points on its parametric space, uniformly.
This surface must have the same parameter domain as Srf in the
last invokation of SymbUniformAprxPtOnSrfPrepDistrib.
|
---|
DistUV: | Distributed UV.
|
---|
DistProb: | istributed Prob.
|
---|
DistSize: | istributed Size.
|
---|
n: | Returns actual number of UV locations in the returned vector.
|
---|
Returned Value:
CagdUVType *: A dynamically allocated vector of at most n parameter
values of the distributed points.
|
---|
See Also:
SymbUniformAprxPtOnCrvDistrib
SymbUniformAprxPtOnSrfDistrib
SymbUniformAprxPtOnSrfPrepDistrib
Keywords:
uniform distribution
(ffptdist.c:205)
Prototype:
void SymbUniformAprxPtOnSrfPrepDistrib(const CagdSrfStruct *Srf,
CagdUVType **DistUV,
CagdRType **DistProb,
int *DistSize,
int n)
Description:
Prepares a uniform distribution of points on surface Srf.
This function is invoked in preparation of several calls to function
SymbUniformAprxPtOnSrfGetDistrib that return a uniform Euclidean
distributions that is consistent with the area differentials found.
Parameters:
Srf: | To place n points on its parametric space, uniformly.
|
---|
DistUV: | Prepared distrib UV, allocated dynammically.
|
---|
DistProb: | repared distrib Prob, allocated dynammically.
|
---|
DistSize: | repared distrib Size (of DistUV and DistProb).
|
---|
n: | Number of points to distribute along Srf.
|
---|
Returned Value:
See Also:
SymbUniformAprxPtOnCrvDistrib
SymbUniformAprxPtOnSrfDistrib
SymbUniformAprxPtOnSrfGetDistrib
Keywords:
uniform distribution