Консультация № 187337
14.05.2013, 16:29
130.79 руб.
0 1 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Нужно сделать windows forms c#, MS visual studio


Должно получится что то типо такого


Код студенческого это три цифры
При i и j =1 получится круг, а например при 2, 2 получится 4 круга
Aij число которое можно при решении поменять вручную
График функции строится на форме в пределах плоскости построения имеющей размеры в
количестве пикселей соответственно меняются x и y и в 0-255 ничего не переводится.
Так же скдываю методичку, если есть вопросы можно открыть rghost.ru
Яндекс.Диск

Обсуждение

Неизвестный
14.05.2013, 19:18
общий
это ответ
Здравствуйте, Илья!
По Вашему заданию на форме должна быть только одна полоса прокрутки для коэффициента A. Коэффициенты L и С зависят только от номера зачетки (константа в программе).
Самое сложное - понять что такое вертикальный разрез функции. В моем понимании это значит что нужно рисовать только заданные значения функции, в противном случае пришлось бы рисовать трехмерную картинку, как это делается при построении вейвлетов. Программно я проверяю попадают ли значения в диапазон от половины коэффициента A до A+1 (поскольку для вещественного числа сложно указать точное значение) из-за погрешностей вычисления, естественно лучше поэкспериментировать с диапазоном. Картинка получается очень похожей на ту, что у вас задании. На самом деле поскольку функция периодическая, кругов будет не 1 и не 4, их количество будет зависеть от размера формы. Рисование я реализовать в элементе управления PictureBox, что для меня кажется более логичным нежели рисовать на форме. Для A = 1 картинка не столь красивая. Картинка будет красивее, если все же рисовать не срез, а все значения функции в оттенках цвета, например зеленого. Закомментировал блок, который рисует в оттенках, можете удалить. На форме 3 TextBox, HScrollBar, PictureBox и кнопка с именами по умолчанию.


Приложение:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Func
{
public partial class Form1 : Form
{
const int code = 234;
const float L = 2 * code;
const float C = 0.8F * L;
public Form1()
{
InitializeComponent();
}

private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
textBox1.Text = hScrollBar1.Value.ToString();
}
public double ksi(int i, int j, int a, int x, int y)
{
return a * (Math.Cos(i * Math.PI * x / L - (1 - (-1) ^ i) * Math.PI / 4)) * Math.Sin(j * Math.PI * y / C - (1 - (-1) ^ j) * Math.PI / 4);
}

private void button1_Click(object sender, EventArgs e)
{
try
{
Bitmap bmp = new Bitmap(800, 360);
Graphics gra = Graphics.FromImage(bmp);
// double max = 0;
pictureBox1.Image = bmp;

for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{

double ks = ksi(int.Parse(textBox2.Text), int.Parse(textBox3.Text), hScrollBar1.Value, i, j);
//if ( ks > max) { max = ks; }

if ((Math.Abs(ks) > int.Parse(textBox1.Text) / 2) && (Math.Abs(ks) < int.Parse(textBox1.Text) / 2 + 0.1))
bmp.SetPixel(i, j, Color.Black);
}
}

//for (int i = 0; i < bmp.Width; i++)
//{
// for (int j = 0; j < bmp.Height; j++)
// {
// //gra.DrawEllipse(new Pen(Color.Red, 2), new Rectangle(i, j, 4, 4));
// // bmp.SetPixel(i,j,Color.Red);
// double ks = ksi(int.Parse(textBox2.Text), int.Parse(textBox3.Text), hScrollBar1.Value, i, j);
// // if (ks > max) { max = ks; }

// //if ((Math.Abs(ks) > int.Parse(textBox1.Text) / 2) && (Math.Abs(ks) < int.Parse(textBox1.Text) / 2 + 0.1))
// bmp.SetPixel(i, j, Color.FromArgb((int)(Math.Abs(ks / max * 255)), (int)(Math.Abs(ks / max * 255)), (int)(Math.Abs(ks / max * 255))));
// }
//}


pictureBox1.Image = bmp;

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
5
Большое спасибо! Помогли
Форма ответа