新加坡国旗的绘制(完整版)

news/2024/11/22 18:08:50/

1、结果展示

2、数据处理

首先,我们在网上找了一个新加坡图片的矢量图,将其放进CAD 中进行测量,采集数据。数据结果如下:

 找出图形之间位置关系:

 

 

 对采集的数据进行处理:

 3、代码展示:

1)先完成国旗底部颜色的填充;

2)完成月亮形状图形的绘制;

3)根据位置关系找到五角的圆心位置和半径,绘制相应的图形。

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            var g = this.pictureBox1.CreateGraphics();
            var p = new Pen(Color.Black);
            var point0 = new Point(200,50);
            int w = 50;
            g.Clear(Color.White);
            g.DrawRectangle(p,point0.X,point0.Y,w*9,w*6);
            var brush = new SolidBrush(Color.Red);
            
            g.FillRectangle(brush,200,50,450,150);

            g.FillEllipse(new SolidBrush(Color.White), (float)242.4, (float)68.5, 113,113);
            g.FillEllipse(new SolidBrush(Color.Red), (float)262.6, (float)71.9, (float)106.2, (float)106.2);

            //第一个五角星
            var pen1 = new Pen(Color.White);
            double R1 = 13.7;
            const double PI1 = Math.PI;
            double ct1 = PI1 / 10.0;
            Point pt1 = new Point(323, 93);
            Point[] pts1 = new Point[10];
            double dct1 = PI1 / 5.0;
            var brush1 = new SolidBrush(Color.White);
            double r1 = R1 * Math.Cos(2 * ct1) / 2;
            int i = 0;
            for (i = 0; i < 9; i += 2)
            {
                pts1[i].X = (int)Math.Round(pt1.X + R1 * Math.Cos(3*PI1/2+i * dct1));
                pts1[i].Y = (int)Math.Round(pt1.Y + R1 * Math.Sin(3*PI1/2+i * dct1));
            }
            for (i = 1; i < 10; i += 2)
            {
                pts1[i].X = (int)Math.Round(pt1.X + r1 * Math.Cos(3 * PI1 / 2 + i * dct1));
                pts1[i].Y = (int)Math.Round(pt1.Y + r1 * Math.Sin(3 * PI1 / 2 + i * dct1));
            }
            g.FillPolygon(brush1, pts1);

            //第二个五角星
            var pen2 = new Pen(Color.White);
            double R2 = 13.7;//
            const double PI2 = Math.PI;
            double ct2 = PI2 / 10.0;
            Point pt2 = new Point(293, 115);
            Point[] pts2 = new Point[10];
            double dct2 = PI2 / 5.0;
            var brush2 = new SolidBrush(Color.White);
            double r2 = R2 * Math.Cos(2 * ct2) / 2;
            int j = 0;
            for (j = 0; j < 9; j += 2)
            {
                pts2[j].X = (int)Math.Round(pt2.X + R2 * Math.Cos(3 * PI2 / 2 + j * dct2));
                pts2[j].Y = (int)Math.Round(pt2.Y + R2 * Math.Sin(3 * PI2 / 2 + j * dct2));
            }
            for (j = 1; j < 10; j += 2)
            {
                pts2[j].X = (int)Math.Round(pt2.X + r2 * Math.Cos(3 * PI2 / 2 + j * dct2));
                pts2[j].Y = (int)Math.Round(pt2.Y + r2 * Math.Sin(3 * PI2 / 2 + j * dct2));
            }
            g.FillPolygon(brush2, pts2);


            //第三个五角星
            var pen3 = new Pen(Color.White);
            double R3 = 13.7;
            const double PI3 = Math.PI;
            double ct3 = PI3 / 10.0;
            Point pt3 = new Point(305, 150);
            Point[] pts3 = new Point[10];
            double dct3 = PI3 / 5.0;
            var brush3 = new SolidBrush(Color.White);
            double r3 = R3 * Math.Cos(2 * ct3) / 2;
            int m = 0;
            for (m = 0; m < 9; m += 2)
            {
                pts3[m].X = (int)Math.Round(pt3.X + R3 * Math.Cos(3 * PI3 / 2 + m * dct3));
                pts3[m].Y = (int)Math.Round(pt3.Y + R3 * Math.Sin(3 * PI3 / 2 + m * dct3));
            }
            for (m = 1; m < 10; m += 2)
            {
                pts3[m].X = (int)Math.Round(pt3.X + r3 * Math.Cos(3 * PI3 / 2 + m * dct3));
                pts3[m].Y = (int)Math.Round(pt3.Y + r3 * Math.Sin(3 * PI3 / 2 + m * dct3));
            }
            g.FillPolygon(brush3, pts3);


            //第四个五角星
            var pen4 = new Pen(Color.White);
            double R4 = 13.7;
            const double PI4 = Math.PI;
            double ct4 = PI4 / 10.0;
            Point pt4 = new Point(342, 150);
            Point[] pts4 = new Point[10];
            double dct4 = PI4 / 5.0;
            var brush4 = new SolidBrush(Color.White);
            double r4 = R4 * Math.Cos(2 * ct4) / 2;
            int n = 0;
            for (n = 0; n < 9; n += 2)
            {
                pts4[n].X = (int)Math.Round(pt4.X + R4 * Math.Cos(3 * PI4 / 2 + n * dct4));
                pts4[n].Y = (int)Math.Round(pt4.Y + R4 * Math.Sin(3 * PI4 / 2 + n * dct4));
            }
            for (n = 1; n < 10; n += 2)
            {
                pts4[n].X = (int)Math.Round(pt4.X + r4 * Math.Cos(3 * PI4 / 2 + n * dct4));
                pts4[n].Y = (int)Math.Round(pt4.Y + r4 * Math.Sin(3 * PI4 / 2 + n * dct4));
            }
            g.FillPolygon(brush4, pts4);


            //第五个五角星
            var pen5 = new Pen(Color.White);
            double R5 = 13.7;
            const double PI5 = Math.PI;
            double ct5 = PI5 / 10.0;
            Point pt5 = new Point(352, 115);
            Point[] pts5 = new Point[10];
            double dct5 = PI5 / 5.0;
            var brush5 = new SolidBrush(Color.White);
            double r5 = R5 * Math.Cos(2 * ct5) / 2;
            int a = 0;
            for (a = 0; a < 9; a += 2)
            {
                pts5[a].X = (int)Math.Round(pt5.X + R5 * Math.Cos(3 * PI5 / 2 + a * dct5));
                pts5[a].Y = (int)Math.Round(pt5.Y + R5 * Math.Sin(3 * PI5 / 2 + a * dct5));
            }
            for (a = 1; a < 10; a += 2)
            {
                pts5[a].X = (int)Math.Round(pt5.X + r5 * Math.Cos(3 * PI5 / 2 + a * dct5));
                pts5[a].Y = (int)Math.Round(pt5.Y + r5 * Math.Sin(3 * PI5 / 2 + a * dct5));
            }
            g.FillPolygon(brush5, pts5);
        }
    }
}

4、运行结果展示

 


http://www.ppmy.cn/news/404202.html

相关文章

马来西亚国国旗

马来西亚国旗初步 &#xff08;1&#xff09;国旗图片 十四条红白相见的横条 十四角星 弦月 红色代表勇敢 蓝色象征团结 白色表示纯净 黄色表示国家元首 &#xff08;2&#xff09;国旗设计坐标长度比例关系 弦月 两个半径不同的圆组合出 十四角星 两个半径不…

巴基斯坦国旗

巴基斯坦国旗 巴基斯坦国旗呈长方形&#xff0c;长与宽之比为3:2。左侧是白色竖长方形&#xff0c;宽度占整个旗面的1/4&#xff1b;右侧为深绿色长方形&#xff0c;中央有一颗白色五角星和一弯白色新月。白色象征和平&#xff0c;代表国内信奉印度教、佛教、基督教、祆教的居…

以色列国旗

一 国旗样式 二 国旗介绍 以色列国国旗&#xff0c;是以色列国的国旗&#xff0c;国旗的形状是长方形&#xff1b;国旗的长宽之比约为3:2旗地为白色&#xff0c;上下各有一条蓝色宽带。蓝白两色来自犹太教徒祈祷时用的披肩的颜色。 1354年&#xff0c;波希米亚国王查理四世为…

canvas绘制中国国旗!

绘制中国国旗 1、题目 今天刚学了H5中的画布canvas元素&#xff0c;课堂上的案例挺有意思&#xff0c;就心血来潮想利用canvas绘制中国国旗&#xff1b; 2、思路 第一步&#xff0c;创建画布元素&#xff0c;在画布内作好辅助线和网格线来确定圆的位置&#xff1b;第二步&…

加密与解密 调试篇 动态调试技术 (五)-WinDbg

windbg主要厉害的地方是在他可以对内核调试 并且本身微软的产品 对windows调试适配度够高 注意 windbg给出的图形操作并不好用 主要是使用命令行来进行操作 我们省略安装 直接进入调试 file 可以打开软件 可以附加也可以分析dump文件还可以进行内核和 远程调试内核调试分为…

第十四届蓝桥杯大赛软件赛CB国赛-填空题(题目解析+完整代码)

前言 考完蓝桥杯了以后一直在咕咕咕, 所以题解直到现在才写出来&#xff08;&#xff09; 欢迎访问我的个人博客&#xff01; 第一题 题目描述 小蓝在黑板上连续写下从 1 到 2023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S 12345678910111213 . . . …

MEGA这个网盘你可以拥有,超级良心

MEGA 官网链接&#xff1a;https://mega.nz 这个网盘的特色 1.不会限速2.国内可用&#xff08;即使不会翻墙&#xff09;3.网盘云端加密&#xff0c;资源不会被封杀。4.官方还提供了Linux客户端 之后就会弹出mega的界面。界面看上去非常友好。接下来我们创建一个账号开始登陆…

访问mega网盘 的方法

目前默认状态下Mega是被和(%$)谐的。所以解决的思路是修改hosts文件。 1. hosts 文件的位置&#xff1a; Windows的位置为&#xff1a; C:\Windows\System32\drivers\etc\hostsLinux的位置为 /ect/hosts 2. 修改方法&#xff1a;首先打开hosts文件, windows下&#xff0c;将…