Copyright (C) 1994, Digital Equipment Corp.
Created on Sep 15 1988 by Jorge Stolfi
INTERFACEReal pairs.R2 ;
This interface implements the 2-dimensional vector space R^2. It defines the basic linear operations on real pairs (arrays with 2 REAL components). See R2x2.i3 and R2IO.i3 for additional operations.
Index: vectors; reals, vectors of; points; geometry; linear algebra; numerical routines
****************************************************************** WARNING: DO NOT EDIT THIS FILE. IT WAS GENERATED MECHANICALLY. See the Makefile for more details. ******************************************************************
IMPORT Random;
TYPE
Axis = [0..1]; (* Coordinate selectors *)
Point = ARRAY Axis OF REAL; (* A point of R2 *)
T = Point;
CONST
Origin = T{0.0, 0.0};
Ones = T{1.0, 1.0};
PROCEDURE Unit(i: Axis): T;
(* The unit vector on the i-th axis. *)
PROCEDURE Equal(READONLY x, y: T): BOOLEAN;
(* Equality *)
PROCEDURE IsZero(READONLY x: T): BOOLEAN;
(* TRUE if x = (0 0) *)
PROCEDURE Sum (READONLY x: T): REAL;
(* Sum of the coordinates x[i]. *)
PROCEDURE Max(READONLY x: T): REAL;
(* Maximum of the x[i]. *)
PROCEDURE MaxAbsAxis(READONLY x: T): Axis;
(* Index i such that ABS(x[i]) is largest. *)
PROCEDURE Min(READONLY x: T): REAL;
(* Minimum of the x[i]. *)
PROCEDURE SumSq(READONLY x: T): REAL;
(* Sum of x[i]**2. *)
PROCEDURE L1Norm(READONLY x: T): REAL;
(* Sum of ABS(x[i]). *)
PROCEDURE Length(READONLY x: T): REAL;
PROCEDURE L2Norm(READONLY x: T): REAL;
(* Euclidean length (sqrt of sum of x[i]**2). *)
PROCEDURE LInfNorm(READONLY x: T): REAL;
(* Maximum of ABS(READONLY x[i]). *)
PROCEDURE L1Dist(READONLY x, y: T): REAL;
(* L1Norm(Sub(x,y)). *)
PROCEDURE Dist(READONLY x, y: T): REAL;
PROCEDURE L2Dist(READONLY x, y: T): REAL;
(* L2Norm(Sub(x,y)). *)
PROCEDURE L2DistSq(READONLY x, y: T): REAL;
(* SumSq(Sub(x,y)). *)
PROCEDURE LInfDist(READONLY x, y: T): REAL;
(* LInfNorm(Sub(x,y)). *)
PROCEDURE RelDist(READONLY x, y: T; eps: REAL := 1.0e-37): REAL;
(* Relative distance between two points, useful in convergence tests.
The /eps/ parameter specifies the magnitude of the (additive) noise
in each coordinate.
The value of RelDist is defined as max_i rdist(x[i], y[i]) where
|
| rdist(u,v) = max(|u-v|-eps, 0) / max(|u|, |v|, eps)
|
The result is between 0.0 and 2.0. A result below 2.0e-7 means the vectors
differ only at the roundoff error level. *)
PROCEDURE Dot (READONLY x, y: T): REAL;
(* Dot product of vectors x and y. *)
PROCEDURE Cos (READONLY x, y: T): REAL;
(* Co-sine of the angle between x and y. *)
PROCEDURE Det(READONLY p0, p1: T): REAL;
(* Determinant of the matrix with given points as rows *)
PROCEDURE Add(READONLY x, y: T): T;
(* Vector sum x + y. *)
PROCEDURE Sub(READONLY x, y: T): T;
(* Vector difference x - y. *)
PROCEDURE Minus(READONLY x: T): T;
(* Negation of all coordinates. *)
PROCEDURE Scale(alpha: REAL; READONLY x: T): T;
(* Scalar multiplication alpha * x. *)
PROCEDURE Shift(READONLY x: T; delta: REAL): T;
(* Adds delta to every coordinate of x. *)
PROCEDURE Mix (READONLY x: T; alpha: REAL; READONLY y: T; beta: REAL): T;
(* Linear combination x * alpha + y * beta. *)
PROCEDURE Weigh (READONLY x, y: T): T;
(* Returns z such that z[i] = x[i] * y[i]. *)
TYPE Function = PROCEDURE (x: REAL): REAL;
PROCEDURE FMap (READONLY x: T; F: Function): T;
(* Returns z such that z[i] = F(x[i]). *)
PROCEDURE Direction(READONLY x: T): T;
(* Divides x by Length(x). An error if x = (0 0). *)
PROCEDURE Cross(READONLY p1: T): T;
(* Cross product: Det(p, q, r, ...) = Dot(p, Cross(q, r, ...)) *)
PROCEDURE Throw(lo, hi: REAL; src: Random.T := NIL): T;
(* Returns a random vector with coordinates independently and
uniformly distributed between lo (inclusive) and hi (exclusive).
The "src" parameter is the source of randomness (See Random.def). *)
PROCEDURE ToText(READONLY x: T): TEXT;
END R2.