C语言画小猪佩奇
分享下如何用 C 语言画小猪佩奇
使用带符号距离场(signed distance field, SDF)表示圆形:
沿用这个方法表示形状,但这次我们想利用 ASCII 字符|/=\画出形状的外框,并填充内部,类似这样:
=====
//.....\\
||.......||
\\.....//
=====
SDF 的梯度(gradient)代表 SDF 变化最大的方向,可用这个方向去决定用哪一个字符。
我们通过差分求 SDF 的梯度近似值,然后用atan2()求出梯度的角度:
用 C 语言简单实现,在画布中画一个半径 0.8 并带有 0.1 寛度外框的圆形:
#include #include #define T doubleT 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)) < 0.05) {
T dx = f(x + delta, y) - f(x - delta, y);
T dy = f(x, y + delta) - f(x, y - delta);
return "|/=\\|/=\\|"[(int)((atan2(dy, dx) / 6.2831853072 + 0.5) * 8 + 0.5)];