Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2011, 00:04   #1
~Леди~
 
Регистрация: 27.03.2011
Сообщений: 7
Вопрос График

Помогите, пожалуйта!!!!

Задание:
- Спектры амплитуд и фаз периодического пилообразно-го колебания с параметрами: амплитуда Е, период следования Т, длительность импульса - τ. Показать графически.
- Спектральную плотность одиночного импульса ( ПЕРЕОДИЧЕСКОГО сигнала) такой же формы с параметрами Е и τ.
- Определить частоту, ограничивающую 90% мощности сигнала.
- Восстановить исходный сигнал f(t) для ограниченного (90%) спектра и показать его графически.


Вобщем нужно построить график. Что бы строились прямоугольные треугольники через определенный интервал... а имеем мы только амплитуду колебания, период следования, длительность импульса...


Нужно еще два гравика начальные условия такие же только 1)где сигнал не переодический
2) при условии, что случайный сигнал формируется функцией random (A), где
А= 10*N , а N - номер варианта задания.
Это разные графики. Всего их 3

Заранее спасибо! Буду рада любой помощи =)
~Леди~ вне форума Ответить с цитированием
Старый 28.03.2011, 11:49   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Можно ли использовать сторонние компоненты? Если нет, то можно рисовать что-то вроде такого:
Код:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Graphics dc = CreateGraphics();
            DrawAxis(dc, new PointF(400, 400),30, 25, 300,300);
        }
        public void DrawAxis(Graphics dc,PointF point,float xstep,float ystep,float width,float heigth)
        {
            dc.FillRectangle(new SolidBrush(Color.White), point.X, point.Y-heigth, width, heigth);
            int nx = Convert.ToInt32(width / xstep);
            //Генерируем точки х в координатах пределов
            float[] x = new float[nx];
            //Gen X
            for (int i = 0; i < nx; i++)
            {
                x[i] = point.X + i * xstep;
            }
            //Step NY
            int ny = Convert.ToInt32(heigth / ystep);
            //Генерируем точки y в координатах пределов
            float[] y = new float[ny];
            //Gen Y
            for (int i = 0; i < ny; i++)
            {
                y[i] = point.Y - i * ystep;
            }
            for (int i = 0; i < x.Length; i++)
            {
                float hx1 = x[i]; float hx2 = x[i];
                float hy1 = point.Y;
                Pen p = new Pen(Color.Purple, 1f);
                float hy2 = hy1 - 7;
                dc.DrawLine(p, hx1, hy1, hx2, hy2);
            }
            for (int i = 0; i < y.Length; i++)
            {
                float hy1 = y[i]; float hy2 = y[i];
                float hx1 = point.X;
                Pen p = new Pen(Color.Purple, 1f);
                float hx2 = 0f;
                hx2 = hx1 + 7;
                dc.DrawLine(p, hx1, hy1, hx2, hy2);

            }
            DrawStr(dc, x, point.Y, xstep, x);//txt-подписи для осей,кидаю координаты х,но могут быть и другие
            DrawStrY(dc, y, point.X, ystep, y);
            for (int i = 0; i < nx; i++)
            {
                x[i] = point.X + (i + 1) * xstep - xstep / 2f;
            }
            for (int i = 0; i < ny; i++)
            {
                y[i] = point.Y - (i + 1) * ystep + ystep / 2f;
            }
            for (int i = 0; i < x.Length; i++)
            {
                float hx1 = x[i]; float hx2 = x[i];
                float hy1 = point.Y;
                Pen p = new Pen(Color.Purple, 1f);
                float hy2 = hy1 - 4f;
                dc.DrawLine(p, hx1, hy1, hx2, hy2);
            }
            for (int i = 0; i < y.Length; i++)
            {
                float hy1 = y[i]; float hy2 = y[i];
                float hx1 = point.X;
                Pen p = new Pen(Color.Purple, 1f);
                float hx2 = 0f;
                hx2 = hx1 + 4f;
                dc.DrawLine(p, hx1, hy1, hx2, hy2);

            }
            Pen pen = new Pen(Color.Purple, 1f);
            dc.DrawLine(pen, point.X, point.Y, point.X+width, point.Y);
            dc.DrawLine(pen, point.X, point.Y, point.X , point.Y-heigth);
        }

        public void DrawStrY(Graphics dc, float[] y, float x, float stepy, float[] txt)
        {
            Font font = new Font("Microsoft Sans Serif", 7F);

            StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical);
            float szs = stepy;
            for (int i = 0; i < y.Length; i++)
            {
                string s = Math.Round((double)txt[i], 3).ToString();
                PointF point = new PointF(x, y[i]);
                SizeF TextSize = dc.MeasureString(s, font, point, sf);
                if (TextSize.Height < szs)
                {
                    SolidBrush br = new SolidBrush(Color.Purple);
                    szs = stepy;
                    dc.DrawString(s, font, br, x - TextSize.Width - 4.5f, y[i] - TextSize.Height / 2, sf);

                    Pen p = new Pen(Color.Purple, 1f);

                    dc.DrawLine(p, x, y[i], x - 4.5f, y[i]);
                }
                else szs += stepy;
            }

        }
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 28.03.2011, 11:49   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Код:
        public void DrawStr(Graphics dc, float[] x, float y, float stepx, float[] txt)
        {
            Font font = new Font("Microsoft Sans Serif", 8F);

            StringFormat sf = new StringFormat();//(StringFormatFlags.DirectionVertical);
            float szs = stepx;
            for (int i = 0; i < x.Length; i++)
            {
                string s = Math.Round((double)txt[i], 3).ToString();
                PointF point = new PointF(x[i], y);
                SizeF TextSize = dc.MeasureString(s, font, point, sf);
                if (TextSize.Width < szs)
                {
                    SolidBrush br = new SolidBrush(Color.Purple);
                    szs = stepx;
                    dc.DrawString(s, font, br, x[i] - TextSize.Width / 2f, y + 4.5f, sf);

                    Pen p = new Pen(Color.Purple, 1f);

                    dc.DrawLine(p, x[i], y, x[i], y + 4.5f);
                }
                else szs += stepx;
            }
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Graphics dc = CreateGraphics();
            DrawAxis(dc, new PointF(400, 400), 30, 25, 300, 300);
        }
    }
После этого можно рисовать в координатах этих осей свои фигуры. Кинь цикл,используй Refresh() для вызова процедуры Paint() и все.Вот скрин того,что получается этим кодом.
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 28.03.2011 в 11:54.
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
График Waqq Мультимедиа в Delphi 1 26.03.2011 16:28
График Foxx Microsoft Office Excel 18 27.10.2010 17:30
график ddeman666 Помощь студентам 0 30.05.2010 17:43
График Droid Общие вопросы Delphi 6 25.05.2008 23:40