惊呆了!C语言也能画小猪佩奇?【附源码】社会我佩奇哥!
社会我佩奇兄那么火,那么我们接下来就分享下如何用 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语言也能画小猪佩奇?【附源码】社会我佩奇哥!相关推荐
- C语言小游戏大全,C语言贪吃蛇小游戏(附源码)
一.C语言小游戏大全,C语言贪吃蛇小游戏(附源码) 贪吃蛇小游戏源码和更多C语言课设项目小游戏源码免 费 下 载 链 接 如下: c语言项目课设小游戏源码资料压缩包.zip-C文档类资源-CSDN下载 ...
- 寝室管理系统c语言软件,C语言宿舍管理系统课设(附源码).doc
PAGE PAGE 1 C语言宿舍管理系统课设 项目说明 本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行.(书生) 项目运行截图 ...
- 【C语言】第一个C语言项目——“猜数字”游戏(内附源码)
君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello米娜桑,这里是君兮_,今天又抽空为大家更新我们的主线0基础C语言啦!鉴于最近讲解了非常多的选择语句与循环语句,咱们今天就来讲讲 ...
- C语言实现老鼠走迷宫(附源码)
CSDN源码下载:C语言实现老鼠走迷宫.zip 1.需求分析 利用二维数组创建一个随机迷宫或者自定义迷宫,再在迷宫中找到一条从起点到终点的路径,并用图形界面显示. 2.概要设计 3.详细设计 输入 ...
- linux 截图程序源码,Linux下C语言实现C/S模式编程(附源码,运行截图)
由标题可知,这篇博客主要讲如何用C语言实现一个C/S模式的程序.主要功能:时间回送.客户机请求,服务器发回时间,客户机进行同步. 废话不多说,下面直接贴出源代码. 代码如下: #include #in ...
- c语言查单词小程序,【附源码】小程序初窥之简单查单词
新年假期百无聊赖,于是就看了一下微信小程序的开发方法,花了两天时间入了个门,这里记录一下. 阅读之前,先确定你知道基本的 html+css+js 语法,这样就能更好地和我一样,以一个新手的视角来理解小 ...
- 谁说程序员不懂浪漫——我的C语言结婚请柬(附源码)
前言:但行好事,莫问前程--<增广贤文> 从上学起开始学C++,后面也做过H5,现在做Android.无论是学习用的,还是工作用的,上百个软件不止.但最另我骄傲的是,我用程序烂漫了一把. ...
- 计算机毕业设计ssm双笙映画ou5oj系统+程序+源码+lw+远程部署
计算机毕业设计ssm双笙映画ou5oj系统+程序+源码+lw+远程部署 计算机毕业设计ssm双笙映画ou5oj系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...
- mysql 线程池源码模块_易语言Mysql线程池2.0模块源码
易语言Mysql线程池2.0模块源码 易语言Mysql线程池2.0模块源码 系统结构:GetThis,初始化,关闭类线程,线程_测试,其他_附加文本,连接池初始化,取mysql句柄,释放mysql句柄 ...
- python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...
原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...
最新文章
- 数字采购:企业互联网新引擎
- python创建文件夹_Python学习第71课-本地建立repository仓库
- inspect模块---检查活动对象
- c/c++宏函数的定义与使用(宏定义函数)(macro definition)
- ViewPager用法
- Ubuntu ssh 服务开启方法
- 【数据结构与算法】之深入解析“平衡二叉树”的求解思路与算法示例
- C51汇编语言16进制加法,51单片机汇编语言带进位加法指令(4条)
- PSTN和互联网——无线接入与定位(1)
- BZOJ 4310 二分+SA+RMQ
- HTC Vive凭什么在十分钟内获得1.5万的订单?
- 如何从程序中改变音量?
- 凸优化第七章统计估计 7.3 最优检测器设计及假性检验
- mysql怎么另存为_怎么把mysql中的数据库复制到另一台电脑的mysql上?
- Android--刷机教程
- 迅捷PDF转换器怎样将PDF文件转换为HTML网页
- Ubuntu16.04系统美化
- 原生js预览ofd文件,JavaScript
- 百度地图SDK导航(路径规划+实时导航)
- Kali linux安装步骤,史上最详细的步骤,傻瓜式教学
热门文章
- 《数据结构》课程介绍
- 从零开始写项目【总结】
- linux中lost+found目录介绍
- t检验,单因素方差和相似非参数检验-IBM SPSS 第六版第9章译文
- Win10系统无法识别USB设备的处理方法
- symbian程序的前台运行和后台运行
- 线性模型(梯度下降随机梯度下降)
- 华南师范大学计算机学院官网,朱佳(华南师范大学计算机学院研究员)_百度百科...
- android 高性能框架,高性能架构
- php 聚合广告平台,GitHub - mystudytime/easy-amazon-advertising: 基于 amazon advertising v2 接口的 PHP 广告信息组件...