c语言画猪程序,C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇
本文主要向大家介绍了C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
今天我们来用C语言画一只小猪佩奇---社会、社会....
在画小猪佩奇之前,我们先使用带符号的距离长 (signed distance field,SDF) 来画一个圆形。
使用这个方法表示形状,但是这次我们使用 ASCⅡ 字符 \/=\ 画出形状的外框,并填充内部,类似这样:
=====
//.....\\
||.....||
\\....//
=====
SDF 的梯度(gradient)代表 SDF 变化最大的方向,可用这个方向去决定用哪一个字符。
我们通过差分求 SDF 的梯度近似值,然后用 atan2() 求出梯度的角度:
用 C 语言简单实现,在 [-1, 1] x [-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)) < 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 i = -1; i < 1; i += 0.05, putchar('\n'))
{
for (T j = -1; j < 1; j += 0.025)
{
putchar(outline(j, i));
}
}
getchar();
return 0;
}
然后,我们就可以通过画多个圆形,把它们适当地旋转和缩放,用构造实体几何比它们组合起来,从而就可以画出小猪佩奇了:
#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))]);
}
}
getchar();
return 0;
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
c语言画猪程序,C/C++知识点之如何优雅的使用C语言绘制一只小猪佩奇相关推荐
- 用c语言编程画一只猪,如何优雅的使用C语言绘制一只小猪佩奇
今天我们来用C语言画一只小猪佩奇---社会.社会.... 在画小猪佩奇之前,我们先使用带符号的距离长 (signed distance field,SDF) 来画一个圆形. 使用这个方法表示形状,但是 ...
- 如何优雅的使用C语言绘制一只小猪佩奇
今天我们来用C语言画一只小猪佩奇---社会.社会.... 在画小猪佩奇之前,我们先使用带符号的距离长 (signed distance field,SDF) 来画一个圆形. 使用这个方法表示形状,但是 ...
- c语言画猪程序,C语言画小猪佩奇(转载)
C语言画小猪佩奇 分享下如何用 C 语言画小猪佩奇 使用带符号距离场(signed distance field, SDF)表示圆形: 沿用这个方法表示形状,但这次我们想利用 ASCII 字符|/=\ ...
- c语言画猪程序,数学思维+C语言画小猪佩奇,来试试?
用C语言画小猪佩奇, 你能想到什么实现方式? No, no, no~ 让我们玩点生猛的. 直接编辑代码, 用命令行(CMD)编译及运行! (此处安利Sublime,瞬间提升逼格的神器) 然而, CMD ...
- c语言画曲线程序,单片机 LCD C语言画弧线的程序,哪位高手会
当前位置:我的异常网» 单片机 » 单片机 LCD C语言画弧线的程序,哪位高手会 单片机 LCD C语言画弧线的程序,哪位高手会 www.myexceptions.net 网友分享于:2013-0 ...
- 无聊的时间,乌龟画了一只小猪佩奇还有她的蛋糕
生日蛋糕和小猪佩奇搭配 Python乌龟(turtle库) 前言 画画这辈子是不可能画画的,看到很多视频平板画,咱用来用乌龟库来试试,论坛很多大佬用这个花了很多奇特的东西,咋也花点时间搞搞 Turtl ...
- C++ 6.程序流程结构—选择结构(嵌套if语句、经典问题三只小猪称体重、三目运算符、switch语句)
注意事项:if 后不要加分 #include <stdio.h> #include <iostream> using namespace std; /*------------ ...
- C语言画伯德图程序,已知系统的传递函数,试绘制系统的伯德图。 (1) (2)
已知系统的传递函数,试绘制系统的伯德图. (1) (2) 更多相关问题 [单选] 女劳疸见何症知其预后不良() [填空题] 气利,()主之. [多选] 黄疸病篇具有清热利湿作用的方剂有() [填空题] ...
- 瞧不上 C++ 和 D 语言,国外程序员将 5.8 万行代码迁移到 Jai 语言,到底图什么?
作者 | Simon van Bernem 译者 | 核子可乐 策划 | 冬梅 本文中,我将向大家分享自己把游戏开发成果移植到 jai 语言的经历.我的游戏之前主要是用 D 和部分 C_++ 编写的, ...
最新文章
- 各种小的 dp (精)
- 随机线性插值提高神经网络的健壮性
- qm'l 获取屏幕分辨率
- Mac003--Maven安装与环境变量配置
- mysql sql select_mysql SQL Select 语句 简单应用
- 前端学习(3146):react-hello-react之getBeforeUpdate
- java学习(105):字符串indexof,spilt,substring方法
- 微信开发博客——柳峰
- Java Web乱码分析及解决方式(一)——GET请求乱码
- 淘宝技术发展(引言)、技术发展(个人网站)
- 应届生还是研究生?与大学生的MSN谈话二
- 一键报警(IP对讲)
- Python3制作网易云音乐下载器
- AutoCAD 2021-2022
- 摘抄部分经典励志语录: 送给所有心怀梦想的人们
- 智慧城市一卡通如何开通
- 文件夹重命名,快速修改多个文件夹名称
- 重塑汽车的最新5G标准
- 人工智能第四章第四丶五和六节知识总结
- Python下载微信公众号文章和图片保存至本地
热门文章
- mysql8.0.23解压版安装、开启远程登陆(用户创建和授权)以及卸载
- 中国象棋程序的设计与实现(九)–棋子点,棋子的小窝
- 计算机二级选择题知识点汇总(1)
- 工业互联网:2 设备端(1)
- 施努卡:机器视觉系统作用是什么,原理是什么
- 操作系统32位和64位是什么意思?
- ​人工智能驱动的道路安全网络白皮书(英) (附下载)
- TCP/IP 测试题(一)
- 鸿蒙系统有东华软件参与吗,东华软件(002065)个股分析_牛叉诊股_同花顺财经
- 配置最新版LAMP环境