conformal-mapping/readme.md
2025-04-30 00:48:14 -07:00

42 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}$,解析,因此这是一个真的保角映射。