【几何】多少正方形?

题目

多少正方形?
在这里插入图片描述


枚举

设每个横纵相邻点得间距为1,则我们可以依次输出下列边长为 a a a的正方形的数量:

边长为1

a = 1 a=1 a=1
在这里插入图片描述


边长为 2 \sqrt{2} 2

a = 1 2 + 1 2 = 2 a=\sqrt{1^2+1^2}=\sqrt{2} a=12+12 =2
在这里插入图片描述


边长为 5 \sqrt{5} 5

a = 1 2 + 2 2 = 5 a=\sqrt{1^2+2^2}=\sqrt{5} a=12+22 =5
在这里插入图片描述


边长为 8 \sqrt{8} 8

a = 2 2 + 2 2 = 8 a=\sqrt{2^2+2^2}=\sqrt{8} a=22+22 =8

在这里插入图片描述


边长为 13 \sqrt{13} 13

a = 2 2 + 3 2 = 13 a=\sqrt{2^2+3^2}=\sqrt{13} a=22+32 =13
在这里插入图片描述

按上述尺寸数得各个大小正方形数量如下:

{ C 1 = 9   a = 1 C 2 = 4   a = 1 2 + 1 2 = 2 C 3 = 2   a = 1 2 + 2 2 = 5 C 4 = 4   a = 2 2 + 2 2 = 2 2 C 5 = 2   a = 2 2 + 3 2 = 13 \begin{cases} C_1=9 &\text{ } a=1 \\ C_2=4 &\text{ } a=\sqrt{1^2+1^2}=\sqrt{2}\\ C_3=2 &\text{ } a=\sqrt{1^2+2^2}=\sqrt{5}\\ C_4=4 &\text{ } a=\sqrt{2^2+2^2}=2\sqrt{2}\\ C_5=2 &\text{ } a=\sqrt{2^2+3^2}=\sqrt{13} \end{cases} C1=9C2=4C3=2C4=4C5=2 a=1 a=12+12 =2  a=12+22 =5  a=22+22 =22  a=22+32 =13

C = C 1 + C 2 + C 3 + C 4 + C 5 = 9 + 4 + 2 + 4 + 2 = 21 \begin{equation} \begin{split} C&=C_1+C_2+C_3+C_4+C_5 \\ &=9+4+2+4+2 \\ &=21 \end{split} \end{equation} C=C1+C2+C3+C4+C5=9+4+2+4+2=21
在这里插入图片描述

扩展-使用代码来数

1、定义点对象

        /// <summary>
        /// 点对象
        /// </summary>
        public class CPoint
        {
            /// <summary>
            /// 点横坐标
            /// </summary>
            public double X { get; set; }
            /// <summary>
            /// 点纵坐标
            /// </summary>
            public double Y { get; set; }
            /// <summary>
            /// 点相对位置角度
            /// </summary>
            public double Angle { get; set; }
            /// <summary>
            /// 点编号
            /// </summary>
            public int Index { get; set; }
            public CPoint(int index,double x,double y,double a = 0)
            {
                this.X = x;
                this.Y = y;
                this.Index = index;
                this.Angle = a;
            }
            /// <summary>
            /// 判断两个点是否是同一个点
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public override bool Equals(object obj)
            {
                if (obj == null) return false;
                if (obj.GetType() != typeof(CPoint)) return false;
                var val =(CPoint) obj;
                if(this.X == val.X && this.Y == val.Y)
                {
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 格式化点对象
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                return $"{Index}.({X},{Y}){Angle}";
            }
            /// <summary>
            /// 50倍绘制圆点
            /// </summary>
            /// <returns></returns>
            public RectangleF DrawCircle()
            {
                float size = 10;
                return new RectangleF((float)(X *50 - size / 2), (float)(Y *50 - size / 2), size, size);
            }
            /// <summary>
            /// 50倍绘制点
            /// </summary>
            /// <returns></returns>
            public PointF DrawPnt()
            {
                return new PointF((float)(X * 50), (float)(Y * 50));
            }
        }

2、定义正方形对象

        /// <summary>
        /// 正方形对象
        /// </summary>
        public class CSqure
        {
            /// <summary>
            /// 正方形的点
            /// </summary>
            public List<CPoint> Points { get; set; }
            /// <summary>
            /// 正方形边长
            /// </summary>
            public double C { get; set; }
            /// <summary>
            /// 正方形中心点横坐标
            /// </summary>
            public double CenterX { get; set; }
            /// <summary>
            /// 正方形中心点纵坐标
            /// </summary>
            public double CenterY { get; set; }

            public CSqure(CPoint pnt1, CPoint pnt2, CPoint pnt3, CPoint pnt4)
            {
                if (Points == null)
                {
                    Points = new List<CPoint>();
                }
                Points.Add(pnt1);
                Points.Add(pnt2);
                Points.Add(pnt3);
                Points.Add(pnt4);
            }
            public PointF[] DrawSqure()
            {
                return new PointF[4] { Points[0].DrawPnt(), Points[1].DrawPnt(), Points[2].DrawPnt(), Points[3].DrawPnt() };
            }

            public PointF DrawCenter(SizeF size)
            {
                var center = CalculateCenter();
                var pnt = center.DrawPnt();
                return new PointF(pnt.X - size.Width / 2, pnt.Y - size.Height / 2);
            }
            /// <summary>
            /// 判断是否正方形
            /// </summary>
            /// <returns></returns>
            public bool IsSqure()
            {
                List<double> distances = new List<double>();

                // Calculate all pairwise distances
                for (int i = 0; i < Points.Count; i++)
                {
                    for (int j = i + 1; j < Points.Count; j++)
                    {
                        distances.Add(Distance(Points[i], Points[j]));
                    }
                }

                // 将所有点得距离进行排序
                distances.Sort();

                // 第一个距离必须大于0,前四个距离依次相等是边,后两个距离是对象线。四边相等且对角线相等为正方形
                if (distances[0] > 0 && Equal(distances[0], distances[1]) && Equal(distances[1], distances[2]) && Equal(distances[2], distances[3]) &&
                   Equal(distances[4], distances[5]))
                {
                    C = distances[0]; 
                    //计算每个点得顺序
                    List<CPoint> polygons = new List<CPoint>();
                    var center = CalculateCenter();
                    CenterX = center.X;
                    CenterY = center.Y;
                    for (int i = 0; i < Points.Count; i++)
                    {
                        var angle = CalculateAngle(center, Points[i]);
                        if (angle < 0)
                        {
                            angle += 360;
                        }
                        else if (angle >= 360)
                        {
                            angle -= 360;
                        }
                        polygons.Add(new CPoint(Points[i].Index, Points[i].X, Points[i].Y, angle));
                    }
                    Points = polygons.OrderBy(o => o.Angle).ToList();
                    return true;
                }
                return false;
            }

            /// <summary>
            /// 计算正方形中心点
            /// </summary>
            /// <returns></returns>
            public CPoint CalculateCenter()
            {
                double centerX = Points.Average(o => o.X);
                double centerY = Points.Average(o => o.Y);
                return new CPoint(0, centerX, centerY);
            }

            /// <summary>
            /// 计算旋转角
            /// </summary>
            /// <param name="center"></param>
            /// <param name="point"></param>
            /// <returns></returns>
            public double CalculateAngle(CPoint center, CPoint point)
            {
                double deltaY = point.Y - center.Y;
                double deltaX = point.X - center.X;
                double angleInRadians = Math.Atan2(deltaY, deltaX);
                double angleInDegrees = angleInRadians * (180.0 / Math.PI);
                return angleInDegrees;
            }
            /// <summary>
            /// 判断两个距离是否相等
            /// </summary>
            /// <param name="d1"></param>
            /// <param name="d2"></param>
            /// <returns></returns>
            public bool Equal(double d1, double d2)
            {
                if (Math.Abs(d2 - d1) < 0.000001)
                {
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 计算两点之间的距离
            /// </summary>
            /// <param name="pnt1"></param>
            /// <param name="pnt2"></param>
            /// <returns></returns>
            public double Distance(CPoint pnt1, CPoint pnt2)
            {
                double a = pnt1.X - pnt2.X;
                double b = pnt1.Y - pnt2.Y;
                double c = Math.Sqrt(a * a + b * b);
                return c;
            }
            /// <summary>
            /// 判断两个正方形是否是同一个正方形
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public override bool Equals(object obj)
            {
                if (obj == null) return false;
                if (obj.GetType() != typeof(CSqure)) return false;
                var val = (CSqure)obj;
                if (this.ToString() == obj.ToString())
                {
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 格式化正方形对象
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                var temps = Points.OrderBy(o => o.Index);
                return string.Join("-", temps.Select(o => o.Index));
            }
            /// <summary>
            /// 根据点获取所有正方形
            /// </summary>
            /// <param name="Points"></param>
            /// <returns></returns>
            public static List<CSqure> GetAllSqures(List<CPoint> Points)
            {
                List<CSqure> Squres = new List<CSqure>();
                for (int i = 0; i < Points.Count(); i++)
                {
                    for (int j = 0; j < Points.Count(); j++)
                    {
                        for (int k = 0; k < Points.Count(); k++)
                        {
                            for (int l = 0; l < Points.Count(); l++)
                            {
                                CSqure squre = new CSqure(Points[i], Points[j], Points[k], Points[l]);
                                if (squre.IsSqure())//判断是不是正方形
                                {
                                    bool isExist = false;
                                    foreach (var item in Squres)
                                    {
                                        if (item.ToString() == squre.ToString()) //判断是不是已经存在
                                        {
                                            isExist = true;
                                            break;
                                        }
                                    }
                                    if (!isExist)//没有找到过则添加到列表
                                    {
                                        Squres.Add(squre);
                                    }
                                }
                            }
                        }
                    }
                }
                Squres = Squres.OrderBy(o => o.C).ThenBy(o => o.CenterY).ThenBy(o => o.CenterX).ToList();
                return Squres;
            }
        }

3、初始化所有点

			//Points.Add(new CPoint(index++, 1, 1, 0));
            //Points.Add(new CPoint(index++, 1, 2, 0));
            Points.Add(new CPoint(index++, 1, 3, 0));
            Points.Add(new CPoint(index++, 1, 4, 0));
            //Points.Add(new CPoint(index++, 1, 5, 0));
            //Points.Add(new CPoint(index++, 1, 6, 0));
            //Points.Add(new CPoint(index++, 2, 1, 0));
            //Points.Add(new CPoint(index++, 2, 2, 0));
            Points.Add(new CPoint(index++, 2, 3, 0));
            Points.Add(new CPoint(index++, 2, 4, 0));
            //Points.Add(new CPoint(index++, 2, 5, 0));
            //Points.Add(new CPoint(index++, 2, 6, 0));
            Points.Add(new CPoint(index++, 3, 1, 0));
            Points.Add(new CPoint(index++, 3, 2, 0));
            Points.Add(new CPoint(index++, 3, 3, 0));
            Points.Add(new CPoint(index++, 3, 4, 0));
            Points.Add(new CPoint(index++, 3, 5, 0));
            Points.Add(new CPoint(index++, 3, 6, 0));
            Points.Add(new CPoint(index++, 4, 1, 0));
            Points.Add(new CPoint(index++, 4, 2, 0));
            Points.Add(new CPoint(index++, 4, 3, 0));
            Points.Add(new CPoint(index++, 4, 4, 0));
            Points.Add(new CPoint(index++, 4, 5, 0));
            Points.Add(new CPoint(index++, 4, 6, 0));
            //Points.Add(new CPoint(index++, 5, 1, 0));
            //Points.Add(new CPoint(index++, 5, 2, 0));
            Points.Add(new CPoint(index++, 5, 3, 0));
            Points.Add(new CPoint(index++, 5, 4, 0));
            //Points.Add(new CPoint(index++, 5, 5, 0));
            //Points.Add(new CPoint(index++, 5, 6, 0));
            //Points.Add(new CPoint(index++, 6, 1, 0));
            //Points.Add(new CPoint(index++, 6, 2, 0));
            Points.Add(new CPoint(index++, 6, 3, 0));
            Points.Add(new CPoint(index++, 6, 4, 0));
            //Points.Add(new CPoint(index++, 6, 5, 0));
            //Points.Add(new CPoint(index++, 6, 6, 0));

4、调用

public List<CSqure> Squres = CSqure.GetAllSqures(Points);

完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// 点对象
        /// </summary>
        public class CPoint
        {
            /// <summary>
            /// 点横坐标
            /// </summary>
            public double X { get; set; }
            /// <summary>
            /// 点纵坐标
            /// </summary>
            public double Y { get; set; }
            /// <summary>
            /// 点相对位置角度
            /// </summary>
            public double Angle { get; set; }
            /// <summary>
            /// 点编号
            /// </summary>
            public int Index { get; set; }
            public CPoint(int index,double x,double y,double a = 0)
            {
                this.X = x;
                this.Y = y;
                this.Index = index;
                this.Angle = a;
            }
            /// <summary>
            /// 判断两个点是否是同一个点
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public override bool Equals(object obj)
            {
                if (obj == null) return false;
                if (obj.GetType() != typeof(CPoint)) return false;
                var val =(CPoint) obj;
                if(this.X == val.X && this.Y == val.Y)
                {
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 格式化点对象
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                return $"{Index}.({X},{Y}){Angle}";
            }
            /// <summary>
            /// 50倍绘制圆点
            /// </summary>
            /// <returns></returns>
            public RectangleF DrawCircle()
            {
                float size = 10;
                return new RectangleF((float)(X *50 - size / 2), (float)(Y *50 - size / 2), size, size);
            }
            /// <summary>
            /// 50倍绘制点
            /// </summary>
            /// <returns></returns>
            public PointF DrawPnt()
            {
                return new PointF((float)(X * 50), (float)(Y * 50));
            }
        }

        /// <summary>
        /// 正方形对象
        /// </summary>
        public class CSqure
        {
            /// <summary>
            /// 正方形的点
            /// </summary>
            public List<CPoint> Points { get; set; }
            /// <summary>
            /// 正方形边长
            /// </summary>
            public double C { get; set; }
            /// <summary>
            /// 正方形中心点横坐标
            /// </summary>
            public double CenterX { get; set; }
            /// <summary>
            /// 正方形中心点纵坐标
            /// </summary>
            public double CenterY { get; set; }

            public CSqure(CPoint pnt1, CPoint pnt2, CPoint pnt3, CPoint pnt4)
            {
                if (Points == null)
                {
                    Points = new List<CPoint>();
                }
                Points.Add(pnt1);
                Points.Add(pnt2);
                Points.Add(pnt3);
                Points.Add(pnt4);
            }
            public PointF[] DrawSqure()
            {
                return new PointF[4] { Points[0].DrawPnt(), Points[1].DrawPnt(), Points[2].DrawPnt(), Points[3].DrawPnt() };
            }

            public PointF DrawCenter(SizeF size)
            {
                var center = CalculateCenter();
                var pnt = center.DrawPnt();
                return new PointF(pnt.X - size.Width / 2, pnt.Y - size.Height / 2);
            }
            /// <summary>
            /// 判断是否正方形
            /// </summary>
            /// <returns></returns>
            public bool IsSqure()
            {
                List<double> distances = new List<double>();

                // Calculate all pairwise distances
                for (int i = 0; i < Points.Count; i++)
                {
                    for (int j = i + 1; j < Points.Count; j++)
                    {
                        distances.Add(Distance(Points[i], Points[j]));
                    }
                }

                // 将所有点得距离进行排序
                distances.Sort();

                // 第一个距离必须大于0,前四个距离依次相等是边,后两个距离是对象线。四边相等且对角线相等为正方形
                if (distances[0] > 0 && Equal(distances[0], distances[1]) && Equal(distances[1], distances[2]) && Equal(distances[2], distances[3]) &&
                   Equal(distances[4], distances[5]))
                {
                    C = distances[0]; 
                    //计算每个点得顺序
                    List<CPoint> polygons = new List<CPoint>();
                    var center = CalculateCenter();
                    CenterX = center.X;
                    CenterY = center.Y;
                    for (int i = 0; i < Points.Count; i++)
                    {
                        var angle = CalculateAngle(center, Points[i]);
                        if (angle < 0)
                        {
                            angle += 360;
                        }
                        else if (angle >= 360)
                        {
                            angle -= 360;
                        }
                        polygons.Add(new CPoint(Points[i].Index, Points[i].X, Points[i].Y, angle));
                    }
                    Points = polygons.OrderBy(o => o.Angle).ToList();
                    return true;
                }
                return false;
            }

            /// <summary>
            /// 计算正方形中心点
            /// </summary>
            /// <returns></returns>
            public CPoint CalculateCenter()
            {
                double centerX = Points.Average(o => o.X);
                double centerY = Points.Average(o => o.Y);
                return new CPoint(0, centerX, centerY);
            }

            /// <summary>
            /// 计算旋转角
            /// </summary>
            /// <param name="center"></param>
            /// <param name="point"></param>
            /// <returns></returns>
            public double CalculateAngle(CPoint center, CPoint point)
            {
                double deltaY = point.Y - center.Y;
                double deltaX = point.X - center.X;
                double angleInRadians = Math.Atan2(deltaY, deltaX);
                double angleInDegrees = angleInRadians * (180.0 / Math.PI);
                return angleInDegrees;
            }
            /// <summary>
            /// 判断两个距离是否相等
            /// </summary>
            /// <param name="d1"></param>
            /// <param name="d2"></param>
            /// <returns></returns>
            public bool Equal(double d1, double d2)
            {
                if (Math.Abs(d2 - d1) < 0.000001)
                {
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 计算两点之间的距离
            /// </summary>
            /// <param name="pnt1"></param>
            /// <param name="pnt2"></param>
            /// <returns></returns>
            public double Distance(CPoint pnt1, CPoint pnt2)
            {
                double a = pnt1.X - pnt2.X;
                double b = pnt1.Y - pnt2.Y;
                double c = Math.Sqrt(a * a + b * b);
                return c;
            }
            /// <summary>
            /// 判断两个正方形是否是同一个正方形
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public override bool Equals(object obj)
            {
                if (obj == null) return false;
                if (obj.GetType() != typeof(CSqure)) return false;
                var val = (CSqure)obj;
                if (this.ToString() == obj.ToString())
                {
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 格式化正方形对象
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                var temps = Points.OrderBy(o => o.Index);
                return string.Join("-", temps.Select(o => o.Index));
            }
            /// <summary>
            /// 根据点获取所有正方形
            /// </summary>
            /// <param name="Points"></param>
            /// <returns></returns>
            public static List<CSqure> GetAllSqures(List<CPoint> Points)
            {
                List<CSqure> Squres = new List<CSqure>();
                for (int i = 0; i < Points.Count(); i++)
                {
                    for (int j = 0; j < Points.Count(); j++)
                    {
                        for (int k = 0; k < Points.Count(); k++)
                        {
                            for (int l = 0; l < Points.Count(); l++)
                            {
                                CSqure squre = new CSqure(Points[i], Points[j], Points[k], Points[l]);
                                if (squre.IsSqure())//判断是不是正方形
                                {
                                    bool isExist = false;
                                    foreach (var item in Squres)
                                    {
                                        if (item.ToString() == squre.ToString()) //判断是不是已经存在
                                        {
                                            isExist = true;
                                            break;
                                        }
                                    }
                                    if (!isExist)//没有找到过则添加到列表
                                    {
                                        Squres.Add(squre);
                                    }
                                }
                            }
                        }
                    }
                }
                Squres = Squres.OrderBy(o => o.C).ThenBy(o => o.CenterY).ThenBy(o => o.CenterX).ToList();
                return Squres;
            }
        }


        public List<CPoint> Points = new List<CPoint>();
        public List<CSqure> Squres = new List<CSqure>();
        Timer timer = new Timer();

        public Form1()
        {

            InitializeComponent();
            this.DoubleBuffered = true;
            timer.Tick += Timer_Tick;
            timer.Interval = 600;
            timer.Start();
            int index = 1;
            //Points.Add(new CPoint(index++, 1, 1, 0));
            //Points.Add(new CPoint(index++, 1, 2, 0));
            Points.Add(new CPoint(index++, 1, 3, 0));
            Points.Add(new CPoint(index++, 1, 4, 0));
            //Points.Add(new CPoint(index++, 1, 5, 0));
            //Points.Add(new CPoint(index++, 1, 6, 0));
            //Points.Add(new CPoint(index++, 2, 1, 0));
            //Points.Add(new CPoint(index++, 2, 2, 0));
            Points.Add(new CPoint(index++, 2, 3, 0));
            Points.Add(new CPoint(index++, 2, 4, 0));
            //Points.Add(new CPoint(index++, 2, 5, 0));
            //Points.Add(new CPoint(index++, 2, 6, 0));
            Points.Add(new CPoint(index++, 3, 1, 0));
            Points.Add(new CPoint(index++, 3, 2, 0));
            Points.Add(new CPoint(index++, 3, 3, 0));
            Points.Add(new CPoint(index++, 3, 4, 0));
            Points.Add(new CPoint(index++, 3, 5, 0));
            Points.Add(new CPoint(index++, 3, 6, 0));
            Points.Add(new CPoint(index++, 4, 1, 0));
            Points.Add(new CPoint(index++, 4, 2, 0));
            Points.Add(new CPoint(index++, 4, 3, 0));
            Points.Add(new CPoint(index++, 4, 4, 0));
            Points.Add(new CPoint(index++, 4, 5, 0));
            Points.Add(new CPoint(index++, 4, 6, 0));
            //Points.Add(new CPoint(index++, 5, 1, 0));
            //Points.Add(new CPoint(index++, 5, 2, 0));
            Points.Add(new CPoint(index++, 5, 3, 0));
            Points.Add(new CPoint(index++, 5, 4, 0));
            //Points.Add(new CPoint(index++, 5, 5, 0));
            //Points.Add(new CPoint(index++, 5, 6, 0));
            //Points.Add(new CPoint(index++, 6, 1, 0));
            //Points.Add(new CPoint(index++, 6, 2, 0));
            Points.Add(new CPoint(index++, 6, 3, 0));
            Points.Add(new CPoint(index++, 6, 4, 0));
            //Points.Add(new CPoint(index++, 6, 5, 0));
            //Points.Add(new CPoint(index++, 6, 6, 0));

            Squres = CSqure.GetAllSqures(Points);
        }

        private int drawIndex = 0;
        private void Timer_Tick(object sender, EventArgs e)
        {
            drawIndex++;
            if(drawIndex>Squres.Count())
            {
                drawIndex = 1;
            }
            Invalidate();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            foreach (var item in Points)
            {
                e.Graphics.FillEllipse(SystemBrushes.GrayText, item.DrawCircle()) ;
            }
            return;
            int indexr = 0;
            int indexg = 0;
            int indexb = 0;
            int start = 127;
            int r = start;
            int g = start;
            int b = start;
            int step = 40;
            int index=0;
            foreach (var item in Squres)
            {
                index++;
                indexr += step;
                if(index != drawIndex)
                {
                    continue;
                }
                if(indexr>255- start)
                {
                    indexg += step;
                    if (indexg > 255 - start)
                    {
                        indexb += step;
                        if (indexb > 255 - start)
                        {
                            indexb = 0;
                            indexg = 0;
                            indexb = 0;
                        }
                        indexg = 0;
                    }
                    indexr = 0;
                }
                var color = Color.FromArgb(255, r + indexr, g + indexg, b + indexb);
                var color2 = Color.FromArgb(255,255- r - indexr, 255 - g - indexg, 255 - b - indexb);
                using (Pen p = new Pen(color))
                using (Brush b2 = new SolidBrush(color))
                using (Brush b3 = new SolidBrush(color2))
                {
                    e.Graphics.FillPolygon(b2, item.DrawSqure());
                    e.Graphics.DrawPolygon(p, item.DrawSqure());
                    var size = e.Graphics.MeasureString($"{index}",this.Font);
                    e.Graphics.DrawString($"{index}",this.Font, b3, item.DrawCenter(size));

                    e.Graphics.DrawString($"{index}.边长:{item.C.ToString("0.00")}", this.Font, b3, new PointF(50,53));
                }
            }
            base.OnPaint(e);
        }
    }
}

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值