Message Boards Message Boards


Anamorphisis and reflection between a Spherical Mirror and a Cylinder

Posted 2 years ago
1 Reply
4 Total Likes

complete setup

Catoptric or mirror anamorphoses are deformed images that can only be seen undeformed with the help of a mirror. Here, we experiment with a convex spherical mirror surrounded by a vertical cylindrical surface. We want to compute points of a deformed (anamorphic) image on the cylinder's inner surface such that it is perceived by the viewer as an undeformed image.


The above drawing shows the anamorphic setup: a spherical mirror (radius r=1), surrounded by a cylindrical surface (radius R>r). The viewpoint V is along the vertical axis of the cylinder (at infinity relative to the size of the sphere). A point S (xa,ya,za) on the cylinder's inner surface is reflected by the mirror at Q to the viewer's eye at V. The viewer perceives the point at I (xi,yi,0). The lines VQ and SQ form equal angles with the normal to the sphere at Q.


This animation demonstrates the relation between the point I traveling along a straight line while its anamorphic map follows a curve on the inner surface of the cylinder.

We now write a function that expresses this geometric relationship:

sphere2Cylinder[imagePoint : {xi_, yi_}, cylinderRadius : R_] :=
 {(R xi)/Sqrt[xi^2 + yi^2], (R yi)/Sqrt[xi^2 + yi^2], 
  Sqrt[1 - xi^2 - 
    yi^2] + (R - Sqrt[xi^2 + yi^2]) Cot[2 ArcSin[Sqrt[xi^2 + yi^2]]]}

This function maps an image point to an anamorphic point. To test our function, we need a full image as an assembly of many points. We take a circular drawing (logo) to fill the complete bottom of the sphere. Many of these logos can be generated by the Wolfram Demonstration "Character Rotation Patterns" by Chris Carlson.
This is a pasted snapshot from this demonstration's output creating a circular S-logo:

DynamicModule[{letter = 19, offset = 0.53, rotation = 5, n = 8, 
   upperCase = True}, 
        Style[FromCharacterCode[If[upperCase, 64, 96] + letter], 300, 
         FontFamily -> "Arial"], {0, 0}], rotation, {0, 0}], {offset, 
       0}], r, {0, 0}], {r, 0, 2 \[Pi] - 0.01`, (2 \[Pi])/n}]]];
sun = ImageResize[Binarize@ ImageCrop[%], 950];


We now convert this image to a GraphicsComplex using ImageGraphics:

ig = ImageGraphics[sun, 2, Method -> "Exact"];
lines = Normal[ig][[1, -1]] /. FilledCurve -> Identity;
scaledLines = Map[#/948 - .5 &, lines, {6}]
Graphics[{Thick, scaledLines}]

logo outline

We now convert the point coordinates of the lines in the GraphicsComplex to their anamorphic map {xa,ya,za} using the function sphere2Cylinder. We then convert the anamorphic drawing to the 2 dimensional developed interior face of the cylinder as {ArcTan(xa,ya) , za}.

anaLines = Map[sphere2Cylinder[#, 1.15] &, scaledLines, {5}];
developLineCoordinates = 
  Flatten[Map[{ArcTan @@ Most[#], Last[#]} &, anaLines, {5}][[-1]], 
    1][[All, 1]];
  Table[BezierCurve[#, SplineDegree -> 15] & /@ 
    SplitBy[developLineCoordinates[[i]], #[[1]] < 0 &], {i, 1, 10}]}, 
 Frame -> True]

anamorph logo

After printing the cylinder development to the right size (50 cm by 20 cm), it is glued around a transparent plastic cylinder (radius 8 cm) and a spherical mirror (a reflecting Christmas ball of radius 7 cm) is put inside at the center. The anamorphic image on the cylinder wall is reflected as the undeformed original by the spherical mirror. Here is the result:

complete setup

enter image description here - Congratulations! This post is now a Staff Pick as distinguished by a badge on your profile! Thank you, keep it coming, and consider contributing your work to the The Notebook Archive!

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract