using System;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI.DataVisualization.Charting;

/// <summary>
///CalculateData 的摘要说明
/// </summary>
public class CalculateData
{
	public CalculateData()
	{
		//
		//TODO: 在此处添加构造函数逻辑
		//
	}
    /// <summary>
    /// 观测值最大值
    /// </summary>
    /// <param name="Xn">子组观测值</param>
    /// <returns></returns>
    static private double Max(double[] Xn)
    {
        double temp;
        temp = Xn[0];
        for (int i = 0; i < Xn.Length; i++)
        {
            temp = (Xn[i] > temp) ? Xn[i] : temp;
        }
        return temp;
    }
    /// <summary>
    /// 观测值最小值
    /// </summary>
    /// <param name="Xn">子组观测值</param>
    /// <returns></returns>
    static private double Min(double[] Xn)
    {
        double temp;
        temp = Xn[0];
        for (int i = 0; i < Xn.Length; i++)
        {
            temp = (Xn[i] < temp) ? Xn[i] : temp;
        }
        return temp;
    }
    /// <summary>
    /// 计算X在区间[ValueDown，ValueUp]的数量
    /// </summary>
    /// <param name="X"></param>
    /// <param name="GroupCount"></param>
    /// <param name="ValueDown"></param>
    /// <param name="ValueUp"></param>
    /// <param name="Yk"></param>
    static private void SumRang(double[] X, int GroupCount, double[] ValueDown, double[] ValueUp, out double[] Yk, out double[] YkCount)
    {
        int temp = 0;
        //总数量
        int allCount = 0;
        Yk = new double[GroupCount];
        YkCount = new double[GroupCount];
        for (int j = 0; j < GroupCount - 1; j++)
        {
            temp = 0;
            for (int i = 0; i < X.Length; i++)
            {

                if (X[i] >= ValueDown[j] & X[i] < ValueUp[j])
                {
                    temp = temp + 1;
                    allCount++;
                }
            }
            Yk[j] = temp;
        }

        for (int i = 0; i < X.Length; i++)
        {

            if (X[i] >= ValueDown[GroupCount - 1] & X[i] <= ValueUp[GroupCount - 1])
            {
                temp = temp + 1;
                allCount++;
            }
        }
        Yk[GroupCount - 1] = temp;
        for (int i = 0; i < Yk.Length; i++)
        {
            YkCount[i] = Yk[i];
            Yk[i] = Yk[i] / (double)allCount * 100;
        }
    }
    public static void DataPareto(double[] Data,int GroupCount)
    {
        Spc_Data_Pareto m_Spc_Data_Pareto = new Spc_Data_Pareto();
        //数组最大值
        double minValue = Min(Data);
        //数组最小值
        double maxValue = Max(Data);
        //X轴刻度
        double XSpan = (maxValue - minValue) / GroupCount;
        //X轴下刻度线
        double[] XSpanDown = new double[GroupCount];
        //X轴上刻度线
        double[] XSpanUp = new double[GroupCount];
        double[] Yk=new double[GroupCount];

        XSpanDown[0] = minValue;
        XSpanUp[0] = minValue + XSpan;
        for (int i = 1; i < GroupCount; i++)
        {
            XSpanDown[i] = minValue + i * XSpan;
            XSpanUp[i] = minValue + (i + 1) * XSpan;
        }
        //数据在区间数组的数量
        SumRang(Data, GroupCount, XSpanDown, XSpanUp, out Yk, out m_Spc_Data_Pareto.YCount);

        for (int i = 0; i < GroupCount; i++)
        {
            if (i == 0)
            {
                m_Spc_Data_Pareto.AxisX[i] = minValue + XSpan / 2;
            }
            else
            {
                m_Spc_Data_Pareto.AxisX[i] = minValue + XSpan;
            }
        }

    }
}
/// <summary>
/// 排列图数据
/// </summary>
public class Spc_Data_Pareto
{
    //X轴数据
    public double[] AxisX;
    //所有数据在X轴各范围内的数量
    public double[] YCount;
}