Motion/Pursuit Law in 1D (Visual Depth Perception 1)

Manipulate[
nORM[vector_?VectorQ]:=(Sqrt[vector.vector]);
degrees[q_]:=q*180/π;
arcMinutes[q_]:=q*60*180/π;

aimψ[headAimVector_?VectorQ,base_?VectorQ]:=ArcTan[headAimVector[[1]],headAimVector[[2]]];

midPoint[headAimVector_?VectorQ,base_?VectorQ]:=base-aimOffset*interOcular*{headAimVector[[2]],-headAimVector[[1]]};

rightEyeCenter[headAimVector_?VectorQ,base_?VectorQ]:=base+((1/2)-aimOffset)*interOcular*{headAimVector[[2]],-headAimVector[[1]]};

leftEyeCenter[headAimVector_?VectorQ,base_?VectorQ]:=base-((1/2)+aimOffset)*interOcular*{headAimVector[[2]],-headAimVector[[1]]};


rightViewVector[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=fixate-rightEyeCenter[headAimVector, base];

rightφ[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=ArcTan[rightViewVector[headAimVector, fixate, base][[1]],rightViewVector[headAimVector, fixate, base][[2]]];

rightEyeNode[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=rightEyeCenter[headAimVector, base]+nodePercent*eyeRadius*rightViewVector[headAimVector,fixate, base]/nORM[rightViewVector[headAimVector, fixate, base]];

leftViewVector[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=fixate-leftEyeCenter[headAimVector, base];

leftφ[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=ArcTan[leftViewVector[headAimVector, fixate, base][[1]],leftViewVector[headAimVector, fixate, base][[2]]];

leftEyeNode[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=leftEyeCenter[headAimVector, base]+nodePercent*eyeRadius*leftViewVector[headAimVector, fixate, base]/nORM[leftViewVector[headAimVector, fixate, base]];

fixateConvergence[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=(rightφ[headAimVector,fixate,base]-leftφ[headAimVector,fixate,base]);

leftα[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=leftφ[headAimVector,fixate,base]-aimψ[headAimVector,base];
rightα[headAimVector_?VectorQ,fixate_?VectorQ,base_?VectorQ]:=rightφ[headAimVector,fixate,base]-aimψ[headAimVector,base];

rightDistractVector[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=distraction-rightEyeNode[headAimVector,fixate, base];

rightδ[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=ArcTan[rightDistractVector[headAimVector,fixate,distraction,base][[1]],rightDistractVector[headAimVector,fixate,distraction,base][[2]]];

leftDistractVector[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=distraction-leftEyeNode[headAimVector,fixate, base];

leftδ[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=ArcTan[leftDistractVector[headAimVector,fixate,distraction,base][[1]],leftDistractVector[headAimVector,fixate,distraction,base][[2]]];

convergenceDistraction[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=If[Or[Abs[leftφ[headAimVector,fixate, base]-leftδ[headAimVector,fixate, distraction,base]]>π/3.,Abs[rightφ[headAimVector,fixate, base]-rightδ[headAimVector,fixate, distraction,base]]>π/3.],0.0,(rightδ[headAimVector,fixate, distraction,base]-leftδ[headAimVector,fixate, distraction,base])];

rightθ[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=(rightφ[headAimVector,fixate, base]-rightδ[headAimVector,fixate,distraction,base]);

leftθ[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=(leftφ[headAimVector,fixate, base]-leftδ[headAimVector,fixate,distraction,base]);

binocularDisparity[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=If[Or[leftθ[headAimVector,fixate,distraction,base]<-π/2.,leftθ[headAimVector,fixate,distraction,base]>π/3.,rightθ[headAimVector,fixate,distraction,base]<-π/3.,rightθ[headAimVector,fixate,distraction,base]>π/2.],0,(rightθ[headAimVector,fixate,distraction,base]-leftθ[headAimVector,fixate,distraction,base])];

rightθinside[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=rightθ[headAimVector,fixate,distraction,base]+ArcSin[nodePercent*Sin[rightθ[headAimVector,fixate,distraction,base]]];

leftθinside[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=leftθ[headAimVector,fixate,distraction,base]+ArcSin[nodePercent*Sin[leftθ[headAimVector,fixate,distraction,base]]];

retinalDisparity[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=If[Or[leftθ[headAimVector,fixate,distraction,base]<-π/2.,leftθ[headAimVector,fixate,distraction,base]>π/3.,rightθ[headAimVector,fixate,distraction,base]<-π/3.,rightθ[headAimVector,fixate,distraction,base]>π/2.],0,(rightθinside[headAimVector,fixate,distraction,base]-leftθinside[headAimVector,fixate,distraction,base])];

eDGE[L_?VectorQ,R_?VectorQ,F_?VectorQ]:=Module[{a,bX,bY,c,r},
a=Det[{{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bX=Det[{{L.L,R.R,F.F},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bY=Det[{{L[[1]],R[[1]],F[[1]]},{L.L,R.R,F.F},{1,1,1}}];
c=-Det[{{L.L,R.R,F.F},{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]}}];
{bX,bY}/(2 a)+{((Sqrt[(bX^2)+(bY^2)-4 a c])/(2Abs[a])),0}];
antiEDGE[L_?VectorQ,R_?VectorQ,F_?VectorQ]:=Module[{a,bX,bY,c,r},
a=Det[{{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bX=Det[{{L.L,R.R,F.F},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bY=Det[{{L[[1]],R[[1]],F[[1]]},{L.L,R.R,F.F},{1,1,1}}];
c=-Det[{{L.L,R.R,F.F},{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]}}];
{bX,bY}/(2 a)-{((Sqrt[(bX^2)+(bY^2)-4 a c])/(2Abs[a])),0}];
rADIUS[L_?VectorQ,R_?VectorQ,F_?VectorQ]:=Module[{a,bX,bY,c,r},
a=Det[{{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bX=Det[{{L.L,R.R,F.F},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bY=Det[{{L[[1]],R[[1]],F[[1]]},{L.L,R.R,F.F},{1,1,1}}];
c=-Det[{{L.L,R.R,F.F},{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]}}];
((Sqrt[(bX^2)+(bY^2)-4 a c])/(2Abs[a]))];
cENTER[L_?VectorQ,R_?VectorQ,F_?VectorQ]:=Module[{a,bX,bY,c,r},
a=Det[{{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bX=Det[{{L.L,R.R,F.F},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bY=Det[{{L[[1]],R[[1]],F[[1]]},{L.L,R.R,F.F},{1,1,1}}];
c=-Det[{{L.L,R.R,F.F},{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]}}];
{bX,bY}/(2 a)];
cIRCLE[L_?VectorQ,R_?VectorQ,F_?VectorQ]:=Module[{a,bX,bY,c,r},
a=Det[{{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bX=Det[{{L.L,R.R,F.F},{L[[2]],R[[2]],F[[2]]},{1,1,1}}];
bY=Det[{{L[[1]],R[[1]],F[[1]]},{L.L,R.R,F.F},{1,1,1}}];
c=-Det[{{L.L,R.R,F.F},{L[[1]],R[[1]],F[[1]]},{L[[2]],R[[2]],F[[2]]}}];
Circle[{bX,bY}/(2 a),((Sqrt[(bX^2)+(bY^2)-4 a c])/(2Abs[a]))]];


eyePict[eyeCenter_?VectorQ,fixate_?VectorQ]:=Module[{λ,viewVector},viewVector=fixate-eyeCenter;
λ=ArcTan[viewVector[[1]],viewVector[[2]]];
viewVector=viewVector/nORM[viewVector];
Show[{Graphics[{AbsoluteThickness[2],Gray,Circle[eyeCenter,eyeRadius,{λ+.4,2π+λ-.4}]}],Graphics[{Gray,
Circle[eyeCenter+ .8eyeRadius viewVector,.5eyeRadius,{λ-1.5,λ+1.5}]}],
Graphics[{Green,
Disk[eyeCenter+eyeRadius*nodePercent*viewVector,eyeRadius/10]
}]
},AspectRatio->Automatic]];



eyeEdge[θ_]:=eyeRadius*{Cos[θ],Sin[θ]};

inRays[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=Show[{eyePict[leftEyeCenter[headAimVector, base],fixate],eyePict[rightEyeCenter[headAimVector,base],fixate],Graphics[{Red,{Line[{rightEyeNode[headAimVector,fixate,base],rightEyeCenter[headAimVector,base]-eyeRadius*rightViewVector[headAimVector,fixate,base]/nORM[rightViewVector[headAimVector,fixate,base]]}]}}],Graphics[{Red,{Line[{leftEyeNode[headAimVector,fixate,base],leftEyeCenter[headAimVector, base]-eyeRadius*leftViewVector[headAimVector,fixate,base]/nORM[leftViewVector[headAimVector,fixate,base]]}]}}],Graphics[{Blue,{Line[{rightEyeNode[headAimVector,fixate,base],rightEyeCenter[headAimVector,base]+eyeEdge[rightφ[headAimVector,fixate,base]-π-rightθinside[headAimVector,fixate,distraction,base]]}]}}],
Graphics[{Blue,{Line[{leftEyeNode[headAimVector,fixate,base],leftEyeCenter[headAimVector,base]+eyeEdge[leftφ[headAimVector,fixate,base]-π-leftθinside[headAimVector,fixate,distraction,base]]}]}}],
Graphics[{Purple,{Line[{rightEyeCenter[headAimVector,base],rightEyeCenter[headAimVector,base]+eyeEdge[rightφ[headAimVector,fixate,base]-π-rightθinside[headAimVector,fixate,distraction,base]]}]}}],
Graphics[{Purple,{Line[{leftEyeCenter[headAimVector,base],leftEyeCenter[headAimVector,base]+eyeEdge[leftφ[headAimVector,fixate,base]-π-leftθinside[headAimVector,fixate,distraction,base]]}]}}],
Graphics[{Green,{Line[N[{leftEyeCenter[headAimVector, base],rightEyeCenter[headAimVector, base]}]]}}],
min=Min[{leftφ[headAimVector,fixate,base]-π-leftθinside[headAimVector,fixate,distraction,base]-retinalDisparity[headAimVector,fixate,distraction,base],leftφ[headAimVector,fixate,base]-π-leftθinside[headAimVector,fixate,distraction,base]}];
MAX=Max[{leftφ[headAimVector,fixate,base]-π-leftθinside[headAimVector,fixate,distraction,base]-retinalDisparity[headAimVector,fixate,distraction,base],leftφ[headAimVector,fixate,base]-π-leftθinside[headAimVector,fixate,distraction,base]}];
Graphics[{Brown,AbsoluteThickness[3],{Circle[leftEyeCenter[headAimVector, base],eyeRadius,{min,MAX}]}}]
},AspectRatio->Automatic,PlotRange->{{midPoint[headAimVector,base][[1]]-interOcular,midPoint[headAimVector,base][[1]]+interOcular},{midPoint[headAimVector,base][[2]]-interOcular,midPoint[headAimVector,base][[2]]+interOcular}}];


outRays[headAimVector_?VectorQ,fixate_?VectorQ,distraction_?VectorQ,base_?VectorQ]:=Show[{Graphics[{Red,AbsolutePointSize[4],{Point[N[fixate]]}}],Graphics[{Blue,AbsolutePointSize[4],{Point[N[distraction]]}}],Graphics[{Red,{Line[N[{fixate,rightEyeNode[headAimVector,fixate, base]}]]}}],Graphics[{Red,{Line[N[{fixate,leftEyeNode[headAimVector,fixate, base]}]]}}],Graphics[{Blue,{Line[N[{distraction,rightEyeNode[headAimVector,fixate, base]}]]}}],Graphics[{Blue,{Line[N[{distraction,leftEyeNode[headAimVector,fixate, base]}]]}}]
},AspectRatio->Automatic];

movingEyePict[eyeCenter_?VectorQ,fixate_?VectorQ]:=Module[{λ,viewVector},viewVector=fixate-eyeCenter;
λ=ArcTan[viewVector[[1]],viewVector[[2]]];
viewVector=viewVector/nORM[viewVector];
Show[{Graphics[{AbsoluteThickness[2],Dashing[.0125],Gray,{Line[{eyeCenter-{1.eyeRadius,1.5eyeRadius},eyeCenter+{ 1.eyeRadius,-1.5eyeRadius},eyeCenter+{ .6eyeRadius,-1.8eyeRadius}}],Circle[eyeCenter,eyeRadius,{λ+.4,2π+λ-.4}]}}],Graphics[{Gray,
Circle[eyeCenter+ .8eyeRadius viewVector,.5eyeRadius,{λ-1.5,λ+1.5}]}],
Graphics[{Green,
Disk[eyeCenter+eyeRadius*nodePercent*viewVector,eyeRadius/10]
}]
},AspectRatio->Automatic]];

(*Real Program Starts Here*)
f=fixate[[2]]-n r;d=distraction[[2]]-fixate[[2]];
(*fixate={0,f};distraction={0,f+d};*)
r=eyeRadius=1.3;i=interOcular=6.5;aimOffset=0;
n=nodePercent=1/2;
aim=0;
headAimVector[aim_]:={Sin[aim π/180],Cos[aim π/180]};
base[t_]:={interOcular*t,0};aimHead[t_]:={0,1};

t=-1/2.;

Show[{
inRays[headAimVector[aim],fixate+{.6 scale,0},distraction+{.6 scale,0},base[0]+{.6 scale,0}]
,
outRays[headAimVector[aim],fixate+{.6 scale,0},distraction+{.6 scale,0},base[0]+{.6 scale,0}]
,
Graphics[{AbsolutePointSize[4],Point[midPoint[headAimVector[aim],base[0]+{.6 scale,0}]]}]
,
Graphics[{Red,AbsolutePointSize[4],{Point[fixate],Text[Row[{Style["f",Italic]," = ",f," cm"}],fixate/2+scale{-.08,0}],Line[{leftEyeNode[headAimVector[aim],fixate+{.6 scale,0},base[0]+{.6 scale,0}],fixate+{.6 scale,0}}],Line[{rightEyeNode[headAimVector[aim],fixate+{.6 scale,0},base[0]+{.6 scale,0}],fixate+{.6 scale,0}}],
Circle[fixate,1,{leftφ[headAimVector[aim],fixate+{.6 scale,0},base[0]+{.6 scale,0}]+π,rightφ[headAimVector[aim],fixate+{.6 scale,0},base[0]+{.6 scale,0}]+π}],Text[Row[
{HoldForm[((Style["d",Italic]α)/(Style["d",Italic]t))],"(0)"," = ",Round[degrees[(i/(f+n r))],.1],"°/sec"}],scale{.25,.6}]}}]
,
Graphics[{Blue,AbsolutePointSize[5],{Point[distraction],Text[Row[{Style["d",Italic]," = ",d," cm"}],(distraction+fixate)/2+scale{-.08,0}],Circle[distraction,1,{leftδ[headAimVector[aim],fixate+{.6 scale,0}, distraction+{.6 scale,0},base[0]+{.6 scale,0}]+π,rightδ[headAimVector[aim],fixate+{.6 scale,0}, distraction+{.6 scale,0},base[0]+{.6 scale,0}]+π}]}}],
Graphics[{Black,Text[Row[{HoldForm[((Style["d",Italic]θ)/(Style["d",Italic]α))]," = ",Round[(d/(f+d)),.01]}],scale{.25,.4}]}]
,
Graphics[{Black,Text[Row[{HoldForm[((Style["d",Italic]θ)/(Style["d",Italic]α-Style["d",Italic]θ))]," = ",Round[(d/f),.01]}],scale{.25,.2}]}]
,
Graphics[{Magenta,{Text[Row[{HoldForm[((Style["d",Italic]θ)/(Style["d",Italic]t))],"(0)"," = ",Round[N[degrees[((d i)/((d+f) (f+n r)))]],.01],"°/sec"}],scale{.25,.8}]}}],
movingEyePict[rightEyeCenter[aimHead[t],base[t]],fixate]
,
Graphics[{Black,{Line[{2rightEyeCenter[aimHead[t],base[t]]-leftEyeCenter[aimHead[t],base[t]],2leftEyeCenter[aimHead[t],base[t]]-rightEyeCenter[aimHead[t],base[t]]}]}
}]
,
Graphics[{Red,AbsolutePointSize[4],{Point[fixate],
Line[{leftEyeNode[aimHead[t],fixate,base[t]],fixate}],Line[{rightEyeNode[aimHead[t],fixate,base[t]],fixate}]}}]
,
Graphics[{Blue,AbsolutePointSize[5],{Point[distraction],Line[{leftEyeNode[aimHead[t],fixate,base[t]],distraction}],
Line[{rightEyeNode[aimHead[t],fixate,base[t]]+{.1,0},distraction+{.1,0}}],Line[{fixate,distraction}]}}],
Graphics[{Purple,{Text[Row[{Style["t",Italic]," = ",0}],scale{-.04 ,.05}]}}],Graphics[{Red,AbsolutePointSize[4],{Point[fixate],Text["F",{-.05scale,f}]}}],
Graphics[{Blue,AbsolutePointSize[4],{Point[distraction],Text["D",{-.05scale,f+d}]}}]
},PlotRange->{scale{-.2,.8 },{-2.5,scale}},AspectRatio->Automatic,ImageSize->{400,400}]
,{{fixate,{0,50+n r}},{0,15+n r},{0,1000+n r},Locator},
{{distraction,{0,60+n r}},{0,5+n r},{0,1100+n r},Locator},
{{scale,64},50,1200,Appearance->"Labeled"},TrackedSymbols->Manipulate]

CAPTION

This Demonstration interactively computes retinal motion, pursuit, the motion/pursuit ratio, and the motion/pursuit law for relative depth of objects on the y axis.  The observer's eyes are "fixed" on the point F (the "fixate" point). "Fixation" means the ray from F through the eye node strikes the fovea at the center of the retina (see: Fixation and Distraction (Visual Depth Perception 5)).

DETAILS

We recently discovered a new formula for visual depth perception from motion parallax. Neurological work by J. W. Nadler, D. E. Angelaki, and G. C. DeAngelis in "A Neural Representation of Depth from Motion Parallax in Macaque Visual Cortex" (Nature, 452(7187), 2008 pp. 642–645) suggests that an extra-retinal signal is needed for depth perception. In the static case, retinal disparity and motor control convergence are both needed to mathematically determine depth. Our dynamic formula involves a moving retinal image cue and an eye pursuit motor control cue that we believe is the needed extra-retinal signal.

Mark Nawrot conducted psychophysical experiments that indicate people use the motion/pursuit ratio to determine depth from motion. (Our joint work has not yet appeared.) Previous work by Nawrot and others (such as M. Nawrot and L. Joyce, Vision Research, "The Pursuit Theory of Motion Parallax," 46(28), 2006 pp. 4709–4725) suggested that the motion/pursuit ratio was important. Our new formula forms a theoretical basis to understand past work, suggest new experiments, and perhaps even find a neurological basis for the formula.

Mathematica 6 played a role in this discovery and is helpful in explaining both the new dynamic formula and the old static formula for depth. There is a remarkable relation between the dynamic and static formulas. This collection of Demonstrations explains the new and old formulas interactively and lets you make your own computations. Perhaps the computations will be helpful in designing new experiments.

We begin with a description of the formula for depth from motion parallax in a symmetric case with links to Demonstrations that explain basic terms and quantities. We outline the other visual depth perception Demonstrations below.

Fixation on F=(0,f) causes the eyes to rotate because of the observer's continuous translation.    "Fixation" means the ray from F through the eye node strikes the fovea at the center of the retina (see: Fixation and Distraction (Visual Depth Perception 5)).  Since the eye translates, it must rotate to maintain fixation (see: Tracking and Separation (Visual Depth Perception 11)).

The derivative in terms of the eye parameters, the node percent n, interocular distance i, and eye radius r above is

((dα)/(dt))(t) =((i (f+n r))/((((f+n r))^2)+(i^2) (t^2))).

This peaks at t=0 (when the denominator is largest):

((dα)/(dt))(0) =(i/(f+n r)).

The observer's translation also causes the angle separating the fixate and distraction to change, causing motion of the image of D=(0,f+d) on the retina. In this case, where the distractor is also on the y axis, at t=0 this derivative is

((dθ)/(dt))(0) =((d i)/((d+f) (f+n r))).

The ratio of retinal motion over pursuit is

((dθ)/(dα))(0) =(d/(f+d)) .

The basic case of the motion/pursuit law for relative depth from motion parallax is

(d/f)=((dθ)/(dβ))=((dθ)/(dα-dθ))=((dθ)/(dα))(1/(1-((dθ)/(dα))))

where the angle β=α-θ simplifies the math, but may not correspond to a neurological signal.

You can compute all these quantities in this Demonstration by dragging the fixate and distractor. The Demonstration "Motion, Pursuit, Fixate and Distractor (Visual Depth Perception 2)" plots the values of retinal motion and smooth eye pursuit for your choice of fixate and distractor in this basic one-dimensional setting.

The Visual Depth Perception Demonstrations

The ratio of retinal motion and tracking pursuit derivatives extends to a distractor located anywhere in the horizontal fixation plane. The Demonstrations "Motion/Pursuit Law in 2D (Visual Depth Perception 3)" and "Motion/Pursuit Law on Invariant Circles (Visual Depth Perception 4)" allow you to do computations with the 2D formula. The two-dimensional motion/pursuit law does not peak at time t=0 as it does in the symmetric 1D case above and the peak time value of the formula gives a good measure of the relative distance for a 2D distractor.

The time zero value of the motion/pursuit formula is invariant on circles with diameter on the y axis so it is not a good measure of relative distance when the distractor is displaced left or right. A similar thing happens with binocular disparity as explained in the Demonstration "Vieth–Müller Circles (Visual Depth Perception 8)". Binocular disparity is a well-studied static cue to depth that is explored in the Demonstrations "Binocular Disparity (Visual Depth Perception 7)" and "Disparity, Convergence and Depth (Visual Depth Perception 10)".

Neither binocular disparity alone nor retinal motion alone is sufficient to determine relative depth. These results are shown in the Demonstrations "Binocular Disparity versus Depth (Visual Depth Perception 9)", "Motion Parallax versus Depth, 2D (Visual Depth Perception 12)", and "Motion Parallax versus Depth, 3D (Visual Depth Perception 13)".

The remarkable connection between the new motion/pursuit formula for depth and the classical formula for depth from disparity and convergence is explored in the Demonstration "Dynamic Approximation of Static Quantities (Visual Depth Perception 14)".

We do not know a visual cue that could give a translating observer an accurate estimate of the speed of translation, but if speed is known, the motion/pursuit ratio would determine the absolute distance as you can compute in the Demonstrations "Speed, Motion, Pursuit and Depth (Visual Depth Perception 15)" and "Speed, Pursuit, M/P Ratio and Depth (Visual Depth Perception 16)".

Experimental evidence suggests that people often perceive distractors closer to them than they actually are. The motion/pursuit ratio d θ/d α also has this property and it remains to be seen experimentally how human perception compares with d θ/d α and d θ/d β. You can explore this comparison computationally in the Demonstrations "Motion/Pursuit Ratio and Depth in 1D (Visual Depth Perception 17)" and "Motion/Pursuit Ratio and Depth in 2D (Visual Depth Perception 18)".

THIS NOTEBOOK IS THE SOURCE CODE FROM

"Motion/Pursuit Law in 1D (Visual Depth Perception 1)" from the Wolfram Demonstrations Project
 http://demonstrations.wolfram.com/MotionPursuitLawIn1DVisualDepthPerception1/

Contributed by: Keith Stroyan

A full-function Wolfram Mathematica system (Version 6 or higher) is required to edit this notebook.
GET WOLFRAM MATHEMATICA »

© Wolfram Demonstrations Project & Contributors   |   Terms of Use   |   Make a new version of this Demonstration »