是否可以在 LaTeX 中根据给定的参考圆反转图像(格式为 png、jpg、bmp)?我们可以变换单个像素吗(例如使用复杂的变换,如莫比乌斯变换)?
数学逆变换是欧氏平面的几何变换。在坐标几何中,如果参考圆是单位圆,且 P(x,y) 不是原点,则 P(x,y) 的像为 P'(\frac{x}{x^2+y^2},\frac{y}{x^2+y^2})。在复平面中,如果参考圆是单位圆,且 z 不是原点,则其像为 z'=\overline{1/z}。
(PS 如何过滤距离原点较远的点的图像?)
答案1
为什么不呢?
\documentclass[border=9,tikz]{standalone}
\begin{document}
\pgfmathdeclarefunction{fx}{2}{\pgfmathparse{25*(#1/10+3)/((#1/10+3)^2+(#2/10+0)^2)}}
\pgfmathdeclarefunction{fy}{2}{\pgfmathparse{25*(#2/10+0)/((#1/10+3)^2+(#2/10+0)^2)}}
\pgfmathdeclarefunction{fxx}{2}{\pgfmathparse{fx(#1+1,#2)-fx(#1,#2)}}
\pgfmathdeclarefunction{fxy}{2}{\pgfmathparse{fy(#1+1,#2)-fy(#1,#2)}}
\pgfmathdeclarefunction{fyx}{2}{\pgfmathparse{fx(#1,#2+1)-fx(#1,#2)}}
\pgfmathdeclarefunction{fyy}{2}{\pgfmathparse{fy(#1,#2+1)-fy(#1,#2)}}
\tikz{
\path(-6,-5)(13,5);
\draw circle(.05)circle(5)
(3,0)node{\includegraphics[width=2cm]{lenna.png}};
\foreach\i in{-10,...,9}{
\foreach\j in{-10,...,9}{
\pgfmathsetmacro\aa{fxx(\i,\j)}
\pgfmathsetmacro\ab{fxy(\i,\j)}
\pgfmathsetmacro\ba{fyx(\i,\j)}
\pgfmathsetmacro\bb{fyy(\i,\j)}
\pgfmathsetmacro\xx{fx (\i,\j)}
\pgfmathsetmacro\yy{fy (\i,\j)}
\pgflowlevelobj{
\pgfsettransformentries{\aa}{\ab}{\ba}{\bb}{\xx cm}{\yy cm}
}{
\fill[black!10](1,0)--(0,0)--(0,1);
\clip(1,0)--(0,0)--(0,1)--cycle;
\tikzset{shift={(-\i,-\j)}}
\path(0,0)node{\includegraphics[width=20cm]{lenna.png}};
}
\pgfmathsetmacro\aa{fxx(\i ,\j+1)}
\pgfmathsetmacro\ab{fxy(\i ,\j+1)}
\pgfmathsetmacro\ba{fyx(\i+1,\j )}
\pgfmathsetmacro\bb{fyy(\i+1,\j )}
\pgfmathsetmacro\xx{fx (\i+1,\j+1)}
\pgfmathsetmacro\yy{fy (\i+1,\j+1)}
\pgflowlevelobj{
\pgfsettransformentries{\aa}{\ab}{\ba}{\bb}{\xx cm}{\yy cm}
}{
\clip(0,0)--(-1,0)--(0,-1)--cycle;
\tikzset{shift={(-\i-1,-\j-1)}}
\path(0,0)node{\includegraphics[width=20cm]{lenna.png}};
}
}
}
}
\end{document}