当前位置:首页 > 技术 > 正文内容

基于字符模式的图形生成与矩阵变换技术

访客 技术 2026年7月3日 1

动态绘制对称结构图形

给定整数 n,需输出一个上下对称、中心为 O 的菱形框架图案。上半部分由反斜杠、竖线和正斜杠构成,呈放射状向中心收敛;下半部分则为镜像扩展。核心在于控制每行前导空格数与符号间距。

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    // 上半部分:从n行开始递减
    for (int i = 0; i < n; ++i) {
        // 前导空格
        for (int s = 0; s < i; ++s) cout << ' ';
        cout << '\\';
        // 中间间隔空格
        for (int s = 0; s < n - i - 1; ++s) cout << ' ';
        cout << '|';
        // 对称右侧空格
        for (int s = 0; s < n - i - 1; ++s) cout << ' ';
        cout << '/' << '\n';
    }

    // 中间横线连接O
    for (int i = 0; i < n; ++i) cout << '-';
    cout << 'O';
    for (int i = 0; i < n; ++i) cout << '-';
    cout << '\n';

    // 下半部分:逐行展开
    for (int i = 0; i < n; ++i) {
        // 前导空格随行增加而减少
        for (int s = 0; s < n - i - 1; ++s) cout << ' ';
        cout << '/';
        // 中间填充空格
        for (int s = 0; s < i; ++s) cout << ' ';
        cout << '|';
        // 右侧对称空格
        for (int s = 0; s < i; ++s) cout << ' ';
        cout << '\\' << '\n';
    }

    return 0;
}

二维字符网格的几何变换操作

在处理字符画或点阵图时,常需实现旋转与翻转功能。以下函数基于零基索引设计,适用于 N×N 字符矩阵的原地变换。

顺时针旋转90度

通过坐标映射关系:原始位置 (i, j) 在旋转后位于新坐标 (j, N−1−i)。

void rotate90(vector<string>& grid) {
    int size = grid.size();
    vector<string> temp = grid;
    for (int i = 0; i < size; ++i)
        for (int j = 0; j < size; ++j)
            temp[j][size - 1 - i] = grid[i][j];
    grid = temp;
}

水平镜像翻转

将每一行的字符按中心轴左右互换,即 (i, j) 映射至 (i, N−1−j)。

void flipHorizontal(vector<string>& grid) {
    int size = grid.size();
    vector<string> mirror = grid;
    for (int i = 0; i < size; ++i)
        for (int j = 0; j < size; ++j)
            mirror[i][j] = grid[i][size - 1 - j];
    grid = mirror;
}

自定义字体字符串渲染系统

实现一个支持大写字母显示的ASCII艺术字引擎。每个字母以7行×5列的字符块存储,多个单词拼接时自动插入单空格分隔符。

#include <iostream>
#include <vector>
#include <string>
using namespace std;

// 存储26个大写字母的7x5点阵表示
char font[26][7][6];

// 输出指定单词的点阵形式
void renderWord(const string& text) {
    static bool firstLine = true;
    if (text.empty()) return;

    if (!firstLine) cout << '\n';
    firstLine = false;

    char output[7][100] = {0};

    for (int pos = 0; pos < text.length(); ++pos) {
        int letter = text[pos] - 'A';
        for (int row = 0; row < 7; ++row)
            for (int col = 0; col < 5; ++col)
                output[row][pos * 6 + col] = font[letter][row][col];
    }

    // 插入字符间空隙
    for (int i = 1; i < text.length(); ++i)
        for (int row = 0; row < 7; ++row)
            output[row][i * 6 - 1] = ' ';

    for (int row = 0; row < 7; ++row)
        cout << output[row] << '\n';
}

int main() {
    // 加载所有字母模板
    for (int c = 0; c < 26; ++c)
        for (int r = 0; r < 7; ++r)
            cin >> font[c][r];

    string current;
    char ch;
    while ((ch = getchar()) != EOF) {
        if (ch >= 'A' && ch <= 'Z') {
            current += ch;
        } else {
            renderWord(current);
            current.clear();
        }
    }
    renderWord(current);
    return 0;
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。