几十行C++代码生成自己的图片

news2025/2/27 8:13:15

背景:Kyle McCormick 在 StackExchange 上启动了一个名为 “Tweetable Mathematical Art” 的创意比赛。在这个挑战中,参与者必须在三条推文的长度内编写代码以创造一幅艺术图像。具体来说,每位参赛者需用 C++ 设计三个函数:RD、GR 和 BL,其中每个函数的字符长度不能超过 140。这些函数会接收两个参数 i 和 j(范围为 0 至 1023)并返回一个介于 0 到 255 之间的整数,代表在 (i, j) 位置的像素颜色值。例如,若 RD(0, 0) 和 GR(0, 0) 都返回 0,而 BL(0, 0) 返回 255,那么图像的左上角像素便会呈现蓝色。这些定制的代码将嵌入一个主程序中,生成一个 1024x1024 的美观图片。【ppm格式介绍:https://www.cnblogs.com/flyinggod/p/14159044.html】

其实就是手动写一个ppm格式的RGB文件,自己组合每一个像素,最后产生RGB图片。

修改RD、GR 和 BL函数后可以生成自己的图片。比如我将修改后生成一个颜色的圆分裂为四个的代码如下:

#include <iostream>
#include <cmath>
#include <cstdlib>

#define DIM 1024

// 计算两点之间的距离
double distance(int x1, int y1, int x2, int y2) {
    return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}

// 基于距离的波函数
double wave(int x, int y) {
    int refX = DIM / 4;
    int refY = DIM / 4;
    
    if (x > (DIM/2)){
        refX = 3 * DIM / 4;
    }
    
    if (y > (DIM/2)){
        refY = 3 * DIM / 4;
    }
    
    double distToCenter = distance(x, y, refX, refY);
    return distToCenter / (DIM / 2); // normalize to [0,1]
}

unsigned char RD(int i, int j) {
    double w = wave(i, j);
    if (w < 0.2) {
        return 255 * (1 - w / 0.2);
    } else if (w < 0.4) {
        return 255;
    } else if (w < 0.5) {
        return 255 - 255 * (w - 0.4) / 0.2;
    }
    if ((i == DIM / 2 || j == DIM / 2) && (i % 2 == 0 || j % 2 == 0 || rand() % 2 == 0)) {
        return 0;
    }
    return 0;
}

unsigned char GR(int i, int j) {
    double w = wave(i, j);
    if (w < 0.2) {
        return 0;
    } else if (w < 0.4) {
        return 255 * (1 - (w - 0.2) / 0.2);
    }
    if ((i == DIM / 2 || j == DIM / 2) && (i % 2 == 0 || j % 2 == 0 || rand() % 2 == 0)) {
        return 0;
    }
    return rand() % 255;  
}

unsigned char BL(int i, int j) {
    return 0; // 黑色
}

void pixel_write(int, int);
FILE *fp;

int main() {
    fp = fopen("MathPic.ppm", "wb");
    fprintf(fp, "P6\n%d %d\n255\n", DIM, DIM);
    for(int j = 0; j < DIM; j++)
        for(int i = 0; i < DIM; i++)
            pixel_write(i, j);
    fclose(fp);
    return 0;
}

void pixel_write(int i, int j) {
    static unsigned char color[3];
    color[0] = RD(i,j) & 255;
    color[1] = GR(i,j) & 255;
    color[2] = BL(i,j) & 255;
    fwrite(color, 1, 3, fp);
}

在这里插入图片描述
其他的如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哪种股票可以T+0交易?

股票市场T&#xff0b;0交易制度是实现市场公平&#xff0c;解决市场多空方失衡的重要市场机制。随着中国证券市场的发展&#xff0c;机构投资者占比大幅提升&#xff0c;市场投资者理性程度不断增加&#xff0c;监管机制也日渐完善&#xff0c;恢复T&#xff0b;0交易制度将是…

专业的批量剪辑软件推荐,在哪可以免费下载?免费吗?

今天推荐一款适合广大短视频创作者使用的专业的批量剪辑软件&#xff0c;它叫做超级编导批量剪辑软件&#xff0c;进入超级编导官网就可以立即免费下载&#xff0c;同时该软件支持免费试用。 不管你是做电商带货种草视频、本地生活推广视频&#xff0c;还是企业拓客类的获客视频…

SpotBugs代码检查:instanceof总是返回true(BC_VACUOUS_INSTANCEOF)

https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#bc-instanceof-will-always-return-true-bc-vacuous-instanceof 使用instanceof判断的时候&#xff0c;总是返回true&#xff0c;除非被检测的结果是null。遇到这种告警&#xff0c;可能是写代码的人理解错误…

无涯教程-JavaScript - IMCSC函数

描述 IMCSC函数以x yi或x yj文本格式返回复数的余割。 复数的余割定义为正弦的倒数。即 余割(z) 1 /正弦(z) 语法 IMCSC (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the cosecant.Required Notes Excel中的复数只是简单…

过滤和分页源码、接口文档、jwt介绍和构成、base64编码、drf-jwt使用

过滤和分页源码 补充 #### 为什么在视图类中配置一个过滤类&#xff0c;就能走-filter_backends [SearchFilter,MyFilter]-GenericAPIView&#xff1a;继承APIVIew的视图类&#xff0c;是不能这样配置的----》自己过滤-filter_backends api_settings.DEFAULT_FILTER_BACKEN…

TVjar生成踩坑记录

近期TVBox及其衍生品很火&#xff0c;其中&#xff0c;jar更是主力军 github上有相关源码。 因为github总是被墙&#xff0c;想着能不能自己生成呢 于是开始折腾。 1、下载仓库 以这个为例 仓库下载地址 2、尝试在电脑生成jar 直接运行 buildAndGenJar.bat 3、报错 各…

使用Spring Gateway为对象存储系统MinIo和kkFileView文档预览增加登录验证

文章目录 1、kkfileview下载部署1.1、安装包部署运行1.1.1、物理机或虚拟机上运行1.1.2、Docker容器环境环境运行 1.2、接入说明 2、使用Spring Gateway增加登录认证2.1、网关实现代码2.2、文件服务实现代码2.3、Demo运行效果 官网介绍&#xff1a;kkFileView为文件文档在线预览…

浅谈安科瑞智能操控装置在上海特斯拉工厂配电工程的应用

0.背景 Background 2018年10月17日&#xff0c;上海市临港管委会表示&#xff0c;特斯拉&#xff08;上海&#xff09;有限公司已成功摘得上海临港装备产业区Q01-05地块864885平方米&#xff08;合计1297.32亩&#xff09;的工业用地。2019年1月7日&#xff0c;位于上海东南一…

C动态分配

动态分布与静态发布&#xff1a; 静态分配 1、 在程序编译或运行过程中&#xff0c;按事先规定大小分配内存空间的分配方式。int a [10] 2、 必须事先知道所需空间的大小。 3、 分配在栈区或全局变量区&#xff0c;一般以数组的形式。 4、 按计划分配。 动态分配 1、在程序运…

Alins - 化繁为简、极致优雅的WebUI框架

最近造了个js框架 Alins&#xff0c;分享一下&#xff1a; &#x1f680; Alins: 最纯粹优雅的WebUI框架 English | 文档 | 演练场 | 更新日志 | 反馈错误/缺漏 | Gitee | 留言板 0 简介 0.1 前言 Alins是一款极致纯粹、简洁、优雅的Web UI框架。秉持0-API、Less is More 的…

替换滚珠螺杆需要了解哪些参数?

滚珠螺杆具有定位精度高、高寿命、低污染和可做高速正逆向的传动及变换传动等特性&#xff0c;因具上述特性&#xff0c;滚珠螺杆已成为近来精密科技产业及精密机械产业的定位及测量系统上的重要零组件之一。 众所周知&#xff0c;滚珠螺杆是可以替换的&#xff0c;不仅同品牌之…

概率论与数理统计学习笔记(7)——全概率公式与贝叶斯公式

目录 1. 背景2. 全概率公式3. 贝叶斯公式 1. 背景 下图是本文的背景内容&#xff0c;小B休闲时间有80%的概率玩手机游戏&#xff0c;有20%的概率玩电脑游戏。这两个游戏都有抽卡环节&#xff0c;其中手游抽到金卡的概率为5%&#xff0c;端游抽到金卡的概率为15%。已知小B这天抽…

步进电机基本结构原理了解一下

工作原理 步进电机驱动器根据外来的控制脉冲和方向信号&#xff0c; 通过其内部的逻辑电路&#xff0c;控制步进电机的绕组以一定的时序正向或反向通电&#xff0c;使得电机正向/反向旋转&#xff0c;或者锁定。 以1.8度两相步进电机为例&#xff1a;当两相绕组都通电励磁时&…

喜马拉雅 Redis 与 Pika 缓存使用军规

作者&#xff1a;喜马拉雅 董道光 宣言&#xff1a;缓存不是万金油&#xff0c;更不是垃圾桶&#xff01;&#xff01;&#xff01; 缓存作为喜马拉雅至关重要的基础组件之一&#xff0c;每天承载着巨大的业务请求量。一旦缓存出现故障&#xff0c;对业务的影响将非常严重。因…

经销商沟通难题怎么破?破解之道看这里!

01 经销商&#xff1a;生产商的得力帮手&#xff0c;消费者的贴心管家 经销商是指在市场经济中&#xff0c;负责将生产商生产的产品或提供的服务转售给最终消费者的中间商。在现代商业环境中&#xff0c;经销商在产品分销链条中扮演着重要的角色&#xff0c;他们促进了产品的快…

Python 自然语言处理 文本分类 地铁方面留言文本

将关于地铁的留言文本进行自动分类。 不要着急&#xff0c;一步步来。 导入需要的库。 import numpy as np import pandas as pd import jieba # 分词 import re # 正则 from fnmatch import fnmatch # 通配符 from sklearn.preprocessing import LabelEncoder from sklearn…

数据分析面试题(2023.09.08)

数据分析流程 总体分为四层&#xff1a;需求层、数据层、分析层和结论层 一、统计学问题 1、贝叶斯公式复述并解释应用场景 公式&#xff1a;P(A|B) P(B|A)*P(A) / P(B)应用场景&#xff1a;如搜索query纠错&#xff0c;设A为正确的词&#xff0c;B为输入的词&#xff0c;那…

世和基因亮相2023服贸会,中国精准检测技术走向世界

9月6日&#xff0c;2023中国国际服务贸易交易会在北京圆满收官&#xff0c;本届服贸会围绕“开放引领发展&#xff0c;合作共赢未来”年度主题&#xff0c;吸引了全球领先的创新技术和科研成果亮相盛会&#xff0c;累计入场近28万人。 作为国内肿瘤精准医学头部企业&#xff0…

pdfjs在线预览组件的使用

前言 pdfjs在线预览组件。 原生浏览器预览pdf文件&#xff0c;存在pdf xss跨站攻击风险。推荐使用pdfjs第三方组件在线预览pdf文件。 如何使用 下载 官方插件下载地址&#xff1a;https://mozilla.github.io/pdf.js/getting_started/ 安装 把下载的文件复制到项目中 使用pd…

Docker详解,7分钟学会

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们讨论docker。 docker的好处是可以隔离环境&#xff0c;多容器间环境隔离互不影响。 而且得益于优秀的镜像机制&#xff0c;可以用于手工快速部署。 我们按这样的顺序展开讨论&#xff1a; 1、 docker的工作原理 2、 …