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)];

}

else if (f(x, y) < 0)

return '.';

else

return ' ';}int main() {

for (T y = -1; y < 1; y += 0.05, putchar('\n'))

for (T x = -1; x < 1; x += 0.025)

putchar(outline(x, y));}

代码可以左右移动!▲

然后,我们就可以画多个圆形,把它们适当地旋转和缩放,用构造实体几何比它们组合起来,那么用 19 行代码就可以画出小猪佩奇了:

代码可以左右移动!▼

// ASCII Peppa Pig by Milo Yip#include #include #include #define T double

T c(T x,T y,T r){return sqrt(x*x+y*y)-r;}

T u(T x,T y,T t){return x*cos(t)+y*sin(t);}

T v(T x,T y,T t){return y*cos(t)-x*sin(t);}

T fa(T x,T y){return fmin(c(x,y,0.5),c(x*0.47+0.15,y+0.25,0.3));}

T no(T x,T y){return c(x*1.2+0.97,y+0.25,0.2);}

T nh(T x,T y){return fmin(c(x+0.9,y+0.25,0.03),c(x+0.75,y+0.25,0.03));}

T ea(T x,T y){return fmin(c(x*1.7+0.3,y+0.7,0.15),c(u(x,y,0.25)*1.7,v(x,y,0.25)+0.65,0.15));}

T ey(T x,T y){return fmin(c(x+0.4,y+0.35,0.1),c(x+0.15,y+0.35,0.1));}

T pu(T x,T y){return fmin(c(x+0.38,y+0.33,0.03),c(x+0.13,y+0.33,0.03));}

T fr(T x,T y){return c(x*1.1-0.3,y+0.1,0.15);}

T mo(T x,T y){return fmax(c(x+0.15,y-0.05,0.2),-c(x+0.15,y,0.25));}

T o(T x,T y,T(*f)(T,T),T i){T r=f(x,y);return fabs(r)<0.02?(atan2(f(x,y+1e-3)-r,f(x+1e-3,y)-r)+0.3)*1.273+6.5:r<0?i:0;}

T s(T x,T y,T(*f)(T,T),T i){return f(x,y)<0?i:0;}

T f(T x,T y){return o(x,y,no,1)?fmax(o(x,y,no,1),s(x,y,nh,12)):fmax(o(x,y,fa,1),fmax(o(x,y,ey,11),fmax(o(x,y,ea,1),fmax(o(x,y,mo,1),fmax(s(x,y,fr,13),s(x,y,pu,12))))));}

int main(int a,char**b){for(T y=-1,s=a>1?strtod(b[1],0):1;y<0.6;y+=0.05/s,putchar('\n'))for(T x=-1;x<0.6;x+=0.025/s)putchar(" .|/=\\|/=\\| @!"[(int)f(u(x,y,0.3),v(x,y,0.3))]);}

2倍:

4倍:

8倍:

怎么样?这下会了吗?你还可以尝试着让这只佩奇动起来哟

人打赏

0人 点赞

主帖获得的天涯分:0

举报 |

楼主

|

楼主发言:1次 发图:0张 | 添加到话题 |

c语言画猪程序,C语言画小猪佩奇(转载)相关推荐

  1. python画圆形螺旋线_宝宝爱看小猪佩奇,很简单,让我们用python搞定它

    现在很多宝宝喜欢看小猪佩奇,今天就教大家用python的海龟画图画一个乖巧萌萌的小猪佩奇,引导对编程产生浓浓 的兴趣. 画图前引导 1.让我们打开百度,输入python进入python官网 2.在官网 ...

  2. c语言画猪程序,数学思维+C语言画小猪佩奇,来试试?

    用C语言画小猪佩奇, 你能想到什么实现方式? No, no, no~ 让我们玩点生猛的. 直接编辑代码, 用命令行(CMD)编译及运行! (此处安利Sublime,瞬间提升逼格的神器) 然而, CMD ...

  3. c语言画猪程序,C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇

    本文主要向大家介绍了C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助. 今天我们来用C语言画一只小猪佩奇---社会.社会.... ...

  4. 趣味c语言代码,趣味程序C语言

    <趣味程序C语言>由会员分享,可在线阅读,更多相关<趣味程序C语言(36页珍藏版)>请在人人文库网上搜索. 1.趣味程序导学C语言,你玩过电脑游戏吗?,你喜欢电脑游戏吗?,电脑 ...

  5. 用python画猪_用Python画一只丑丑的猪头

    前两天在知乎上看到有人用Python的turtle库画了一只小猪佩奇,接着就有网友用turtle画了一只哆啦A梦,不得不说他们都是人才,画得有模有样的.知乎地址在这里: https://www.zhi ...

  6. 05.python学习系列——画图库turtle(啥是小猪佩奇)

    turtle库 Turtle,也叫海龟渲染器,使用Turtle库画图也叫海龟作图.Turtle库是Python语言中一个很流行的绘制图像的函数库.海龟渲染器,和各种三维软件都有着良好的结合.功能强大, ...

  7. linux画国旗程序,C语言也能画国旗

    http://www.oschina.net/code/snippet_103482_14802 看到这个稀奇古怪的语言画国旗,代码真心简洁.试着用C语言实现,确实麻烦不少--主要是数字全要自己算啊. ...

  8. 画图板程序c语言,【原创】画图板程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define PAINTAREA 1//画图区标志 #define CASEAR ...

  9. 代码流程图怎么画_程序流图怎么画?详细图文解析绘制程序流程图

    程序流图是一种表示算法.工作流程的图表. 程序流图将步骤显示为各种类型的方框,并通过将方框与箭头连接来显示它们的顺序.此图示说明了给定问题的解决方案模型.流程图用于分析.设计.记录或管理各个领域的方法 ...

最新文章

  1. Django Cache缓存系统介绍及Memcached使用
  2. Android:VivoNex3S调试无法安装程序
  3. JavaScript基础和js概括
  4. 单一职责在.NET中
  5. React中的CSS——styled-components
  6. Beginning iCloud in iOS 5 Tutorial Part 2(转载)
  7. php中update()函数,update_option()函数
  8. 实例讲解策略产品经理工作内容
  9. 抛弃Excel后工资翻倍,阿里大厂的数据报表全靠它
  10. 权限系统设计学习总结(3)——多账户的统一登录
  11. jdk自带压测工具_jstack性能分析工具
  12. 基于设备树的TQ2440 DMA学习(2)—— 简单的DMA传输
  13. 暖心社区(2018-07-17)
  14. 传统CPU架构不再是高性能计算唯一选择
  15. python调用程序压缩文件_Python在后台自动解压各种压缩文件的实现方法
  16. 计算机共享修复方法,打印机无法共享怎么办,教您修复打印机共享问题
  17. C3P0 连接池错误【已解决】-An exception occurred while acquiring a poolable resource. Will retry.
  18. UVALive Problem 7456 Least Crucial Node——Regionals 2015 :: Asia - Taipei
  19. 既然是豆腐心,何必刀子嘴?
  20. 199 c 通过函数名字符串调用函数

热门文章

  1. Camera硬件结构组成
  2. 嵌入式Linux:安装Ubuntu系统环境
  3. 24V行车记录仪4Ω抛负载的选型及测试
  4. 后台管理页面通过点击左侧导航栏的菜单项实现右边内容的改变
  5. 解决warning: LF will be replaced by CRLF in方法
  6. 自动化打卡,Tasker+模拟器远程打卡
  7. 浅谈技术管理之日式管理的殊途同归
  8. 常用模块fractions基本使用
  9. WiFi穿墙手册:解读天线、dbi、发射功率和无线信号的关系
  10. 计算机主机内部同步传输,北航网教计算机网络与应用习题-考查课