Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Параграф 3. Создание гистограмм





Для построения гистограмм нам потребуется внести в наш класс одну новую функцию и один массив переменных Brush. Можно было воспользоваться классом SolidBrush и по датчику случайных чисел формировать цвета, но все же, более приятно смотреть гистограмму с удачно подобранными соседними цветами (каждый может выполнить подборку цветов на свой вкус).

private Brush[] br ={

Brushes.LightGreen,Brushes.Chartreuse,Brushes.LimeGreen,Brushes.Green,Brushes.DarkGreen,

Brushes.DarkOliveGreen,Brushes.LightPink,Brushes.LightSeaGreen,Brushes.LightCoral,Brushes.DarkCyan,

Brushes.Crimson,Brushes.CornflowerBlue,Brushes.Chocolate,Brushes.CadetBlue,Brushes.BlueViolet,

Brushes.Maroon, Brushes.Blue,Brushes.Brown,Brushes.DarkBlue, Brushes.Red,

Brushes.Coral,Brushes.DarkRed, Brushes.DarkMagenta, Brushes.DarkOrange,Brushes.DarkOrchid};

И так, нам понадобится всего лишь одна новая функция. Основное отличие - использование функции FillRectangle.

#region Рисование Гистограммы

//Параметры: a=0 без сдвига цвета a=1 со сдвигом

//b = 0 - без разрыва столбиков > 1 - с разрывом и величина разрыва в %

public void vDrawGraphRectangular(int a, int c)

{

string s = string.Empty;

string s1 = string.Empty;

string s2 = string.Empty;

float f = 0;

float x1 = 0;

float x = viDeltaaxisL;

float y = viY - viDeltaaxisH;

float fMax = float.MinValue;

for (int i = 0; i < viMaxRg; i++)

{

s = rgsValues[i, 0];

if (fMax < float.Parse(s)) fMax = float.Parse(s);

}

//Пикселей для рисования по оси х

float fdeltax = viX - viDeltaaxisL - viDeltaaxisR;

//Пикселей на один отсчет

fdeltax = fdeltax / (float)(viMaxRg - 1);

//Пикселей для рисования по оси y

float fdeltay = viY - 2 * viDeltaaxisH;

//Пикселей на одну единицу массива значений

fdeltay = fdeltay / fMax;

float fdx = 0;

if (c!= 0) fdx = (fdeltax * c / 100) / 2;

Random rand = new Random(DateTime.Now.Millisecond);

int arn = rand.Next((int)br.Length);

objBrush = br[arn];

for (int i = 0; i < viMaxRg - 1; i++)

{

s = rgsValues[i, 0];

f = float.Parse(s);

x1 = x + ((float)i * fdeltax);

if (a == 0)

{

graph.FillRectangle(objBrush, x1 + fdx, y - fdeltay * f,

fdeltax - 2 * fdx, fdeltay * f);

}

else

{

int b = i % br.Length;

graph.FillRectangle(br[b], x1 + fdx, y - fdeltay * f,

fdeltax - 2 * fdx, fdeltay * f);

}

if (i == viMaxRg - 2)

{

int b = (i + 1) % br.Length;

s = rgsValues[i + 1, 0];

f = float.Parse(s);

x1 = x + ((float)(i + 1) * fdeltax);

if (a == 0)

{

graph.FillRectangle(objBrush, x1 - 2, y - fdeltay * f,

4/*fdeltax*/, fdeltay * f);

}

else

{

graph.FillRectangle(br[b], x1 - 2, y - fdeltay * f,

4/*fdeltax*/, fdeltay * f);

}

}

}

}

#endregion

Запишем код обработки нажатия кнопки 2 и выполним решение:

private void button2_Click(object sender, EventArgs e)

{

viNumButton = 2;

vCreateRectangleDiagramm();

}

private void vCreateRectangleDiagramm()

{

//Создаем массив значений для вывода на графике

vCreateRg();

//Создаем класс и передаем ему размер холсты

PaintCl clPaint = new PaintCl(pictureBox1.Width, pictureBox1.Height);

//Фон холста

clPaint.vSetBackground(Color.White);

//Параметры вызоыва: отступы слева, справа, сверху(снизу),Цвет осей, толщина пера

clPaint.vDravAxis(50, 50, 30, Color.Red, 2,true);

clPaint.vSetPenWidthLine(1);

clPaint.vSetPenColorLine(Color.Silver);

clPaint.MaxRg = 20;

clPaint.vDravGrid();

clPaint.vSetPenWidthLine(2);

clPaint.vSetPenColorLine(Color.Green);

clPaint.RgValue = rgsValues;

//a=0 без сдвига цвета a=1 со сдвигом,b = 0 - без разрыва, > 1 - с разрывом и величина разрыва в %

clPaint.vDrawGraphRectangular(1, 5);

Font objFont = new Font("Arial", 7, FontStyle.Bold | FontStyle.Italic);

clPaint.font = objFont;

clPaint.brush = Brushes.Blue;

clPaint.vDrawTextAxXNumber(false);

//clPaint.vDrawTextAxXValues(true);

clPaint.vDrawTextAxYValues();

clPaint.vDrawTextAxYValuesPoint(true, false);

//Принимаем нарисованное в pictureBox

pictureBox1.Image = clPaint.Bmp;

}

Цветом показано единственное отличие от кода создания линейной диаграммы. Результат работы кода приведен на Рис.11.:

Рис.11. Гистограмма


В начало







Date: 2015-09-02; view: 307; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.012 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию