<<>> <> <> <> <> DIRECTORY G3dBasic, G3dMatrix; G3dVector: CEDAR DEFINITIONS ~ BEGIN <> Box: TYPE ~ G3dBasic.Box; Pair: TYPE ~ G3dBasic.Pair; Triple: TYPE ~ G3dBasic.Triple; Quad: TYPE ~ G3dBasic.Quad; Ray: TYPE ~ G3dBasic.Ray; TripleSequence: TYPE ~ G3dBasic.TripleSequence; Matrix: TYPE ~ G3dMatrix.Matrix; NearSegment: TYPE ~ RECORD [ point: Triple ¬ [], -- point on 3d segment inside: BOOL ¬ FALSE, -- true iff point inside segment w0, w1: REAL ¬ 0.0 -- point = w0*p0+w1*p1 ]; origin: Triple ~ G3dBasic.origin; <> Null: PROC [v: Triple] RETURNS [BOOL]; <> Negate: PROC [v: Triple] RETURNS [Triple]; <> Unit: PROC [v: Triple] RETURNS [Triple]; <> Mul: PROC [v: Triple, s: REAL] RETURNS [Triple]; <> <<>> Div: PROC [v: Triple, s: REAL] RETURNS [Triple]; <> <<>> Abs: PROC [v: Triple] RETURNS [Triple]; <> <> Add: PROC [v1, v2: Triple] RETURNS [Triple]; <> Sub: PROC [v1, v2: Triple] RETURNS [Triple]; <> Equal: PROC [v1, v2: Triple, epsilon: REAL ¬ 0.001] RETURNS [BOOL]; <> Dot: PROC [v1, v2: Triple] RETURNS [REAL]; <> Cross: PROC [v1, v2: Triple] RETURNS [Triple]; <> Midpoint: PROC [v1, v2: Triple] RETURNS [Triple]; <> <<>> Interp: PROC [t: REAL, v1, v2: Triple] RETURNS [Triple]; <> <<>> InterpQuad: PROC [t: REAL, v1, v2: Quad] RETURNS [Quad]; <> <<>> Combine: PROC [v1: Triple, s1: REAL, v2: Triple, s2: REAL] RETURNS [Triple]; <> <<>> ScaleRay: PROC [ray: Ray, d: REAL] RETURNS [Triple]; <> <<>> MulVectors: PROC [v1, v2: Triple] RETURNS [Triple]; <> <<>> DivVectors: PROC [v1, v2: Triple] RETURNS [Triple]; <> <> UnitizeSequence: PROC [triples: TripleSequence]; <> NegateSequence: PROC [triples: TripleSequence]; <> <<>> MinMaxSequence: PROC [triples: TripleSequence] RETURNS [Box]; <> <> Length: PROC [v: Triple] RETURNS [REAL]; <> Square: PROC [v: Triple] RETURNS [REAL]; <> Distance: PROC [p1, p2: Triple] RETURNS [REAL]; <> SquareDistance: PROC [p1, p2: Triple] RETURNS [REAL]; <> <<>> SameLength: PROC [v1, v2: Triple] RETURNS [Triple]; <> <<>> SetVectorLength: PROC [v: Triple, length: REAL] RETURNS [Triple]; <> <> Collinear: PROC [p1, p2, p3: Triple, epsilon: REAL ¬ 0.01] RETURNS [BOOL]; <> VecsCoplanar: PROC [v1, v2, v3: Triple, epsilon: REAL ¬ 0.005] RETURNS [BOOL]; <> PointsCoplanar: PROC [p1, p2, p3, p4: Triple, epsilon: REAL ¬ 0.005] RETURNS [BOOL]; <> <<>> Parallel: PROC [v1, v2: Triple, epsilon: REAL ¬ 0.005] RETURNS [BOOL]; <> Perpendicular: PROC [v1, v2: Triple, epsilon: REAL ¬ 0.005] RETURNS [BOOL]; <> <<>> FrontFacing: PROC [vector, base: Triple, view: Matrix] RETURNS [BOOL]; <> <> <<>> FrontFacingNoPerspective: PROC [vector: Triple, view: Matrix] RETURNS [BOOL]; <> <> <<>> FrontFacingWithPerspective: PROC [vector, base: Triple, invView: Matrix] RETURNS [BOOL]; <> <> <> <> <> NearnessAccelerator: PROC [p0, p1: Triple] RETURNS [Quad]; <> <<>> NearestToSegment: PROC [p0, p1, q: Triple, acc: Quad ¬ [0, 0, 0, 0]] RETURNS [NearSegment]; <> <> <<>> NearestToLine: PROC [line: Ray, q: Triple] RETURNS [Triple]; <> PointOnLine: PROC [p: Triple, line: Ray, epsilon: REAL ¬ 0.005] RETURNS [BOOL]; <> <<>> NearestToSequence: PROC [p: Triple, points: TripleSequence] RETURNS [index: NAT]; <> <<>> DistanceBetween2Lines: PUBLIC PROC [line1, line2: Ray] RETURNS [REAL]; <> <<>> ClosestApproach2Lines: PROC [line1, line2: Ray] RETURNS [p1, p2: Triple]; <> <> <> <> V90: PROC [v0, v1: Triple, unitize: BOOL ¬ TRUE] RETURNS [Triple]; <> <<>> Ortho: PROC [v: Triple, crosser: Triple ¬ [0.0, 0.0, 1.0]] RETURNS [Triple]; <> <> RotateAbout: PROC [v, axis: Triple, a: REAL, degrees: BOOL ¬ TRUE] RETURNS [Triple]; <> <> PolarFromCartesian: PROC [cartesian: Triple] RETURNS [Triple]; <> <> <<>> CartesianFromPolar: PROC [polar: Triple] RETURNS [Triple]; <> <> <> <> Clip: PROC [p: Triple, box: Box] RETURNS [Triple]; <> <<>> Average: PUBLIC PROC [triples: TripleSequence] RETURNS [Triple]; <> <<>> Project: PROC [v1, v2: Triple] RETURNS [Triple]; <> <<>> CosineBetween: PROC [v0, v1: Triple, unitize: BOOL ¬ FALSE] RETURNS [REAL]; <> <<>> AngleBetween: PROC [v0, v1: Triple, degrees: BOOL ¬ TRUE, unitize: BOOL ¬ FALSE] RETURNS [REAL]; <> <> <<>> END.