Function Repository Resource:

ConicAnamorphosisMap

Source Notebook

Convert a point reflected in the base of a right conical mirror to its conic anamorphic map in the xy plane

Contributed by: Erik Mahieu

ResourceFunction["ConicAnamorphosisMap"][pt,α]

converts a point pt inside the unit disk base of a right circular cone with opening angle α to its conical anamorphic map in the xy-plane.

Details and Options

The domain of ResourceFunction["ConicAnamorphosisMap"] is the unit disk Disk[].
The range of ResourceFunction["ConicAnamorphosisMap"] is Annulus[{0,0},{1,Tan[α]/Tan[α/2]] with α<Pi/2.

Examples

Basic Examples (1) 

Get the anamorphic map of a point reflected in the base of a cone with a 60 Degree opening angle:

In[1]:=
ResourceFunction["ConicAnamorphosisMap"][{-.54, .23}, 60 Degree]
Out[1]=

Scope (1) 

The function can be applied to sets of points as e.g. a 5 star polar curve: the blue curve is the reflected curve and the red curve is the conical anamorphic curve:

In[2]:=
Module[{pts, anas},
 pts = .5 (1 + 0.2` Sin[5 #1]) {Cos[#1], Sin[#1]} + {.05, .23} & /@ Range[0, 2 Pi, Pi/50];
 anas = Map[ResourceFunction["ConicAnamorphosisMap"][#1, 60 Degree] &,
    pts];
 Graphics[{Circle[], Blue, Line[pts], Red, Line[anas]}]]
Out[2]=

Applications (1) 

The function can be applied to photographic images that are converted into a radial set of colored polygons:

In[3]:=
mandrill = ImageResize[ExampleData[{"TestImage", "Mandrill"}], 50];
In[4]:=
polys = ResourceFunction["ImageRadialDivide"][mandrill];
In[5]:=
Graphics[{polys, MapAt[ResourceFunction["ConicAnamorphosisMap"][.99 #, 60 \[Degree]] &, polys, {All, -1, -1, All}]}]
Out[5]=

Neat Examples (1) 

Circular logos are ideally suited for conical anamorphic images. Here are a top (right) and default 3D view of an anamorphic conversion of the Wolfram logo reflected in a conical mirror:

In[6]:=
wolf = ImageResize[\!\(\*
GraphicsBox[
TagBox[RasterBox[CompressedData["
1:eJztXQeUFFXWVnKaDpPzDAxRFBiQDAMIEgRJgyxIEBQZyRkcEQQlOT+ISgYR
WSQHEYYkYde0gKgIrLC7YgBUQDAjZt//vjo2W139XoWuV13ds/Wd83mOQ3d1
vVe33rv3vhsq3j+q++BiN91007gy9D/dB05qNXbswPxcD/2fe0aOG5I38sFB
HUaOfzDvwbGN7i9O/1jwJ0tQEgcOHDhw4MCBAwcOHDhw4MCBAwcOKD777DOy
d+9esmDBAjJu3DiSm5tLGjduTKpVq0ZiY2NJ6dKlCdxJcpYqVYrExMSQKlWq
kEaNGpGuXbuSUaNGkfnz55PCwkJy7tw5u4flwAR++OEHsm/fPvLYY4+Rtm3b
Eq/XGyADouhyuUirVq1Ifn4+2bVrF/n222/tHr4DFZw9e5YUFBRIzwzrgFVy
ocXixYuT5s2bk8cff5ycPHnS7mlxQHHhwgUyY8YMUrt2bdvkQovY16ZMmSLJ
sYPQ4ffffyfbtm0j7du3J8WKFbNdDoywZcuWZO3ateTnn3+2exqLLL7//ntJ
f6xYsaLtz9ssk5OTyaxZs8jXX39t97QWGUA+Zs+eLdkdZp9PubJlSfXUdNIy
M4v0SMskQxNTyJSYOLLA4yGr3RVIoas02S3jX+nfFtJ/mxYTS4YlJJN76Hda
0e/WTMsg5cuVM30/brdb0rUdeQkev/76K1m8eLFkswb7HLKSU0iH9EwyPjaB
7HCVIR94byYfem8Sxr2uUiSfylknKj+Qv5tvvjloeYEO/tNPP9k97RGF/fv3
k1tuucXwfMMH0iSzEhkTl0j+7iouVCb08LC7BJlE5aY5vYdg1hvsqS+99JLd
0x/2+OKLL0jfvn0NzS3e4bp0zZgYG09OeIppPssJ9DmudEVZLjNnKB/zxpCG
9N5gKxsZU+fOncn58+ftfhxhiU2bNpHo6Gj9a3VUFOmWmkH2UD1C77O7LyFF
+m5Xuk+Ecp35m6sE6ZWSTmI8+v19UXR8zz33nN2PJWwA/2X//v11z1+cN5oM
pjrlSY8xXaNHYsqNa6TGJ4R8TwL/5S1GRtI9MSU+Xvd4u3TpQq5cuWL3Y7IV
8FdWrlxZ13xFuz3kASof/zQoH2Bf+j3l9da5ytkiK+B/qD49murWiTH6dPSU
lBRy+PBhux+XLXjxxRdJOR26XsmSJUlXumYfcwenl46gz4N1XewDdsmJj5D5
XkmppGyZMrrmYeHChXY/tpDhjz/+II8++qiu96hWWgbZ6g7+vS+g+kCJEiWY
165MbWa75cTHvdRmb0DHqmdOhg4dSn777Te7H6OlgL+6d+/emnMBf9jwuARy
1oS/YxfVb6Hrqv0OfCp2y4icD3tjNe8Z7Nixo3QmXhSBceFMRmsOqqekkZfd
ZU3NN2zSavQ6AWsI1YVq1qx54//7JaeZfraH3dq2uBEeoPKdrWNtQTzMN998
Y/djFQqMB2dgmu8J1RlgE5id6870Oqx38JdffpHOEH1/q5piTk6mRceQRukZ
wtcV+I17UvtMy79bt25dyedUFIB1REtG4EedEB0rZI7nu90B1+/evbt0zgx8
9dVXQvYeyAh0H7OypsYZ3mhSoXx51bnLzs6O+HUF+ki7du1Ux+ml9u4S+mxF
zOv71H5IS0j0uz5iG30y4kNmZqapvccnI/h+LH2WVskJuJ7a70mxcapz2LBh
w4jVV2DXaOmsqQkJZIdJXUTO3GR/nQT+3evXrwfc26JFi258Jsug3SOXERA+
eSvlBPybqySplBToA5IT72Mk2kGTJ09WHVdGYhJ5RaC9Ab+Z0gY+deoU895w
diL/nF7bWykjPuo5VzJLnDFWZ+jmcj700EMhfsrmAB+aloy8HqTfjMfaChth
4sSJ3PvDWldetu/r8bnxZATcaeCMyQzha9SSlaeffjqETzp4nDhxgpQtW1Z1
rxG5joBPeP3PDytUqKAZWzh27Ngbn8eaHqyMgM+5XSGRE/AolRW1PQj3+dpr
r4XoaQcHnOllZWWp6qwi9REQZyUVFfOmJ4bjyJEjft/h2T351A5TkxFwJpWj
UMkJiNiaZBXdNjExkVy6dCkETzw4qMWOwPYVZdfIOSLO375B7KnSvmHhxx9/
9Pte/6RAuwexKqxY7bRE/98cHxf68+eN7vKqNnOHDh2k/TXcsGHDBtV3TpR/
RE745JRnrkbiwerVq3fjezVS/XWUIVT+WDJSNT2D/Ivqx/K/PZhoz1nRHI9X
NecAdl044fLly6oxRh0tOpsdqTgLxpplxDZ84YUXbnwXvs9DUSWl67LiEMBb
K1chX1+5Ivkq5H+/JzXTFjkB/yKLq1ESeuKHH35o4ZM3BjU/CfTzfwuOXwbh
24bdJP8to7r+p59+6vf9PCofnZNSmePIrlpNkhEf/N6DjEq2yQnOSuupnAch
bzYcgNxu3j3i3NfsmR6Pk6MDY3yQw2EE2L/lMTC8OJDba9xCflBcW77et87M
sk1OQPjhPK7A8wofkVtmJ5A7Ub16de79DY21Tr9Tngf36NEjqDGMGDFCVa/K
qVM3QEaAKGp7+z7TrKK9cgJO8fLzmxAPZ6dfHzUiePeGGCMz8SNqXOEK1PPf
e++9oMZw9OhR7hhaZdfl+mHkclI/0759R84m6ZncsSCfzA5gjefl6CFGb4uJ
ODQt3pHunzvq8XiCtgGRW8UaQ6fGTVV1Yrmc1KL3Y7eMgAddpbl5Q9hfP//8
82Afd9BALidPdrtaGHt6xF08oKbNM888Y2osOG+VX697TgtNu0kuJ5VTUm2X
ER8HJPDtH9T4CSXU1hLExQcb86yHAxMD7ZGrV6+aGg/0PPn1/lG4S/M74Son
iOVLjmP7astQPT2Ua8q8efO4MovcCSvnIVNhC9evX9/0eODjll9z8oD7Nb8j
94XCh263fMg5iWEL+vjII4+Yni89gI2TkcG21xGzE0x+jV6uZuivqK8lAqif
5btm63rasie/h3CTE/iWlO/TjfU+Ojokts/mzZu5sjooPsnS8aMugPz3cD6H
mFcRkOeKJNJ1Ww04P5LfhzsqdOfFuteUGP454ZIlS4TMmRrg32P9NvIJjOZy
GiHOhZX5uSLX0NOnT/td++L5C9zPol6J/LNRdA+yWy5Y85XEyTdE/LWV+OST
T7gx4MgJt3LcM7yB50cXL14UNjasEbDnfdfevnQZ97Nffvll2MsJeB9D5/cx
WH+THjzxxBPM34Ts7LYwpgv5crEKOUF8tGgMHz5cly57VnFeHK5yAh+CXPbl
HDlypPD58+HWW29l/mZ2eqZlY33PU4wZv3X8+HHh43vnnXf+O6aq1chXly8z
P3fqjTciQk7AnAx2PbukpCRdcTpGcebMGe4ahho1VowRfv8mjLNQ5PRZAfjW
5Od7CdSO2bJoccDn/rFjZ8TISYFKzZU3qLyLBs//Ct+oVfHm9yti1XzkxdGL
wMaNGwN+r3frNuRHWX7H7lUvRIycQJ+F75M1j+PHjxc+f7ycviYWnYE976oQ
sLdCD0Icg9XYuXNnwDirZmSS04ePSP++tmCu37/B1rNbHtTYJr0S89nddttt
QucNfnqePjTKAp/JKUZeH2QEsc+hAvx3yrHCB7t54UKyfOo0v7+Hm59Nycej
+TEH6A8hCnv27OH+zqGoEsLH1T41UCfBPYQa2L+VfgDoL81q1fH7W6ZGXofd
hF+LlzOAXCtRQH121m9UsqDWzFOMvRS+UrsAG0irXmM4nQPyWJsTmzJkyBBh
c9WmTRvmb7TPEBt3gTxyZY07xMtZYb8ZwUcffSTljvHkpI6N8bF6iVhv5r3X
qSNsnhAHxPqNcYLzVu5JDsyJtCO2hgXUGeHVxkYu+38sit0TxZkcHQVrpYi+
DOhdwnuPtgvM/9zuLhegK0+fPl3AExYH6PO8+pQt0jKF1Pixisg35T1HET5L
ng5bpnRpoe9QQ4U/Def8os6CRQLvHvowseakPh2DlWehZhnPOCMD16xZY3pe
EFPIurbIOkLzGD7Dl19+WcBTtQbQlwYOHMiel+RUKU/CbplgsR7Hhw87xSzG
jBnDvHaOoFwExNRkKc5v4uLibNdd9eDJJ59kzg3qH6FPi91yoWQHjpz069fP
9Fx069aNee1ugmLMhzN88/CHRgqw7rFiLRCLmm9BTrUZ3pccWN8QxD5qFqg/
ybr2EAG51zgXSlDo4aj/HwlriRzvv/++X90dOe+mNly42EIPc2pzV61a1fQc
4Bqsa+cL8FX3iglcS1asWCHgyYUeqLmInpGsuUKtp3DQWeZzzo6RO2EWvPyL
p+hvmrnnd1zFAuIY4RNHXZJIBWLMe/bsyX4WdKz/Z3LOzBK1I1n3BpqtlcLr
BWxWT+sZFxh7FA516Ao3byErFywkqxYtJnu2biMfnT5DfjdYR3Hu3LnMOYMe
k5uUats+hJhDnpyY7VHIu+4GV/B1CI5TvSSGcY5jtFYH3gGRPV6/+PQz5lhR
R2Ta5Mnk4rlzuq+FM0TeO1YzNYPss6G2/rsefk0dq+TETDxsn+hAvQS98fQC
ei5sokGDBgmtLbVm+XLueH0clpdHvtc5p6h9zYsVRcwK+sKFUk6Oq8iJ2fMR
0XJy2luMWV8ZcWRagEwgTgn+FciVaH9t69atNeUERAzfzo2bdF0TsZTohcK7
1p2p6VIMcFGVk7VB9sMa4mHnH2nVuEHfeV+tFezzOHcSjcJNm8mWv64hc6ZN
J3WzszXlpW/v3uT6tWu6rr1jxw5ufAJisla4rY+Js3LfEanHIi66YkJgPiPi
FnjA+4iawfLPhyKfDbh0/gKZP3s2s+9Ys6ZNyeqly8ilc/r7gqKOHa/fLmSo
l8U6rpV6LM8ufiYIG296FPsc6uDBg8zfxv6unFc7fPpYM+bPmUNGDxtGXtu7
j1z/zlh9Lzlw71OnTuU+rxoC+g/xaKVdzPOzPRxETa36nFgZVq8CxHuwYoOg
l6xcuVLKTQzH+qh6gXw8N6MHDAiff15covB6VE9Z6GdD3h3r2nlJxmL91rmi
mDGaiONXAnsN8pC09APUXYb+G6n95nHfaj15a1Mdd69A+9lKvz3vHDDXYK/o
9knsMyjod0qg7gJ8VfI+OWqE/OHzIn0pocSxY8e49XdRR2u4oLhB3jlgixYt
TI+BF1fQ1EDezmE3v24lauKrAecmW7ZskXLsteSlSpUqEXeG6AN8/si74o2t
blqG6bXFyrgCXpxSFQMx5v2j2eud0Twj6CxzqD7Juhb2ei2ZiwR88MEH0ryo
rS3B6i1Wxinx4h5Rk1ePDYcxZcaz8z+DqX/Luh/sO1b4U+wC9PNdu3Zx9Vz0
Iy0Mws9pZdyjsra3nBt1nPE8WYFfJ/mKrA64HsBnyKr7b0U+dTgA+jxqsbPm
DrW+Ub9Kr79FLY5aVC0UXl7GGGq7ad1f00R2/ynobUaAd0zee9hHu+rnhhIP
PPAA9xmjf8B6Hb5xq/MygDvvvJP5Gx008rxedZWS5J71XfQPNAKsjcprIC4o
UvVWI1D20lXSE+XSjPPvwcjFlfaw7Gxh98nLG0W/CrV76+Nl668g8jH1AvLO
Oj9Ant7/CnjxT+BEHXG4ocgbVeuJwctDh/6axeljAxpZ65YtW2bp+CIB7777
LnMeW+moi4c4ZF4eusheGteuXePWtRjN0VHmRrF1GhB1wvUCeglL7y8KNrAR
4L1ired6YhJCVdcCaNWqFfN3GnBqs+Uk8Punrl69WvfvvvXWWwHfz8vLk/4N
9gD2btQEO3DggKTDFBQUSLqPj6idvXjxYrJ9+3by9ttvk48//lg6Gw3HXEM1
TJo0yW8OsA/rje1onc72m4iukwPw/FusultH3aWIq0IUV06M+Dqwvyi/j34y
avUDjDA1NZW0b9+ejB49Wuqnh3ME6E7nzp2TfMHhIE+FhYUB9z1Mh60Jopca
YudYY58wYYLwe1Wr4zdeUcdvsItfCxnvgd5zXnxO2RvDDsJnk5aWRjp27Cj1
PV66dKn07KAzoLc65Al+dyuAd0rpM2qapr9W7xyV/k2HDx+25J711gWtxemx
B9577726f0/NxxeOhC8Ctf87d+4sndUsX76c7N69W6oHgOf93XffGZIn5Kgk
JPjbjNBJjhuIk2zO8dVD7q2Ky1CrM7zrTz/y5qjyqvWHjOSXq9lZLGLtgU8Q
hExj/wXhZ/H9naePh5KwPRBH0717d0nvQG4bxgq/KPRKxIBCb73jjjv8vgdf
lJE8B7vqDGPP5tUt7/pnnEGXGPW4ESN9upHnDVsH+gPWe7n+4NNH8c5BnzXy
buDziI3CueKJEyekMyP0PYaNiF61OPscNmyY7fKk5FSDfdf721S3HGjXrh3z
d9G36G033cfj+L41I7oJYHe8Wk5Oju2y4eNfDMaF4dxHmbvtI/p7W42tW7dy
x9KAkS8spxHdJByg7N+kZDrV3+e6PWQCtT36paSTuzIqkcaZWaR6anpATqwZ
tk4x3pNzgkpfFfgtrQbWbL1xZkrirDzSgNpfamNqq1K3ATbpK65SZCHViybG
JpD7qCyhJ3aTilmkBrVZ0J+Nd/7lW3/bUpkzGoOv1qcJsbCseGQrMH/+/KDk
BPpApAH2Ce+83MdhXnO1GyBPr7uKS3kTIGJL9keVCrrem1rfN6Pnr2ag1kdS
7d2wW98IFocOHVIdG2rVLXG5TcmKKKK2Kq+PJPKkRfYs0gO1vrQs9u7dO6T3
JxpKG1VJ6IwH6R5jt5z0S+T3pYUNHmpgTeHVU2URsdCRDOyZPJ+AjzWT08gZ
G2uD7neV8euDKifqPRmNHxQF+DP0ygl8q5GOmTNnao6zTYL4Wu562ZgTYwLa
WYsXOh4vX1ZOnE8UhbgzjJeXZyNnnkm9Nhg+oqK74tw0VDYOD6z+I0qiR2lR
wauvvqo5XpwfPBtCvfYQtY88sv7LSq5fv97uaZPQp08f1XlbtWqV3bcoFFo6
rU+v3RcCvRa+krqM3ng+wn8eLoCOp7YeI9aoKEGPTgvWSE6ldqq1em0vlbN5
1OPAOVg4YdOmTdz7RT7nbwZr4YU79Oi0YEsBdXZ5nOmNVpXXUNWJMQq13PvB
gwfbfXtCoVenBQdFi+0/AyJnh2cDg4ipCle/JmKbsXbw7h3n9UUJenRaEL7o
eVEuYTKCmsWsGnc+JicnS7WbwhnoGcuqU+Xjhg0b7L5FodCj04JxdI/YHWW+
Z/wb7uLMvt8+Ii7pzTfftHtadGHdunWqc2ZHT0iroFenBatRnfOfJvTaY1RG
kCeq9hsLFiywe0oMQa0GGYj4saICXi4CizkJwfWcfJ3KSDUNGUH90UgDdCgt
v8qzzz5r920KAWw5I2ddAwz6a19xlZF6u6pd86677opYmxKxwNC71cY3bty4
sNXLjQA6gV45gQ5R4PLokpE11K5JjFGXwaZNm0q1yiIZuH9eLuGNtTgnJ6L7
ZPiA8wm9shLr8ZKdrvKqMoJ8z/IqNgF4++23S/lDRQF6ZAV1YcPNd2gUOLfX
q9OCVRJTyElP8QD5QJxjD6rzal2rQYMGERkjqAbISqdOnVTHjXlBLnAk70O8
noE8Nkv078d5wFWa1FI5r7nxvWbNisw6ogT0lb59+2rOQZMmTSJ2DozqtCDq
xEBGRscmSPktWp+/++67I14f0QLWCtTK0poL5Mw9//zzEbm2GNFpfWOtpWHz
+jh8+PCItWuCAXxxan5bH9F//PTp03bfrmEY0Wn1EDZSuJ7rWQ34+NXOg+RE
HPbVq1ftvmXdMKrTqhG1N44cOWL3kGwFcvgHDBige87gc0RtnEiAUZ2WRdSN
j6T3w2ogHt9IThB8veFexy8YndZH9HFGXxAHgYAvALXWjcwn6lcgHzUc6h6x
EMya0qVLlyJVX9sq7N+/n1uTh0fE9GONwT5up8wgrwC9gVAnzmjOJGqiFKXz
0VAA8WLwucVxciC1CHsDsS54L63MCYHdjpgg1LnBWhhMHR7UeIFcRWpfmHAA
8g6Ro2r03VSuNTgHQUwr1ir0SYb+bMQPgc8iXg9rBa6B/QT9SdVqR+mRD/iS
zPbmc/BfQF4QN4m1OdjnwiJ8XLA7a9WqRTp06OBH9PyJj4/n9tIMlohLnDVr
liMfFgJ7yLZt26RaXKzeGeFM9LiDfzFcde6iCugeM2bMIHXq1LFdBnhEDUH0
B0D/ZQf2A88BuiDiF0TvE0YIfaV58+ZSbcyTJ0/aPS0OVICzVOQ9Q0eE3eP1
iquVpqTL5ZJkMz8/X/Lj/K/V3S9qQF1W2K6IR0esZW5urtRzFz1Z4TNl1b2G
jQs7C2dQjRo1Il27diWjRo2S6o6hHjXqpDpw4MCBAwcOHDhw4MCBAwcOHDhw
APw/D1prWQ==
"], {{0, 138.}, {138., 0}}, {0, 255},
ColorFunction->RGBColor],
BoxForm`ImageTag[
       "Byte", ColorSpace -> "RGB", Interleaving -> True, MetaInformation -> <|"XMP" -> <|"BasicSchema" -> <|"CreatorTool" -> "Adobe Photoshop CC 2015.5 (Macintosh)"|>, "MediaManagementSchema" -> <|"DerivedFrom" -> <|"DerivedFrom" -> <|"InstanceID" -> "xmp.iid:724B5939489A11E6B11CEF5EF1A2CCEF", "DocumentID" -> "xmp.did:724B593A489A11E6B11CEF5EF1A2CCEF"|>|>, "DocumentID" -> "xmp.did:724B593C489A11E6B11CEF5EF1A2CCEF", "InstanceID" -> "xmp.iid:724B593B489A11E6B11CEF5EF1A2CCEF"|>, "RightsManagementSchema" -> <|"DerivedFrom" -> <|"DerivedFrom" -> <|"InstanceID" -> "xmp.iid:724B5939489A11E6B11CEF5EF1A2CCEF", "DocumentID" -> "xmp.did:724B593A489A11E6B11CEF5EF1A2CCEF"|>|>|>, "PagedTextSchema" -> <|"DerivedFrom" -> <|"DerivedFrom" -> <|"InstanceID" -> "xmp.iid:724B5939489A11E6B11CEF5EF1A2CCEF", "DocumentID" -> "xmp.did:724B593A489A11E6B11CEF5EF1A2CCEF"|>|>|>|>|>],
Selectable->False],
DefaultBaseStyle->"ImageGraphics",
ImageSizeRaw->{138., 138.},
PlotRange->{{0, 138.}, {0, 138.}}]\), 50];
In[7]:=
Module[{im, data2D, data3D, anaData}, im = wolf; data2D = ResourceFunction["ImageRadialDivide"][wolf]; data3D = data2D /. {x_?NumericQ, y_} :> {x, y, .001}; anaData = MapAt[ResourceFunction["ConicAnamorphosisMap"][.99 #1, 72. \[Degree]] &, data2D, {All, -1, All, All}] /. {x_?NumericQ, y_?NumericQ} :> {x, y, .001}; GraphicsGrid[{(Graphics3D[{{Opacity[.5], Cone[{{0, 0, 0}, {0, 0, 1.5}}, 1]}, {LightGray, Opacity[.75],
          Cylinder[{{0, 0, 0}, {0, 0, .0005}}, 4.25]}, data3D, anaData}, PlotRange -> {{-5, 5}, {-5, 5}, {0, 2}}, Boxed -> False, Lighting -> {{"Ambient", GrayLevel[.5]}, {"Point", White, {0, 25, 25}}}, ViewAngle -> 5 \[Degree], ViewPoint -> #1] &) /@ {{0., -8.138481, 6.14}, {0, -.1, 10.14}}}, Spacings -> 0]]
Out[7]=

Publisher

Erik Mahieu

Version History

  • 1.0.0 – 23 November 2020

Related Resources

License Information