From ab8cc85adde879fb963c94d15675783f2cf4b183 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Tue, 14 Aug 2007 05:14:52 +0000 Subject: Initial population. --- src/input/mountain.input.pamphlet | 133 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 src/input/mountain.input.pamphlet (limited to 'src/input/mountain.input.pamphlet') diff --git a/src/input/mountain.input.pamphlet b/src/input/mountain.input.pamphlet new file mode 100644 index 00000000..915ab7cd --- /dev/null +++ b/src/input/mountain.input.pamphlet @@ -0,0 +1,133 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/input mountain.input} +\author{The Axiom Team} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{License} +<>= +--Copyright The Numerical Algorithms Group Limited 1994. +@ +<<*>>= +<> + +-- Draw a fractal mountain + +)clear all + +-- compile the functions +)set function compile on + +-- Generate Gaussian random numbers +-- Algorithm by Richard Voss from "The Science of Fractal Images", pg. 77 + +-- function to convert a number into machine floating point +sf f == f::DFLOAT + +Nrand := 4 +Arand := 2**26 - 1 +GaussAdd := sqrt(sf(3.0) * Nrand) +GaussFac := sf(2.0) * GaussAdd/((sf Nrand) * (sf Arand)) + +-- generate a random number +Gauss() == + sum := sf 0.0 + for i in 1..Nrand repeat + sum := sum + random()$INT + GaussFac * sum - GaussAdd + +-- Generate fractal mountains. + +-- Algorithms by Richard Voss from "The Science of Fractal Images", pg. 100 + +sfHalf := sf 0.5 +sfThree := sf 3.0 +sfFour := sf 4.0 + +f3(delta,x0,x1,x2) == (x0+x1+x2)/sfThree + delta*Gauss() +f4(delta,x0,x1,x2,x3) == (x0+x1+x2+x3)/sfFour + delta*Gauss() + +-- perform midpoint subdivision +MidPointFM(maxLevel, sigma, H) == + N := 2**maxLevel + delta := sigma + arraySize := (N+1) + X:IARRAY2(DFLOAT,0,0) := new(arraySize, arraySize, sf 0.0) + setelt(X, 0, 0, delta*Gauss()) + setelt(X, 0, N, delta*Gauss()) + setelt(X, N, 0, delta*Gauss()) + setelt(X, N, N, delta*Gauss()) + D := N + d := N quo 2 + for stage in 1..maxLevel repeat + delta := delta*(sfHalf**(sfHalf*H)) + for x in d..(N-d) by D repeat + for y in d..(N-d) by D repeat + setelt(X, x, y, f4(delta, elt(X,x+d,y+d), elt(X,x+d,y-d), + elt(X, x-d, x+d), elt(X, x-d, y-d))) + for x in 0..N by D repeat + for y in 0..N by D repeat + setelt(X, x, y, elt(X,x,y) + delta*Gauss()) + delta := delta*(sfHalf**(sfHalf*H)) + for x in d..(N-d) by D repeat + setelt(X,x,0, f3(delta, elt(X,x+d,0), elt(X,x-d,0), elt(X,x,d))) + setelt(X,x,N, f3(delta, elt(X,x+d,N), elt(X,x-d,N), elt(X,x,N-d))) + setelt(X,0,x, f3(delta, elt(X,0,x+d), elt(X,0,x-d), elt(X,d,x))) + setelt(X,N,x, f3(delta, elt(X,N,x+d), elt(X,N,x-d), elt(X,N-d,x))) + for x in d..(N-d) by D repeat + for y in D..(N-d) by D repeat + setelt(X,x,y, f4(delta, elt(X,x,y+d), elt(X,x,y-d), + elt(X,x+d,y), elt(X,x-d,y))) + for x in D..(N-d) by D repeat + for y in d..(N-d) by D repeat + setelt(X,x,y, f4(delta, elt(X,x,y+d), elt(X,x,y-d), + elt(X,x+d,y), elt(X,x-d,y))) + for x in 0..N by D repeat + for y in 0..N by D repeat + setelt(X,x,y, elt(X,x,y) + delta*Gauss()) + for x in d..(N-d) by D repeat + for y in d..(N-d) by D repeat + setelt(X,x,y, elt(X,x,y) + delta*Gauss()) + D := D quo 2 + d := d quo 2 + X + + +sfZero := sf 0 +Sigma := sf 7 + +-- function passed to the draw +tableVal(x: DFLOAT, y:DFLOAT):DFLOAT == + free table, xIndex, yIndex, rowSize + val := elt(table, xIndex, yIndex) + xIndex := xIndex + 1 + if xIndex > rowSize then (xIndex := 0; yIndex := yIndex + 1) + val < sfZero => sfZero + val + +-- draw a mountain with maxLevel subdivisions with Haussdorf dimension H +-- the number of subdivisions of the mountain is 2**maxLevel, so you +-- probably should keep maxLevel <= 8. Also 0 < H <= 1. The closer +-- H is to one, the smoother the mountain will be. +drawMountain(maxLevel, H) == + free table, xIndex, yIndex, rowSize + table := MidPointFM(maxLevel, Sigma, H) + N := 2**maxLevel + xIndex := 0 + yIndex := 0 + rowSize := N + draw(tableVal, -20..20, -20..20, + var1Steps == N, var2Steps == N, title == "Fractal Mountain") + +drawMountain(3, sf 0.95) +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} -- cgit v1.2.3