# Conformal Mapping and Video Generation

## What is the mapping?

1. Output image coordinates (x_img,y_img) normalized to [-0.5, 0.5] * [-0.5, 0.5] are multiplied by scale_in to obtain (x,y)
2. (x,y) is mapped to (u,v) using a conformal or similar mapping.
3. (u,v) is multiplied by scale_out, and then mapped to (u_tex, v_tex) such that the part inside [-0.5, 0.5] * [-0.5, 0.5] corresponds to the entire rectangular texture.
4. If (u_tex, v_tex) is a valid coordinate in the input texture, we output the (filtered) texel color, otherwise, we output the default color black.

## How to get the example results

Environment: Python 3.11. Do `pip install -r requirements.txt` to get necessary packages.

`python map2video.py color_rotate.png color_rotate.gif --num_frames 40`

`python map2video.py grid.jpg grid_holo.mp4 --num_frames 40 --map_type holo`

`python map2video.py grid.jpg grid_anti.mp4 --num_frames 40 --map_type antiholo`

`python map2video.py grid.jpg grid_exp.mp4 --num_frames 40 --map_type exp --scale_out 0.25 --scale_in 6.28`

`python map2video.py grid.jpg grid_log.mp4 --num_frames 40 --map_type log --scale_out 0.159 --scale_in 4`

The scale in and scale out parameters are chosen so that combining the two mapping should give the identity mapping.

## 关于二维保角变换

保角变换 [Conformal Mapping](https://en.wikipedia.org/wiki/Conformal_map) 可以理解为保持角度不变的映射。[参考这里](https://en.wikipedia.org/wiki/Conformal_map#In_two_dimensions)，二维平面中，映射保角的充要条件是对应的复变函数在解析（全纯）且导数不为零。如果映射对应的复变函数的共轭是全纯的，那么映射保角度但会让角的"方向"反向。

### exp
比如，对复变函数 $f(z) = e^z$，由于$f'(z)=e^z$，f 在全平面解析，所以带入 $z=x+iy$ 得到的映射$(x,y)\rightarrow (e^x\cos(y), e^x\sin(y))$ 就是一个保角映射。

### log
又比如复变函数 $f(z) = \log(z)$，解析，对应的映射是 $(x,y)\rightarrow (\log(x^2+y^2),\arctan(\frac{y}{x}))$，也保角。

### antiholo
$(x,y)\rightarrow (\frac{x}{x^2+y^2}, \frac{y}{x^2+y^2})$  对应的复变函数是 $f(z)=z/|z|^2=\frac{z}{z\bar{z}}=\frac{1}{|z|}$，可以证明它不解析。然而，它的共轭$\bar{f(z)}=\frac{1}{z}$是解析的，因为导数是 $\frac{d}{dz}(\frac{1}{z}) = -\frac{1}{z^2}$。因此，这是一个反方向的保角映射，即这个变换保持角度不变，但会镜像。

它在几何上称为反演变换 [Inversion Transformation](https://en.wikipedia.org/wiki/Inversion_transformation) ，等同于把平面上的点映射到关于单位圆的对称点上：半径变为原来的倒数，角度不变。

### holo
$(x,y) \rightarrow (\frac{x}{x^2+y^2},\frac{-y}{x^2+y^2})$对应的复变函数是 $f(z)=\frac{1}{z}$，解析，因此这是一个真的保角映射。