148.绘制蓝天图案

简介: 148.绘制蓝天图案
#include <stdio.h>
#include <dos.h>
#include <math.h>
long Addr[768];
int Mode;
Set_Mode (int mode) /*设置显示的模式,参数为INT 10H的子功能号*/
{
    union REGS r;
    r.h.ah=0;
    r.h.al=mode;
    int86 (0x10,&r,&r);
}
Set_Graphics_Mode (unsigned x,unsigned y) /*设置图形模式的分辨率*/
{
    long i;
    if ((x<321)&&(y<201))  {
        Set_Mode (0x13);
        Mode=0x13;
        for (i=0;i<200;i++)  Addr[i]=320*i;
    }
    else if ((x<641)&&(y<401))  {
        Set_Mode (0x5c);
        Mode=0x5c;
        for (i=0;i<400;i++)  Addr[i]=640*i;
    }
    else if ((x<641)&&(y<481))  {
        Set_Mode (0x5d);
        Mode=0x5d;
        for (i=0;i<480;i++)  Addr[i]=640*i;
    }
    else if ((x<801)&&(y<601))  {
        Set_Mode (0x5e);
        Mode=0x5e;
        for (i=0;i<600;i++)  Addr[i]=800*i;
    }
    else if ((x<1025)&&(y<769))  {
        Set_Mode (0x62);
        Mode=0x62;
        for (i=0;i<768;i++)  Addr[i]=1024*i;
    }
    else  {
        Set_Mode (3);
        printf ("Not support this mode .\n");
        getch ();
    }
}
set_pattern () /*设置调色版*/
{
    int i;
    unsigned char pat[256][3];
    struct SREGS inreg;
    union REGS reg;
    pat[0][0]=0;pat[0][1]=0;pat[0][2]=0;
    for (i=1;i<=255;i++)  { /*设置调色版的颜色*/
        pat[i][0]=(unsigned char)((float)(abs(i-127)*63)/127.0+0.5);
        pat[i][1]=(unsigned char)((float)(abs(i-127)*63)/127.0+0.5);
        pat[i][2]=63;
    } 
    reg.x.ax=0x1012; /*设置VIDEO调色版的颜色块*/
    reg.x.bx=0;
    reg.x.cx=256;
    reg.x.dx=FP_OFF(pat);
    inreg.es=FP_SEG(pat);
    int86x (0x10,&reg,&reg,&inreg);
}
plot (int x,int y,unsigned char color) /*使用指定的颜色画点*/
{
    long offset;
    char Page;
    unsigned char far *address;
    switch (Mode)  {
        case 0x13:
            offset=Addr[y]+x;
            address=(unsigned char far *)(0xa0000000L+offset);
            *address=color;
            break;
        case 0x5c:
        case 0x5d:
        case 0x5e:
            offset=Addr[y]+x;
            Page=(offset>>16);
            outportb (0x3c4,0xe);
            outportb (0x3c5,Page^0x02);
            offset=offset&65535;
            address=(unsigned char far *)(0xa0000000L+offset);
            *address=color;
            break;
        case 0x62:
            offset=Addr[y]+x;
            Page=y>>6;
            outportb (0x3c4,0xe);
            outportb (0x3c5,Page^0x02);
            offset=offset&65535;
            address=(unsigned char far *)(0xa0000000L+offset);
            *address=color;
            break;
        default:
            break;
    }
}
get_pixel (int x,int y) /*获得点颜色*/
{
    long offset;
    char Page;
    unsigned char far *address;
    unsigned char color;
    switch (Mode)  {
        case 0x13:
            offset=Addr[y]+x;
            address=(unsigned char far *)(0xa0000000+offset);
            color=*address;
            break;
        case 0x5c:
        case 0x5d:
        case 0x5e:
            offset=Addr[y]+x;
            Page=(offset>>16);
            outportb (0x3c4,0xe);
            outportb (0x3c5,Page^0x02);
            offset=offset&65535;
            address=(unsigned char far *)(0xa0000000L+offset);
            color=*address;
            break;
        case 0x62:
            offset=Addr[y]+x;
            Page=y>>6;
            outportb (0x3c4,0xe);
            outportb (0x3c5,Page^0x02);
            offset=offset&65535;
            address=(unsigned char far *)(0xa0000000L+offset);
            color=*address;
            break;
        default:
            break;
    }
    return (color);
}
randint (unsigned int range) /*生成随机数*/
{
    float sigma=423.1966;
    static double OldRand=0.4231967;
    double temp;
    temp=sigma*OldRand;
    OldRand=temp-(int)temp;
    return (int)(OldRand*(float)range);
} 
void New_Col (int xa,int ya,int x,int y,int xb,int yb) /*生成新的颜色*/
{
    unsigned int color;
    color=abs(xa-xb)+abs(ya-yb);
    color=randint(color<<1)-color;
    color=color+(get_pixel(xa,ya)+get_pixel(xb,yb)+1)>>1;
    if (color<1)  color=1;
    else if (color>255) color=255;
    if ((get_pixel(x,y)==0)) plot (x,y,color);
}
void Sub_Divide (int x1,int y1,int x2,int y2) /*递归填充一块区域*/
{
    int x,y;
    unsigned char color;
    if (!((x2-x1<2)&&(y2-y1<2)))  {
        x=(x1+x2)>>1;
        y=(y1+y2)>>1;
        New_Col (x1,y1,x,y1,x2,y1);
        New_Col (x2,y1,x2,y,x2,y2);
        New_Col (x1,y2,x,y2,x2,y2);
        New_Col (x1,y1,x1,y,x1,y2);
        color=(get_pixel(x1,y1)+get_pixel(x2,y1)+get_pixel(x2,y2)+get_pixel (x1,y2)+2)>>2;
        plot (x,y,color);
        Sub_Divide (x1,y1,x,y);
        Sub_Divide (x,y1,x2,y);
        Sub_Divide (x,y,x2,y2);
        Sub_Divide (x1,y,x,y2);
    }
}
main ()
{
    int x,y;
    x=320;y=200;
    Set_Graphics_Mode (x,y);
    set_pattern ();
    plot (0,0,randint(254)+1);
    plot (x-1,0,randint(254)+1);
    plot (x-1,y-1,randint(254)+1);
    plot (0,y-1,randint(254)+1);
    Sub_Divide (0,0,x-1,y-1);
    getch();
    Set_Mode (0x03);
}
相关文章
|
15天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
5713 29
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
10天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1163 2
|
7天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
924 1
|
17天前
|
人工智能 自然语言处理 供应链
|
7天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
702 3
|
23天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3825 15
|
8天前
|
运维
欢迎报名|2026 Agentic AICon—智能体基础设施与AgentOps专场,邀您参会
欢迎报名|2026 Agentic AICon—智能体基础设施与AgentOps专场,邀您参会
1418 0