Message Boards Message Boards

Anamorphisis and reflection between a Spherical Mirror and a Cylinder

Posted 5 years ago

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

POSTED BY: Erik Mahieu

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!

POSTED BY: Moderation Team
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract