博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
刻度轴 规范值算法
阅读量:2438 次
发布时间:2019-05-10

本文共 1525 字,大约阅读时间需要 5 分钟。

 //CorMax 数据最大值

   //CorMin 数据最小值

   //CorNumber 刻度个数

   public void Standard(ref double CorMax, ref double CorMin, int CorNumber)

        {

            double tmpMax, tmpMin;

            double CorStep, tmpStep;

            int tmpNumber;

            double temp;

            int extraNumber;

            if (CorMax > CorMin)

            {

                //计算原始步长

                CorStep = (CorMax - CorMin) / CorNumber;


                //计算步长的数量级

                if (Math.Pow(10, (int)(Math.Log(CorStep) / Math.Log(10))) == CorStep)

                {

                    temp = Math.Pow(10, (int)(Math.Log(CorStep) / Math.Log(10)));

                }

                else

                {

                    temp = Math.Pow(10, (int)(Math.Log(CorStep) / Math.Log(10)) + 1);

                }



                //将步长修正到(O,1)问

                tmpStep = CorStep / temp;

                //选取规范步长

                if (tmpStep >= 0 && tmpStep <= 0.1)

                {

                    tmpStep = 0.1;

                }

                else if (tmpStep >= 0.100001 && tmpStep <= 0.2)

                {

                    tmpStep = 0.2;

                }

                else if (tmpStep >= 0.200001 && tmpStep <= 0.25)

                {

                    tmpStep = 0.25;

                }

                else if (tmpStep >= 0.25001 && tmpStep <= 0.5)

                {

                    tmpStep = 0.5;

                }

                else

                {

                    tmpStep = 1;

                }

              

                //规范步长按数量级还原

                tmpStep = tmpStep * temp;

                //修正起点值

                if ((int)(CorMin / tmpStep) != (CorMin / tmpStep))

                {

                    CorMin = (int)(CorMin / tmpStep) * tmpStep;

                }

              


                if ((int)(CorMax / tmpStep) != (CorMax / tmpStep))

                {

                    CorMax = (int)(CorMax / tmpStep + 1) * tmpStep;

                }


                //看最后修正是否必要,包括:刻度数、起点值、终点值


                tmpNumber = Convert.ToInt32((CorMax - CorMin) / tmpStep);


                if (tmpNumber < CorNumber)

                {

                    extraNumber = CorNumber - tmpNumber;

                    if (extraNumber % 2 == 0)

                    {

                        CorMax = CorMax + tmpStep * (int)(extraNumber / 2);

                    }

                    else

                    {


                        CorMax = CorMax + tmpStep * (int)(extraNumber / 2 + 1);


                    }

                    CorMin = CorMin - tmpStep * (int)(extraNumber / 2);


                    if (CorMin < 0)

                    {

                        CorMax = CorMax - CorMin;

                        CorMin = 0;

                    }


                }

                CorNumber = tmpNumber;

            }

        }

转载地址:http://fjrmb.baihongyu.com/

你可能感兴趣的文章
深入DCOM之MTA (转)
查看>>
WTL的消息机制 (转)
查看>>
一般应用程序的oracle配置 (转)
查看>>
旅店管理系统用例流程分析 (转)
查看>>
千兆IDS中的亮点与谎言 (转)
查看>>
Jboss3.0-Tomcat4.03,Apache整合 (转)
查看>>
【GNU/Linux实战手记之Emacs篇 上】 (转)
查看>>
关于无法创建aps.web项目的解决办法 (转)
查看>>
Jboss3.0-Tomat4.03下Ejb的开发之一(SessionBean的开发) (转)
查看>>
CVS在MAC OSX中的安装和使用 (转)
查看>>
世界图景悖论 (转)
查看>>
(转贴)关于进程和线程 (转)
查看>>
强类型、弱类型与动态类型 (转)
查看>>
POSIX线程详解(2) (转)
查看>>
BCB中用Sender实现代码重用(纠正篇) (转)
查看>>
C++ Builder 初学问与答(四) (转)
查看>>
关于.NET中WinForms里面的ListBox实现数据绑定的解决方法 (转)
查看>>
WebSphere5.0开发EJB,工具比较篇 (转)
查看>>
Nt/2000/xp平台下的存储控制模型(Access Control Model) (转)
查看>>
C++ Builder 初学问与答(五) (转)
查看>>