コード例 #1
0
        private void tabPage4_Paint(object sender, PaintEventArgs e)
        {
            Graphics g    = e.Graphics;
            int      maxX = 0;

            int[]    tempDiameter = new int[5];
            double[] diameter     = new double[5];
            double   maxDiameter;
            float    x1 = 100, y1 = 10;

            for (int i = 0; i <= 500; i += 100)
            {
                if (MyCalculate.IsMxMyMzMore(i, maxX))
                {
                    maxX = i;
                }
            }
            int maxDiameterIndex;

            if ((maxX >= 0 && maxX <= 50) || (maxX >= 450 && maxX <= 500))
            {
                maxDiameterIndex = 4;
            }
            else if (maxX > 50 && maxX <= 150)
            {
                maxDiameterIndex = 3;
            }
            else if (maxX > 150 && maxX <= 350)
            {
                maxDiameterIndex = 2;
            }
            else
            {
                maxDiameterIndex = 1;
            }
            g.DrawString("危险截面的横坐标:  x=" + Math.Round(a * maxX / 100.0, 2) + "m     截面直径为Φ" + maxDiameterIndex + "\n\n设计直径:",
                         font1, brush1, x1, y1);

            //设计直径1
            maxX = 350;
            for (int i = 351; i <= 450; i++)
            {
                if (MyCalculate.IsMxMyMzMore(i, maxX))
                {
                    maxX = i;
                }
            }
            maxDiameter = Math.Pow((32 * Math.Sqrt(MyCalculate.SumOfSquaresMxyz(maxX))) / (pi * permissibleStress), 1 / 3.0);
            diameter[1] = maxDiameter * 1000;
            g.DrawString("Φ1≥" + Math.Round(maxDiameter * 1000, 2) + "mm    在 x=" + maxX * a / 100.0 + "m 处应力最大",
                         font1, brush1, x1, y1 + 80);

            //设计直径2
            maxX = 150;
            for (int i = 151; i <= 350; i++)
            {
                if (MyCalculate.IsMxMyMzMore(i, maxX))
                {
                    maxX = i;
                }
            }
            maxDiameter = Math.Pow((32 * Math.Sqrt(MyCalculate.SumOfSquaresMxyz(maxX))) / (pi * permissibleStress), 1 / 3.0);
            diameter[2] = maxDiameter * 1000;
            g.DrawString("Φ2≥" + Math.Round(maxDiameter * 1000, 2) + "mm    在 x=" + maxX * a / 100.0 + "m 处应力最大",
                         font1, brush1, x1, y1 + 120);

            //设计直径3
            maxX = 50;
            for (int i = 51; i <= 150; i++)
            {
                if (MyCalculate.IsMxMyMzMore(i, maxX))
                {
                    maxX = i;
                }
            }
            maxDiameter = Math.Pow((32 * Math.Sqrt(MyCalculate.SumOfSquaresMxyz(maxX))) / (pi * permissibleStress), 1 / 3.0);
            diameter[3] = maxDiameter * 1000;
            g.DrawString("Φ3≥" + Math.Round(maxDiameter * 1000, 2) + "mm    在 x=" + maxX * a / 100.0 + "m 处应力最大",
                         font1, brush1, x1, y1 + 160);

            //设计直径4
            maxX = 0;
            for (int i = 1; i <= 50; i++)
            {
                if (MyCalculate.IsMxMyMzMore(i, maxX))
                {
                    maxX = i;
                }
            }
            for (int i = 450; i <= 500; i++)
            {
                if (MyCalculate.IsMxMyMzMore(i, maxX))
                {
                    maxX = i;
                }
            }
            maxDiameter = Math.Pow((32 * Math.Sqrt(MyCalculate.SumOfSquaresMxyz(maxX))) / (pi * permissibleStress), 1 / 3.0);
            diameter[4] = maxDiameter * 1000;
            g.DrawString("Φ4≥" + Math.Round(maxDiameter * 1000, 2) + "mm    在 x=" + maxX * a / 100.0 + "m 处应力最大",
                         font1, brush1, x1, y1 + 200);

            g.DrawString("之后根据比例关系得(这部分不同人有不同理解):", font2, brush1, x1, y1 + 240);
            int diameterStatus = 1;

            tempDiameter[1] = MyCalculate.NearestMoreEvenNumber(diameter[1]) - 2;
            while (diameterStatus != 4)
            {
                tempDiameter[1] += 2;
                if (tempDiameter[1] / 1.1 >= diameter[2])
                {
                    tempDiameter[2] = MyCalculate.NearestMoreEvenNumber(tempDiameter[1] / 1.1);
                    diameterStatus  = 2;
                }
                if (diameterStatus == 2 && tempDiameter[2] / 1.1 >= diameter[3])
                {
                    tempDiameter[3] = MyCalculate.NearestMoreEvenNumber(tempDiameter[2] / 1.1);
                    diameterStatus  = 3;
                }
                if (diameterStatus == 3 && tempDiameter[3] / 1.1 >= diameter[4])
                {
                    tempDiameter[4] = MyCalculate.NearestMoreEvenNumber(tempDiameter[3] / 1.1);
                    diameterStatus  = 4;
                }
            }
            g.DrawString("Φ1≥ " + tempDiameter[1] + " mm" +
                         "\n\nΦ2≥ " + tempDiameter[2] + " mm" +
                         "\n\nΦ3≥ " + tempDiameter[3] + " mm" +
                         "\n\nΦ4≥ " + tempDiameter[4] + " mm",
                         font2, brush1, x1, y1 + 270);
            textBox13.Text = "" + tempDiameter[1];
        }