欢迎访问皮皮网官网
皮皮网

【神武换皮源码】【源码笔记44】【源码试炼27】多边形填充 c源码_多边形的填充算法

时间:2024-11-26 17:43:37 分类:热点 来源:彩虹源码下载地址

1.MATLAB的多边多边patch函数绘制填充多边形形
2.用Turbo C实现多边形填充与种子填充
3.C语言中的图形函数有哪些
4.C语言实现多边形填充

多边形填充 c源码_多边形的填充算法

MATLAB的patch函数绘制填充多边形形

       在数据可视化和科研绘图中,MATLAB提供的形填形patch函数是绘制填充多边形图形的有力工具。其功能广泛,源码可应用于函数积分区域、填充神武换皮源码不同颜色的算法多边形、多边形边、多边多边结构体绘制、形填形半透明多边形、源码多种线条颜色的填充绘制等场景。以下是算法patch函数在MATLAB中的使用示例,将对各种绘制场景进行详细解析。多边多边源码笔记44

       ### 实例1:指定坐标和定面和顶点

       通过指定每个顶点的形填形 (x,y) 坐标创建一个多边形。例如,源码创建一个红色正方形,填充顶点位于 (0,算法0)、(2,源码试炼270)、(2,2) 和 (0,2)。使用以下代码进行操作:

       matlab

       x = [0, 2, 2, 0];

       y = [0, 0, 2, 2];

       patch(x, y, 'r');

       运行结果将显示一个红色正方形多边形。

       ### 实例2:绘制函数积分区域

       利用patch函数绘制函数积分区域,通过定义x和y值以及积分范围进行绘制:

       matlab

       x = linspace(0, 1, );

       y = sin(2*pi*x);

       patch(x, y, 'b');

       axis equal;

       运行结果将显示一个sin函数在0到1区间内的积分区域,蓝色填充。暴涨 指标源码

       ### 实例3:不同多边形的颜色

       通过在每个多边形顶点上指定一种颜色,实现颜色插值并在颜色图中显示:

       matlab

       x = [0, 1, 1, 0];

       y = [0, 0, 1, 1];

       c = [1, 0, 0, 1];

       patch(x, y, 'flat', c);

       colorbar;

       运行结果将显示一个四边形,颜色从红色变化为蓝色,通过颜色栏进行映射。

       ### 实例4:绘制多边形边,源码营养课堂不含面

       通过调整patch函数参数,绘制多边形的边而不会填充:

       matlab

       x = [0, 1, 1, 0];

       y = [0, 0, 1, 1];

       patch(x, y, 'EdgeColor', 'k');

       运行结果将显示一个四边形的轮廓,边线为黑色。

       ### 实例5:使用结构体绘制多边形

       使用结构体定义多边形的顶点进行绘制:

       matlab

       P = [0, 1, 1, 0; 0, 0, 1, 1];

       patch(P(1,:), P(2,:), 'g');

       运行结果将显示一个绿色填充的四边形。

       ### 实例6:绘制半透明多边形

       调整alpha值以绘制半透明多边形:

       matlab

       x = [0, 1, 1, 0];

       y = [0, 0, 1, 1];

       patch(x, y, 'r', 'FaceAlpha', 0.5);

       运行结果将显示一个半透明红色的四边形。

       ### 实例7:创建多种线条颜色

       通过设置不同的边颜色,创建包含多种线条颜色的多边形:

       matlab

       x = [0, 1, 1, 0];

       y = [0, 0, 1, 1];

       patch(x, y, 'EdgeColor', 'r', 'FaceColor', 'b');

       运行结果将显示一个边为红色、面为蓝色的四边形。

       ### 参考内容

       - [MathWorks的patch函数帮助文档](链接)

       - [知乎作者古月志的文章《matlab学习笔记——科研绘图》](链接)

       以上示例展示了patch函数在MATLAB中的多种应用,通过调整参数,可以绘制出满足不同需求的多边形图形。

用Turbo C实现多边形填充与种子填充

       #include "Conio.h"

       #include "graphics.h"

       #define closegr closegraph

       void initgr(void) /* BGI初始化 */

       { int gd=DETECT,gm=0; /* 和gd=VGA,gm=VGAHI是同样效果 */

        registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */

        initgraph(&gd,&gm,"");

       }

       void seedfilling(x,y,fill_color,boundary_color)

       int x,y,fill_color,boundary_color;

       {

       int c;

       c=getpixel(x,y); /*获取当前点的颜色*/

       if((c!=boundary_color)&&(c!=fill_color)) /*如果颜色为边界色则不填充*/

       {

       putpixel(x, y, fill_color); /*画点*/

       getch(); /*加上这条语句可以显示填充状态 */

       seedfilling(x+1,y, fill_color, boundary_color);

       seedfilling(x-1,y, fill_color, boundary_color);

       seedfilling(x, y+1, fill_color, boundary_color);

       seedfilling(x, y-1, fill_color, boundary_color);

       }

       }

       void main()

       {

        int a,b,color;

        int gd=DETECT , gm;

        int poly[];

        a= ;

        b=;

        color=4;

        initgraph(&gd , &gm , "");

        poly[0] = ; /* 第一个点的x坐标以及y坐标 */

        poly[1] = ;

        poly[2] = ; /* 第二点 */

        poly[3] = ;

       poly[4] = ; /* 第三点 */

        poly[5] = ;

        poly[6]=; /*第四点*/

        poly[7]=;

        poly[8]=; /*多边形的起点与终点一样*/

        poly[9]=;

        drawpoly(5,poly);/* 显示各点连接起来的多边形 */

        seedfilling(a,b,color,); /*种子填充多边形*/

        getch();

        closegraph();

       }

C语言中的图形函数有哪些

       一) 像素函数

        putpiel() 画像素点函数

        getpixel()返回像素色函数

       (二) 直线和线型函数

        line() 画线函数

        lineto() 画线函数

        linerel() 相对画线函数

        setlinestyle() 设置线型函数

        getlinesettings() 获取线型设置函数

        setwritemode() 设置画线模式函数

       (三)、多边形函数

        rectangle() 画矩形函数

        bar() 画条函数

        bar3d() 画条块函数

        drawpoly() 画多边形函数

       (四)、 圆、弧和曲线函数

       getaspectratio()获取纵横比函数

        circle()画圆函数

        arc() 画圆弧函数

        ellipse()画椭圆弧函数

        fillellipse() 画椭圆区函数

        pieslice() 画扇区函数

        sector() 画椭圆扇区函数

       getarccoords()获取圆弧坐标函数

       (五)、 填充函数

        setfillstyle() 设置填充图样和颜色函数

        setfillpattern() 设置用户图样函数

        floodfill() 填充闭域函数

        fillpoly() 填充多边形函数

        getfillsettings() 获取填充设置函数

        getfillpattern() 获取用户图样设置函数

       (六)、图像函数

        imagesize() 图像存储大小函数

        getimage() 保存图像函数

        putimage() 输出图像函数

C语言实现多边形填充

       æ¥¼ä¸»é—®çš„是图形学算法。。1楼给出的是??

       æœ‰ä»¥å‰å†™äº†ä¸€ä¸ªå¤šè¾¹å½¢ç§å­å¡«å……算法用的是贝塞尔方法你拿去看下把。。

       1 用Bresenham直线与圆组成的扇形

       void CFill4Dlg::Bresenham(int x0,int y0,int x1,int y1,int color)

       {

        int x,y,dx,dy,e;

        dx=y1-x0;

        dy=y1-y0;

        e=-dx;

        x=x0;

        y=y0;

        CClientDC dc(this);

        for(x=x0;x<x1;x++)

        {

        dc.SetPixel(x,(int)(y+0.5),color);

        e=e+2*dy;

        if(e>=0)

        {

        y++;

        e=e-2*dx;

        }

        }

       }

       void CFill4Dlg::CirclePoints(int x,int y,int m,int n,int color)

       {

        CClientDC dc(this);

        dc.SetPixel(x+m_cx,y+m_cy,color);

        dc.SetPixel(y+m_cx,x+m_cy,color);

        dc.SetPixel(-x+m_cx,y+m_cy,color);

        dc.SetPixel(y+m_cx,-x+m_cy,color);

        dc.SetPixel(x+m_cx,-y+m_cy,color);

        dc.SetPixel(-y+m_cx,x+m_cy,color);

        dc.SetPixel(-x+m_cx,-y+m_cy,color);

        dc.SetPixel(-y+m_cx,-x+m_cy,color);

       }

       void CFill4Dlg::MidPointCircle(int r,int m,int n,int color)

       {

        int x,y;

        float d;

        x=0;

        y=r;

        d=float(1.-r);

        CirclePoints(x,y,m,n,color);

        while(x<=y)

        {

        if(d<0)

        d+=2*x+3;

        else

        {

        d+=2*(x-y)+5;

        y--;

        }

        x++;

        CirclePoints(x,y,m,n,color);

        }

       }

       2 填充:

       ç§å­è®¾å®š filled_color=getpixel(m_zx,m_zy);

       typedef struct

       { //记录种子点

        int x;

        int y;

       }seed;

       seed * seed_p;

       #define STACKTOTAL

       void stack_init();

       void setstackempty();

       void stackpush(seed pt);

       seed stackpop();

       bool isstackempty();

       int stack_number;

       å¡«å……:

       void CFill4Dlg::FloodFill4(int x,int y,int oldcolor,int newcolor)

       {

        CClientDC dc(this);

        if((int)dc.GetPixel(x,y)==oldcolor)

        {

        drawpixel(x,y,newcolor);

        FloodFill4(x,y+1,oldcolor,newcolor);

        FloodFill4(x,y-1,oldcolor,newcolor);

        FloodFill4(x-1,y,oldcolor,newcolor);

        FloodFill4(x+1,y,oldcolor,newcolor);

        }

       }

       void CFill4Dlg::drawpixel(int x, int y, int color)

       {

        CClientDC dc(this);

        dc.SetPixel(x,y,color);

       }

copyright © 2016 powered by 皮皮网   sitemap