[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.14143 Reply
File: 2903dc55da365d6ec...
Jpg, 615.56 KB, 890×755
edit Find source with google Find source with iqdb
2903dc55da365d6ec8a664c1d92c561a.jpg
File: 1313772915708.png
Png, 363.21 KB, 800×880
edit Find source with google Find source with iqdb
1313772915708.png
File: 7410626c62b670cc4...
Gif, 3614.84 KB, 500×300
edit Find source with google Find source with iqdb
7410626c62b670cc41e84155dbb5d61c.gif

Периодически буду постить сюда свои вопросы.

Собственно, начался курс ПММ (программирование, мат. моделирование), поэтому требуется описывать математические модели физических процессов и визуализировать их эволюцию. Раньше использовал связку -> посчитали уравнение для t=5 (например), сохранили на диск, с диска открываем через какой-нибудь Advanced Grapher (GnuPlot), пилим график с требуемыми осями/цветом линий/подписями/etc, конец.

Сейчас требуется обойти связку -> вывод в файл, обработка данных в другой программе. Визуализация должна происходить в самой программе, с возможностью анимации процесса.

Поэтому требуется помощь в написании класса, который бы мог выводить на форму (на Panel) график функции (пока только двумерный) по точкам (из массива).
Так же планируется, по ходу прогресса, добавить:

1. Отрисовка координатной сетки. Причём эта сетка должна быть подписана (то бишь указать масштаб между её узлами).
2. При наведении мышкой на область графика указываются (где-нибудь на форме) координаты точки (x;y).
3. Анимация (двойная буфферизация вроде здесь есть, но пока не разбирался: http://kbyte.ru/ru/Programming/Sources.aspx?id=861&mode=show).
4. Возможность изменить стиль отрисовываемых линий/цвета/etc. Ну это легко, я думаю. Через методы класса какие-нибудь.

А может, анон знает годную библиотеку, умеющую в вышенаписанное?

Алсо, пока слабо понимаю все эти премудрости практически нового для меня языка (да здравствуют консольные приложения, только ХАРДКОР, только НАСТОЙЧИВОСТЬ!), хотелось бы внятно почитать по теме. Реквестирую список литературы.

Из языков более-менее знаю: C/C++ (примерно представляю, как устроено ООП, но использовал его лишь однажды, и то — только для того, чтобы объеденить данные и методы в одном объекте), на Perl написал 1.5 скрипта, Fortran (курсач).

Список написал, чтобы ориентироваться, какую лучше мне литературу почитать, ведь тонны её.

За сим кланяюсь и выражаю благодарность изображениями анимационно-привлекательного характера.
>> No.14233 Reply
File: 928v7.png
Png, 264.17 KB, 835×897 - Click the image to expand
edit Find source with google Find source with iqdb
928v7.png
>>14143

Ответ на вопрос про построение графиков нашёл: ZedGraph (здесь нашёл просто одобрительный пример, который покрыл все мои потребности на текущий момент: http://www.smallguru.com/2009/01/zedgraph-csharp-graph-plot-example-application/)

Однако остаётся еще вопрос, будет ли это дело нормально работать с большими массивами данных и сможет ли оно в анимацию (не сильно быструю, может, 3-5 fps).
>> No.14291 Reply
>>14143
Но ведь такую программу нетрудно и вручную написать.
1)С масштабом не проблема. Рисуешь сначала с неким единичным масштабом, добавляешь кнопки + и - (на случай, если у тебя там какая-нибудь синусоида на графике с частотой в пару тысяч герц - тогда масштаб можно будет изменить).
Причем желательно масштаб для x и y сделать отдельно, ну ты понял (та же синусоида, нормальная частота, а вот амплитуда - гигантская).
В зависимости от масштаба Х снимаешь данные с формулы в какой-нибудь массив.
Отрисовываешь ломаную линию из этих точек. Расположение по оси y с учетом масштаба Y.
2)Наведение мышкой и координаты. Вроде есть событие Mouse_Move или как-то так. В событии передаются координаты курсора мыши. И узнаешь, координаты мыши от точки 0,0 (чуть-чуть простой математики, у тебя же эта точка будет или в центре, или слева внизу), и пересчитываешь эти координаты с учетом масштаба. Ну и выводишь их, куда тебе охота.
3)Анимация. Что именно тебе от нее нужно?
4)Смотри момент с отрисовкой графика. Когда будешь писать отрисовку графика, учти цвет и стиль, который задал пользователь (ты же ломаную рисуешь, пунктирная линия - рисование через одну (лучше 2 через 2, линии то будут очень маленькие).
>> No.14292 Reply
>>14291
Черт побери, я это все написал и захотел сам такую программу сделать.
>> No.14294 Reply
>>14291
Тогда лучше сразу рисовать на OpenGL. Всякие масштабирования, смещения и прочее искаропки; пунктирные линии и даже антиалиасинг он тоже умеет. Есть даже selecting API, может, тоже подойдет.
Хотя,
> студентота
, слишком сложно, может не потянуть.
>> No.14305 Reply
>>14294
Я студент и не сказал бы, что для меня было сложно в OpenGL. Есть Tao Framework, пусть качает и устанавливает. Вот годные материалы:
http://esate.ru/page/uroki-OpenGL-c-sharp
Я на пейнте самодельном застопорился. Не хотет рисовать моя программа и все тут, а разобраться в чем дело - лень. Да и исходники потерял наверняка. Но там вроде даже делают программу, которая рисует график. То, что доктор прописал.
Автор простыни текста выше.
>> No.14307 Reply
>>14305
OpenGL для отрисовки графика двумерной функции? Как из пушки по воробьям.
>> No.14318 Reply
>>14307
Ну, для современных ПКдля учебы 2 ядра 2 гига нагрузка не будет сильной, а некоторым действительно проще использовать готовую библиотеку, чем пытаться создать свою. Хотя ты прав, OpenGL тут явно не обязателен.
>> No.14379 Reply
File: Form1.cs
Cs, 0.01 KB, 0 lines
view edit
Form1.cs
File: TData.cs
Cs, 0.00 KB, 0 lines
view edit
TData.cs
File: Konachan.com - 97...
Jpg, 311.43 KB, 1500×844
edit Find source with google Find source with iqdb
Konachan.com - 97503 sample.jpg

Возник вопрос, каким образом возможно сделать 2 различных потока: один обсчитывает постепенно уравнение, второй отрисовывает график на основе данных, лежащих в общем доступе. Немного набросал код для потока с "графикой", но пока он не хочет работать как надо, вылетает с exception. Очевидно, проблема в функции SetSize();


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]