Цель работы
Cоздать из массива целых чисел 3D модель (3D Surface
plot или 3D histogram) и вывести результат моделирования на экран.
Лабораторное задание
1. . Изучить принципы работы графической библиотеки WPF.
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)
{
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";
}
private
void exitToolStripMenuItem_Click(object sender,
EventArgs e)
{
Application.Exit();
}
}
}
Результаты работы программы
Комментариев нет:
Отправить комментарий