Observer path (red) plunging into the central pearl in Indra's Net

Having seen a POVRay description of Indra's Net of Pearls, let's now see if we can simulate reincarnation inside the net. We have available videos by Brian Vanderkolk, who simulated what a perfectly reflecting sphere looks like on the inside, on this page^{[1]}. We use Maple 9 to help us out.

When the author simulated Indra's Net, he used R=ð/20 for the spheres' radius, therefore we need to make this assumption first. We also need to simulate in 3d, so we use the "geom3d" package:

> restart;

> with(geom3d):

> _EnvXName := x: _EnvYName := y: _EnvZName := z:

> with(plots):

> R:=Pi/20; #Radius of Indra's Sphere

Now, we need to decide how the observer plunges into the spheres. There are two kinds of paths in Brian's videos:

- on-axis path (videos 4,6)
- off-axis path (video 5)

We start at (0,1/2,-5) and move on a straight line riding the vector (0,1/2,z). Once we determine HOW we should enter the spheres, it's just a matter of choosing the right function to make a plunge into the sphere's entrance point. We want "smooth" camera movement, so the directional derivative of the path function which we choose, has to be equal to the directional derivative of a straight line, i,e, 0, at the initial and final path points. For this, we choose the function, sin(x).

Let's then first form the equation which characterizes the actual plunge into the sphere's entry point:

> eq:=(y-Pi/2)/(z+1)=(Pi/2+Pi/2)/(-1+R); #equation for plunging in left of sphere

> y:=unapply(solve(eq,y),z);#solve for y

> f:=z->1/4*(sin(y(z))+1); #function of path, left of plunge

> p1:=plot(f(z),z=-1..-R):

> p2:=plot({sqrt(R^2-z^2),-sqrt(R^2-z^2)},z=-R..0,color=red):

> display({p1,p2});

On-axis plunge into the central sphere

We check the values at the end points, and differentiability:

> f(-1),f(-R); #check values there

1/2, 0

> simplify(subs(z=-1,diff(f(z),z))),simplify(subs(z=-R,diff(f(z),z))); #check differentiability

0, 0

Now let's check what will be the maximum visual tilt in our path:

> msx:=solve(diff(f(z),z$2)=0);#find out max tilt angle

> ms:=simplify(subs(z=msx,diff(f(z),z)));

> eq:=(y-f(msx))/(z-msx)=ms;

>y:=unapply(solve(eq,y),z);

> evalf(-Pi/5),evalf(arctan(ms)),evalf(-Pi/4);

-0.6283185308, -0.7500867099, -0.7853981635

The tilt angle is between π/5 and π/4. Let's see the tilt:

> p3:=plot(y(z),z=-1..-R,color=blue):

> p4:=plot(sqrt(R^2-z^2)-1,z=-R..R,color=red):

> display({p1,p2,p3,p4});

Maximum visual tilt when plunging on-axis

This means that at maximum tilt, we are going to be looking roughly at -0.3 on the y-axis. Now, based on the data that Brian published for his off-axis entry, let's calculate the second plunge:

> eq:=(y-Pi/2)/(z+1)=(Pi/2+Pi/2)/(-1+cos(arcsin(R/10))*R); #equation for plunging left of sphere

> y:=unapply(solve(eq,y),z);

> g:=z->(1/2-R/10)*1/2*(sin(y(z))+1)+R/10; #function of path, left of plunge

> p1:=plot(g(z),z=-1..-R*cos(arcsin(R/10))):

> p2:=plot({sqrt(R^2-z^2),-sqrt(R^2-z^2)},z=-R..0,color=red):

> display({p1,p2});

Off-axis plunge into the central sphere

Let's check some values and differentiability for the off-axis plunge:

> simplify(g(-1)),simplify(g(-R*cos(arcsin(R/10)))); #check values there

1/2, 1/200*Pi

> simplify(subs(z=-1,diff(g(z),z))),simplify(subs(z=-R*cos(arcsin(R/10)),diff(g(z),z))); #check differentiability

0, 0

The exit path is going to be symmetric:

> plot(f(-z),z=R..1);#exit path

Exit path (past central sphere radius)

Now we create the complete on-axis path:

> cpath:=z->piecewise(z<=-1, 1/2, z>-1 and z<=-R, f(z),z>-R and z<R,0,z>=R and z<1,f(-z),z>=1,1/2);#path through center

Check it:

> p1:=plot(cpath(z),z=-2..2):

> p2:=implicitplot(z^2+y^2=R^2,z=-R..R,y=-R..R):

> display({p1,p2});

Complete on-axis plunge observer path

And the off-axis path:

> spath:=z->piecewise(z<=-1, 1/2, z>-1 and z<=-R*cos(sin(R/10)), g(z),z>-R*cos(sin(R/10)) and z<R*cos(sin(R/10)),R/10,z>=R*cos(sin(R/10)) and z<1,g(-z),z>=1,1/2);#path through offset

> p1:=plot(spath(z),z=-2..2):

> display({p1,p2});

Complete off-axis plunge observer path

Note the difference between the two paths. Now let's put everything together with geom3d:

> steps:=20;#steps to complete path

> dz:=4/steps; #for cpath

> trajectory:=spath; #can use cpath as well, here

> path:={};

> for i from 0 to steps-1 do

> z1:=-2+i*dz;

> y1:=evalf(trajectory(z1));

> x1:=0;

> z2:=z1+dz;

> y2:=evalf(trajectory(z2));

> x2:=0;

> point(p,x1,y1,z1);

> point(q,x2,y2,z2);

> segment(L,[p,q]);

> path:=path union {draw(L,color=red,labels=[x,y,z])};

> od:

> net:={};

> n:=1;#construct Indra's net

> for k from -n to n do

> for l from -n to n do

> for m from -n to n do

> point(c,[k,l,m]);

> sphere(s,[c,R]);

> net:=net union {draw(s,labels=[x,y,z])};

> od;

> od;

> od;

> reincarnation:=net union path:

> display(reincarnation);

The result is shown on the top figure^{[2]}.

__POVRay Illustrations of Reincarnation In Indra's Net__

Here is the second version of the completed video: Trip Through Primordial Chaos This is the complete path of a soul during a virtual reincarnation in Indra's Net, with the entire net and the First Cause visible. The "soul" is incorporeal, so there are no reflections outside Indra's Net, which only reflect themselves and the light of The First Cause. Then the soul takes a plunge into the central Indra sphere, where it incarnates as an iridescent sphere, smaller than the Indra sphere it plunges into. This is necessary, because absent objects inside a perfectly reflecting sphere, there are no reflections. The iridescent-soul-sphere proceeds towards the center of the Indra sphere, makes a stop at r/2, to take a look around for a full 360 degree turn and finally proceeds until it reaches the actual center, where it meets the author, who's creating this very video in POVRay, so the video is self-referential. The soul then leaves the central sphere, travels towards the edge and exits it, returning to Indra's Net. Turning back, a second plunge, this time off-axis, meets the author playing his favorite game against Rex Tremendus. The soul returns to the exact same position where it started, so the entire video is recyclable. The parities of the sub-paths are:

Reincarnation | Direction | On-Axis Entry | Encounters Singularity | Floor Reference |

1 | + | + | +(point) | + |

2 | - | - | +(line) | + |

- A mathematical analysis of infinite reflections inside a perfectly reflecting sphere has been performed here.