realgeometry/src/RealPoint.i3

Distributed only by permission.
Created on Sep 15 1988 by Jorge Stolfi

Contributed by Michel Dagenais (dagenais@vlsi.polymtl.ca), 1994.

```INTERFACE RealPoint;
```
Real pairs.

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. ******************************************************************

Taken from the mg library distributed with DEC SRC Modula3 2.11. There was no makefile there explaining why it should not be edited. Simple cleaning and removing of dependencies with other mg modules performed.

```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 *)

(* TRUE if x = (0 0) *)

PROCEDURE Sum (READONLY x: T): REAL;
(* Sum of the coordinates x[i]. *)

(* Maximum of the x[i]. *)

(* Index i such that ABS(x[i]) is largest. *)

(* Minimum of the x[i]. *)

(* Sum of x[i]**2. *)

(* Sum of ABS(x[i]). *)

(* Euclidean length (sqrt of sum of x[i]**2). *)

(* 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 *)

(* Vector sum x + y. *)

PROCEDURE Sub(READONLY x, y: T): T;
(* Vector difference x - y. *)

(* 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]). *)

(* Divides x by Length(x). An error if x = (0 0). *)

(* 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).  *)

END RealPoint.
```

RealPoint's implementation is in:

procedure RealPoint.Equal is in:

procedure RealPoint.Max is in:

procedure RealPoint.Min is in:

procedure RealPoint.Sub is in:

procedure RealPoint.Minus is in:

procedure RealPoint.Scale is in:

```

```