如何用 C 语言画小猪佩奇

您所在的位置:网站首页 c语言stdinth 如何用 C 语言画小猪佩奇

如何用 C 语言画小猪佩奇

2023-03-11 15:08| 来源: 网络整理| 查看: 265

我们曾在《用 C 语言画光(一):基础》中,使用到带符号距离场(signed distance field, SDF)表示圆形:

\phi_\text{circle}(\mathbf{x})=\| \mathbf{x} - \mathbf{c}\| - r\tag{1}

沿用这个方法表示形状,但这次我们想利用 ASCII 字符|/=\画出形状的外框,并填充内部,类似这样:

===== //.....\\ ||.......|| \\.....// =====

SDF 的梯度(gradient)代表 SDF 变化最大的方向,可用这个方向去决定用哪一个字符。

我们通过差分求 SDF 的梯度近似值,然后用 atan2() 求出梯度的角度:

\begin{align} \theta &= \mathrm{atan2} \left(\frac{\partial \phi(\mathbf{x})}{\partial y}, \frac{\partial \phi(\mathbf{x})}{\partial x} \right) \tag{2}\\ &\approx \mathrm{atan2} \left(\phi(x,y+\Delta) - \phi(x,y-\Delta), \phi(x+\Delta,y) - \phi(x-\Delta,y)\right) \tag{3}\\ \end{align}

用 C 语言简单实现,在 [-1, 1]\times[-1,1] 画布中画一个半径 0.8 并带有 0.1 寛度外框的圆形:

#include #include #define T double T f(T x, T y) { return sqrt(x * x + y * y) - 0.8f; } char outline(T x, T y) { T delta = 0.001; if (fabs(f(x, y))

2倍:

4 倍:

8 倍:

今天也是精致的猪猪女孩~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3