DEFINITION MODULE Splines;
(*******************************************************************
Module Splines (Version 1.0)
Copyright (c) 1990-2006 by Olivier Roth and ETH Zurich.
Purpose Cubic splines, cyclic splines, bezier curves
and open or closed curve drawings.
Remarks See: B. Edlinger, 1989, "Splines - Einführung für den Praktiker",
CHIP Professional Programmieren Nr. 7:21-40
Programming
o Design
Olivier Roth 29/06/1990
o Implementation
Olivier Roth 29/06/1990
ETH Zurich
Systems Ecology
CHN E 35.1
Universitaetstrasse 16
8092 Zurich
SWITZERLAND
URLs:
<mailto:RAMSES@env.ethz.ch>
<http://www.sysecol.ethz.ch>
<http://www.sysecol.ethz.ch/SimSoftware/RAMSES>
Last revision of definition: 29/06/1990 OR
*******************************************************************)
(* Computing procedures: *)
PROCEDURE Spline( n: INTEGER; VAR x, y, y1, y2: ARRAY OF REAL );
(* computes a general spline function trough the n (x,y) points,
returns the first derivative in y1 and second in y2 *)
PROCEDURE Spline1( n: INTEGER; ya, yb: REAL;
VAR x, y, y1, y2: ARRAY OF REAL );
(* computes a spline function trough the n (x,y) points, with
the derivatives ya at x[0] and yb at x[n] (must be specified),
returns the first derivative in y1 and second in y2 *)
PROCEDURE Spline2( n: INTEGER; VAR x, y, y1, y2: ARRAY OF REAL );
(* computes a cyclic spline function trough the n (x,y) points,
(should be: y[n] = y[0]; n >= 3),
returns the first derivative in y1 and second in y2 *)
PROCEDURE Intrpl( x0: REAL; n: INTEGER;
VAR x, y, y1, y2: ARRAY OF REAL ): REAL;
(* interpolates in the spline function given by x, y, y1, and y2
(must be computed before by Spline, Spline1 or Spline2) at x0 *)
PROCEDURE SplineCurve( n: INTEGER;
VAR x, y, t, x1, x2, y1, y2: ARRAY OF REAL );
(* computes the spline function for open curves, i.e. x[0] <> x[n] *)
PROCEDURE SplineCurve2( n: INTEGER;
VAR x, y, t, x1, x2, y1, y2: ARRAY OF REAL );
(* computes the spline function for closed curves: i.e.
x[0] = x[n] and y[0] = y[n] *)
(* Drawing procedures: *)
(* the following procedures draw to the current output window
in user coordinates. This implies that the user must define
these coordinates previously by a call to DMWindowIO.ScaleUC.
Internally the following routines call SetUCPen, and UCLineTo
(both from DMWindowIO). *)
PROCEDURE Bezier( x0, y0, x1, y1, x2, y2, x3, y3: REAL );
(* draws a bezier curve from (x0,y0) to (x3,x4); (x1,y1) and (x2,y2)
define the asymptotic cross points of the first derivative of the
bezier curve (cubic function) (i.e (x1,y1) and (x2,y2) are not
on the bezier curve) *)
PROCEDURE PlotSpline( n: INTEGER;
VAR x, y, y1: ARRAY OF REAL );
(* draws any spline function defined by n, x, y, y1. These data
must be computed previosly by Spline, Spline1, or Spline2. *)
PROCEDURE PlotSpline2( n: INTEGER;
VAR t, x, x1, y, y1: ARRAY OF REAL );
(* draws any spline function defined by n, t, x, x1, y, y1. These
data must be computed previosly by SplineCurve or SplineCurve2. *)
END Splines.