社会我佩奇兄那么火,那么我们接下来就分享下如何用 C语言 画小猪佩奇

使用带符号距离场(signed distance field, SDF)表示圆形:

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

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

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

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

然后,我们就可以画多个圆形,把它们适当地旋转和缩放,用构造实体几何比它们组合起来,那么用 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倍:

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

对于热爱编程的人来说,有一群一起学习的小伙伴很重要,笔者有一个编程零基础入门学习交流俱乐部,还有学习视频文件,欢迎初学者和正在进阶中的小伙伴们!

惊呆了!C语言也能画小猪佩奇?【附源码】社会我佩奇哥!相关推荐

  1. C语言小游戏大全,C语言贪吃蛇小游戏(附源码)

    一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...

  2. 寝室管理系统c语言软件,C语言宿舍管理系统课设(附源码).doc

    PAGE PAGE 1 C语言宿舍管理系统课设 项目说明 本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行.(书生) 项目运行截图 ...

  3. 【C语言】第一个C语言项目——“猜数字”游戏(内附源码)

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello米娜桑,这里是君兮_,今天又抽空为大家更新我们的主线0基础C语言啦!鉴于最近讲解了非常多的选择语句与循环语句,咱们今天就来讲讲 ...

  4. C语言实现老鼠走迷宫(附源码)

    CSDN源码下载:C语言实现老鼠走迷宫.zip 1.需求分析   利用二维数组创建一个随机迷宫或者自定义迷宫,再在迷宫中找到一条从起点到终点的路径,并用图形界面显示. 2.概要设计 3.详细设计 输入 ...

  5. linux 截图程序源码,Linux下C语言实现C/S模式编程(附源码,运行截图)

    由标题可知,这篇博客主要讲如何用C语言实现一个C/S模式的程序.主要功能:时间回送.客户机请求,服务器发回时间,客户机进行同步. 废话不多说,下面直接贴出源代码. 代码如下: #include #in ...

  6. c语言查单词小程序,【附源码】小程序初窥之简单查单词

    新年假期百无聊赖,于是就看了一下微信小程序的开发方法,花了两天时间入了个门,这里记录一下. 阅读之前,先确定你知道基本的 html+css+js 语法,这样就能更好地和我一样,以一个新手的视角来理解小 ...

  7. 谁说程序员不懂浪漫——我的C语言结婚请柬(附源码)

    前言:但行好事,莫问前程--<增广贤文> 从上学起开始学C++,后面也做过H5,现在做Android.无论是学习用的,还是工作用的,上百个软件不止.但最另我骄傲的是,我用程序烂漫了一把. ...

  8. 计算机毕业设计ssm双笙映画ou5oj系统+程序+源码+lw+远程部署

    计算机毕业设计ssm双笙映画ou5oj系统+程序+源码+lw+远程部署 计算机毕业设计ssm双笙映画ou5oj系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  9. mysql 线程池源码模块_易语言Mysql线程池2.0模块源码

    易语言Mysql线程池2.0模块源码 易语言Mysql线程池2.0模块源码 系统结构:GetThis,初始化,关闭类线程,线程_测试,其他_附加文本,连接池初始化,取mysql句柄,释放mysql句柄 ...

  10. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

最新文章

  1. 数字采购:企业互联网新引擎
  2. python创建文件夹_Python学习第71课-本地建立repository仓库
  3. inspect模块---检查活动对象
  4. c/c++宏函数的定义与使用(宏定义函数)(macro definition)
  5. ViewPager用法
  6. Ubuntu ssh 服务开启方法
  7. 【数据结构与算法】之深入解析“平衡二叉树”的求解思路与算法示例
  8. C51汇编语言16进制加法,51单片机汇编语言带进位加法指令(4条)
  9. PSTN和互联网——无线接入与定位(1)
  10. BZOJ 4310 二分+SA+RMQ
  11. HTC Vive凭什么在十分钟内获得1.5万的订单?
  12. 如何从程序中改变音量?
  13. 凸优化第七章统计估计 7.3 最优检测器设计及假性检验
  14. mysql怎么另存为_怎么把mysql中的数据库复制到另一台电脑的mysql上?
  15. Android--刷机教程
  16. 迅捷PDF转换器怎样将PDF文件转换为HTML网页
  17. Ubuntu16.04系统美化
  18. 原生js预览ofd文件,JavaScript
  19. 百度地图SDK导航(路径规划+实时导航)
  20. Kali linux安装步骤,史上最详细的步骤,傻瓜式教学

热门文章

  1. 《数据结构》课程介绍
  2. 从零开始写项目【总结】
  3. linux中lost+found目录介绍
  4. t检验,单因素方差和相似非参数检验-IBM SPSS 第六版第9章译文
  5. Win10系统无法识别USB设备的处理方法
  6. symbian程序的前台运行和后台运行
  7. 线性模型(梯度下降随机梯度下降)
  8. 华南师范大学计算机学院官网,朱佳(华南师范大学计算机学院研究员)_百度百科...
  9. android 高性能框架,高性能架构
  10. php 聚合广告平台,GitHub - mystudytime/easy-amazon-advertising: 基于 amazon advertising v2 接口的 PHP 广告信息组件...