Цель работы
Создать из массива целых чисел 3D модель (3D Surface plot или 3D histogram) и вывести результат моделирования на экран.
Лабораторное задание
1. Изучить принципы работы графической библиотеки .NETFRAMEWORK.
2. С помощью данных библиотек в соответствии с заданием
разработать программу на языке C#.
3. Данные визуализации являются массивом – размером X разрядов, который
генерируется программно с помощью генератора случайных чисел (П) или читается
из двоичного файла (Ф) – данные записываются программно в файл, а затем
читаются из него функциями BinaryReader и BinaryWriter.
Данные о 3D моделях, которые необходимо создать, разрядности элементов массива, его размере и способе получения
берутся из задания, каждое из которых будет соответствовать одному из вариантов.
Вариант №5:
3D модель - 3D histogram ;
Массив состоит из
64-разрядных элементов;
Размер массива = 256
элементов;
Массив генерируется
программно с помощью генератора случайных чисел (П).
Листинг
Файл Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using C1.Win.C1Chart3D;
namespace WindowsFormsApplication5
{
public
partial class Form1 : Form
{
public const int COLS = 32;
public const int ROWS = 8;
public
Form1()
{
InitializeComponent();
}
public static Int64 NextInt64(Random rnd)
{
var buffer = new byte[sizeof(Int64)];
rnd.NextBytes(buffer);
return
BitConverter.ToInt64(buffer, 0);
}
private
void generationToolStripMenuItem_Click(object
sender, EventArgs e)
{
Random rnd = new Random();
Int64[] data = new Int64[256];
for
(int i = 0; i < 256; i++)
{
data[i] = rnd.Next(-7, 8);
}
System.IO.Stream myStream;
this.saveFileDialog1.Title
= "Сохранение";
this.saveFileDialog1.Filter
= "Lab4 files (*.data4lab)|*.data4lab";
this.saveFileDialog1.FilterIndex
= 1;
this.saveFileDialog1.RestoreDirectory
= true;
this.saveFileDialog1.FileName
= "Lab4Data";
if
(saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if
((myStream = saveFileDialog1.OpenFile()) != null)
{
System.IO.BinaryWriter bw =
new System.IO.BinaryWriter(myStream);
for
(int i = 0; i < 256; i++)
bw.Write((Int64)data[i]);
bw.Close();
myStream.Close();
}
}
}
private
void
visualisationToolStripMenuItem_Click(object sender, EventArgs e)
{
timer1.Stop();
string header;
int
k=0;
Int64[] data = new Int64[256];
System.IO.Stream myStream;
this.openFileDialog1.Title
= "Открытие";
this.openFileDialog1.FilterIndex
= 1;
this.openFileDialog1.Filter
= "Lab4 files (*.data4lab)|*.data4lab";
this.openFileDialog1.FileName
= "Lab4Data";
if
(openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if
((myStream = openFileDialog1.OpenFile()) != null)
{
System.IO.BinaryReader bw =
new System.IO.BinaryReader(myStream);
for (int i = 0; i < 256; i++)
data[i] =
bw.ReadInt64();
bw.Close();
myStream.Close();
}
}
for
(int j = 0; j < COLS; j++)
{
header = "C"
+ j.ToString();
dataGridView1.Columns.Add(header, header);
}
dataGridView1.Rows.Add(8);
for
(int i = 0; i < ROWS; i++)
{
dataGridView1.Rows[i].HeaderCell.Value = "R"
+ i.ToString();
for
(int j = 0; j < COLS; j++)
{
header = "C" + j.ToString();
dataGridView1.Rows[i].Cells[header].Value = data[k];
k++;
}
}
C1Chart3D1.ChartGroups[0].ChartData.SetGrid.RowCount = 8;
C1Chart3D1.ChartGroups[0].ChartData.SetGrid.ColumnCount = 32;
for
(int i = 0; i < ROWS; i++)
{
for
(int j = 0; j <COLS ; j++)
{
C1Chart3D1.ChartGroups[0].ChartData.SetGrid[j,i] =
Int64.Parse(dataGridView1.Rows[i].Cells["C"+j.ToString()].Value.ToString());
}
}
C1Chart3D1.Legend.Visible = true;
C1Chart3D1.Header.Visible = true;
C1Chart3D1.ChartArea.Visible = true;
Font f = new
Font("Arial", 20, FontStyle.Bold);
C1Chart3D1.ChartArea.Axes.AxisTitleFont = f;
C1Chart3D1.ChartArea.AxisX.Title = "Cols";
C1Chart3D1.ChartArea.AxisY.Title = "Rows";
C1Chart3D1.ChartArea.AxisZ.Title = "Z";
timer1.Enabled = true;
timer1.Start();
}
private
void exitToolStripMenuItem_Click(object sender,
EventArgs e)
{
timer1.Stop();
Application.Exit();
}
private
void timer1_Tick(object sender, EventArgs e)
{
Int64 perem = 0;
Random rnd = new Random();
for
(int i = 0; i < ROWS; i++)
{
for
(int j = 0; j < COLS; j++)
{
perem =
Int64.Parse(dataGridView1.Rows[i].Cells["C"
+ j.ToString()].Value.ToString());
perem = perem + rnd.Next(-2,
2);
C1Chart3D1.ChartGroups[0].ChartData.SetGrid[j, i] = perem;
}
}
}
}
}
Результаты работы программы
Комментариев нет:
Отправить комментарий