【C语言练手】C语言画太极图
时间:2022-05-04
本文章向大家介绍【C语言练手】C语言画太极图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
呵呵昨天花了一个圆,今天想画个太极图,我知道没啥技术含量,但是挺有意思的,希望各位看官不要鄙视我不务正业,画完此图,不再做这些事情。
先展示下画出来的图像的情况,因为不支持pgm格式的图像,所以我用的 QQ截图:
今天,二话不说上代码。同时再次致谢Banu前辈
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct {
size_t width;
size_t height;
unsigned char *data;
} Image;
static Image * image_new (size_t width,
size_t height){
Image *image;
image = malloc (sizeof *image);
image->width = width;
image->height = height;
image->data = malloc (width * height);
return image;
}
static void
image_free (Image *image)
{
free (image->data);
free (image);
}
static void
image_fill (Image *image,
unsigned char value)
{
memset (image->data, value, image->width * image->height);
}
/**
* image_set_pixel:
*
* Sets a pixel passed in signed (x, y) coordinates, where (0,0) is at
* the center of the image.
**/
static void
image_set_pixel (Image *image,
ssize_t x,
ssize_t y,
unsigned char value)
{
size_t tx, ty;
unsigned char *p;
tx = (image->width / 2) + x;
ty = (image->height / 2) + y;
p = image->data + (ty * image->width) + tx;
*p = value;
}
static void
image_save (const Image *image,
const char *filename)
{
FILE *out;
out = fopen (filename, "wb");
if (!out)
return;
fprintf (out, "P5n");
fprintf (out, "%zu %zun", image->width, image->height);
fprintf (out, "255n");
fwrite (image->data, 1, image->width * image->height, out);
fclose (out);
}
static void draw_Taijitu(Image *image,int radius,int value)
{
int x,y;
int rlimit ,llimit;
int radius_2 = radius*radius;
for(y = -radius;y<radius;y++)
for(x= -radius;x<radius;x++)
if(x*x+y*y <= radius_2)
image_set_pixel(image,x,y,0xff);
for(y = -radius;y<0;y++)
for(x = 0;x<radius;x++)
if((x*x)+(y*y) <= radius_2)
image_set_pixel(image,x,y,value);
for(y = -radius;y<0;y++)
for(x = -(int)sqrt((double)(-radius*y-y*y));x<0;x++)
image_set_pixel(image,x,y,value);
for(y = 0;y<radius;y++)
{
llimit = (int)sqrt((double)(radius*y - y*y));
rlimit = (int)sqrt((double)(radius_2 - y*y));
for(x = llimit;x<rlimit;x++)
image_set_pixel(image,x,y,value);
}
for(y = 2*radius/6;y<4*radius/6;y++)
{
rlimit =(int) sqrt((double)(radius*y-y*y-2*radius_2/9));
llimit = -rlimit;
for(x = llimit;x<rlimit;x++)
image_set_pixel(image,x,y,value);
}
for(y = -4*radius/6;y<-2*radius/6;y++)
{
rlimit = sqrt(-radius*y-y*y-2*radius_2/9);
llimit = -rlimit;
for(x = llimit;x<rlimit;x++)
image_set_pixel(image,x,y,0xff)
}
return ;
}
int main (int argc, char *argv[])
{
Image *image;
image = image_new (800, 800);
image_fill (image, 0xaa);
draw_Taijitu (image, 300, 0);
image_save (image, "taiji_6.pgm");
image_free (image);
return 0;
}
小编亲自测试过,这个代码可用,虽然在函数的命名和实现上存在瑕疵,拿来练手找找编程的感觉足够,最后在文件执行目录会生成taiji_6.pgm名字的图片
修改自:http://blog.chinaunix.net/uid-24774106-id-3048064.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何使用Java连接Kerberos的Phoenix
- docker swarm的常用操作
- 组件库源码中这些写法你掌握了吗?
- spark-2.4.0-hadoop2.7-安装部署 4.1. Spark安装4.2. 环境变量修改4.3. 配置修改4.4. 分发到其他机器4.5. 启动spark
- spark-2.4.0-hadoop2.7-高可用(HA)安装部署 5.1. Spark安装5.2. 环境变量修改5.3. 配置修改5.4. 分发到其他机器5.5.
- spark-2.4.0-hadoop2.7-简单操作 2.1. 相关截图
- Navicat Premium 12.0.24安装与激活(亲测已成功激活) 2.1. 下载激活文件2.2. 激活步骤准备工作2.3. 激活Navicat
- VMware实现iptables NAT及端口映射
- Saltstack_使用指南01_部署
- Saltstack_使用指南02_远程执行-验证 2.1. Master与哪些minion正常通信2.2. 查看master与指定minion通信是否正常
- Saltstack_使用指南03_配置管理
- Saltstack_使用指南04_数据系统-Grains 4.1. grains条目项信息4.2. grains全部信息4.3. 查询grains指定信息5.1. m
- 揭开spring初始化方法的神秘面纱
- Saltstack_使用指南05_数据系统-Pillar 4.1. 修改配置文件并重启服务4.2. 显示pillar信息6.1. pillar的sls文件编写6.2.
- Python Docker 查看私有仓库镜像【转】