# From D'Arcy W. Thompson

#         A                    B                    C                     D
#
# The fish coordinates by placing the x,y pairs
fish <- c(
0.0,-0.40,
0.0,-0.35,
0.2,-0.15,
0.2,0.05,
0.0,0.20,
0.0,0.30,
1.0,0.95,
2.5,1.50,
4.0,1.80,
5.0,1.90,
6.0,1.75,
7.0,1.40,
8.0,1.05,
8.8,0.70,
9.4,1.00,
9.5,1.30,
9.4,1.90,
9.0,2.00,
8.0,1.05,
8.8,0.70,
10.0,0.05,
10.0,-0.25,
11.2,-0.70,
11.3,-0.30,
11.3,0.00,
11.2,0.40,
10.0,0.05,
10.0,-0.25,
9.0,-0.60,
8.0,-1.00,
8.5,-2.00,
9.0,-2.15,
9.6,-2.00,
9.8,-1.50,
9.0,-0.60,
8.0,-1.00,
6.6,-1.70,
5.0,-2.20,
4.0,-2.25,
3.0,-2.20,
2.0,-2.00,
1.4,-1.60,
0.6,-0.80,
0.0,-0.40)
# number of points
n <- length(fish)/2; n
BF=2; HF=2
X <- xTab(fish); Y <- yTab(fish)
##  A
BOXW(0,12, -6,6)
A <- seq(0,12,0.1); A1 <- seq(0,12,1)
B <- seq(-3,3,0.1); B1 <- seq(-3,3,1)
for(x in A) for (y in B1)  Dot(x,y, 3)
for(x in A1) for (y in B)  Dot(x,y, 3)
polyC(X,Y, 8); polyline(X,Y, 1)
circle(1.1,0.5, 1/7, 1)
##  B
BOXW(-1,7, -4,4)
f1x=function(x,y) x/2
f1y=function(x,y) y
X1 = f1x(X,Y); Y1 = f1y(X,Y)
for(x in A) for (y in B1)  Dot(f1x(x,y),f1y(x,y), 3)
for(x in A1) for (y in B)  Dot(f1x(x,y),f1y(x,y), 3)
polyC(X1,Y1, 8); polyline(X1,Y1, 1)
circle(f1x(1.1,0.5),f1y(1.1,0.5), 1/7, 1)
##  C
BOXW(-1,7, -4,4)
f2x=function(x,y) x+y*0.4
f2y=function(x,y) y
X2 = f2x(X1,Y1); Y2 = f2y(X1,Y1)
for(x in A) for (y in B1)  Dot(f2x( f1x(x,y),f1y(x,y) ),f2y( f1x(x,y),f1y(x,y )), 3)
for(x in A1) for (y in B)  Dot(f2x( f1x(x,y),f1y(x,y) ),f2y( f1x(x,y),f1y(x,y) ), 3)
polyC(X2,Y2, 8); polyline(X2,Y2, 1)
circle(f2x(f1x(1.1,0.5),f1y(1.1,0.5)),f2y(f1x(1.1,0.5),f1y(1.1,0.5)), 1/7, 1)
##  D
BOXW(0,14, -7,7)
f3x=function(x,y) x-(abs(y)/10)^1.15
f3y=function(x,y) abs((1+x^1.4/10)*y)^1.001*sign(y)
X3 = f3x(X,Y); Y3 = f3y(X,Y)
for(x in A) for (y in B1)  Dot(f3x(x,y),f3y(x,y), 3)
for(x in A1) for (y in B)  Dot(f3x(x,y),f3y(x,y), 3)
polyC(X3,Y3, 8); polyline(X3,Y3, 1)
circle(f3x(1.1,0.5),f3y(1.1,0.5), 1/7, 1)