Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как построить график функции tg(X)??? 
:(
    Опции темы
RammeN
  Дата 19.12.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.12.2007
Где: Пятигорск

Репутация: нет
Всего: нет



Пожалуйста, расскажите как построить график функции y=tg(X), буду очень благодарен! Надо курсовую доделать, а как сделать тангенс - ума не хватает!  smile 
PM MAIL   Вверх
mr.DUDA
Дата 19.12.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Создаём проект Windows Application, кидаем на форму Panel, подписываемся на событие панели Paint. Пишем код:

Код
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            float W = panel1.Width, H = panel1.Height;
            float halfW = W / 2, halfH = H / 2;

            // оси координат
            e.Graphics.DrawLine(Pens.Black, halfW, 0, halfW, H);
            e.Graphics.DrawLine(Pens.Black, 0, halfH, W, halfH);

            // координаты предыдущей точки
            int ixPrev = -1, iyPrev = (int)halfH;

            // тангенс на интервале x=[-Pi..Pi]
            // проходим по всем точкам на форме, вычисляем x и y=tg(x)
            for (int ix = 0; ix < W; ix++)
            {
                // переводим x в диапазон -1..1
                float x = (ix - halfW) / halfW;

                // переводим x в -pi..pi
                x *= (float)Math.PI;
                
                // получаем tg(x)
                float y = (float)Math.Tan(x);

                // переводим y из -1..1 в пикселы на форме
                int iy = (int)(halfH - y * halfH);

                // вуаля
                e.Graphics.DrawLine(Pens.Red, ixPrev, iyPrev, ix, iy);

                ixPrev = ix;
                iyPrev = iy;
            }
        }
    }
}


Можно также заменить Tan на Sin или Cos и посмотреть что получится smile

Присоединённый файл ( Кол-во скачиваний: 366 )
Присоединённый файл  WindowsApplication1.zip 12,15 Kb


--------------------
user posted image
PM MAIL WWW   Вверх
farad
Дата 19.12.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 1.11.2007

Репутация: 1
Всего: 6



mr.DUDA, безусловно прокатит  smile, но для сложных функций лучше делать по уму, всю байду не вычислять в процессе рисования, а расчитать заранее, засунуть в массив и рисовать уже по даным массива, лишь вводить поправки на координаты..
PM MAIL   Вверх
Real
Дата 19.12.2007, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 507
Регистрация: 9.11.2007

Репутация: 0
Всего: -1



Цитата(farad @ 19.12.2007,  20:58)
mr.DUDA, безусловно прокатит  smile, но для сложных функций лучше делать по уму, всю байду не вычислять в процессе рисования, а расчитать заранее, засунуть в массив и рисовать уже по даным массива, лишь вводить поправки на координаты..

Например как?
Глупый вопрос,но скажы?
Напримере покажы, если не сложно?

Это сообщение отредактировал(а) Real - 19.12.2007, 23:40
PM   Вверх
RammeN
Дата 20.12.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.12.2007
Где: Пятигорск

Репутация: нет
Всего: нет



mr.DUDA, низкий вам поклон!!! Большое спасибо! smile  smile  smile  
PM MAIL   Вверх
Solotoy29
Дата 8.1.2010, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



привет всем, подскажите пожалуста как нарисовать график двух переменных, например вот этой функции:
(-2 * Math.Pow(_x2, 3) + 6 * Math.Pow(_x2, 2) + 6 * _x2 + 10) * Math.Sin(Math.Log(_x1, Math.E)*Math.Pow(Math.E,_x2))

или посоветуйте где можно найти примеры такиг графиков...
PM MAIL   Вверх
Экскалупатор
Дата 8.1.2010, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(Solotoy29 @  8.1.2010,  00:25 Найти цитируемый пост)
привет всем, подскажите пожалуста как нарисовать график двух переменных, например вот этой функции:
(-2 * Math.Pow(_x2, 3) + 6 * Math.Pow(_x2, 2) + 6 * _x2 + 10) * Math.Sin(Math.Log(_x1, Math.E)*Math.Pow(Math.E,_x2))

что значит график двух переменных? я так понимаю что график это зависимость чего то от чего то. например зависимость y от x. что у тебя от чего зависит? чему все это выражение равняется? если 0 то вырази одну из переменных, а потом просто считай для разных значений.
PM MAIL ICQ   Вверх
Heinzz
Дата 8.1.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Цитата(Экскалупатор @  8.1.2010,  01:58 Найти цитируемый пост)
что значит график двух переменных?

вероятно это поверхность или группа поверхностей


--------------------
user posted image
PM MAIL   Вверх
Heinzz
Дата 8.1.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



для плоской графики можно использовать ZedGraph


--------------------
user posted image
PM MAIL   Вверх
Solotoy29
Дата 13.1.2010, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



График мне нужен по теме генетических алгоритмов, оси координат принимают значение поколений и функцыи, какуя я выше приводил, а самая функцыя имеет две переменные (х1 и х2), пользуюсь компонентом ZedGraph но ничего путнего не выходит...
PM MAIL   Вверх
GavriKos
Дата 17.1.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 8.8.2007
Где: Донецк, Украина

Репутация: нет
Всего: 1



Если у тебя две оси координат, то у тебя все выражение равно 0, тогда можно одну перменую выразить через другую.

И, по моему, т ы сген.алгоритмами что то напутал.
--------------------
Донецкая группа IT - присоединяемся
PM MAIL ICQ   Вверх
Gein
Дата 6.12.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.12.2010

Репутация: нет
Всего: нет



Здравствуйте!
mr.DUDA, В Вашем коде у меня при построении график тангенса пишет " ошибка переполнения", Вы не могли бы сказать, как её можно исправить? И желательно, чтобы тангенс рисовался без этих вертикальных линий, потому что в этих точках он не существует :(
Заранее спасибо всем откликнувшимся!

Это сообщение отредактировал(а) Gein - 7.12.2010, 16:16
PM MAIL   Вверх
Enter
Дата 13.12.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 13.2.2007

Репутация: нет
Всего: 2



Цитата

график тангенса пишет "ошибка переполнения"

скорее всего значение выходит слишком большое для Int32. я бы сначала сделал проверку функции на существование 
и вставил ловлю ошибок 
Код
try
{
if (!double.IsNaN(fnn)&& !double.IsInfinity(fnn)){}
}
catch (Exception ex)
{
}

чтобы тангенс рисовался без вертикальтных линий, надо тока точки рисовать. при соединении точек линиями график портится.
у меня вроде было простенькое приложение с тангенсом и не только.
тут
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0861 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.