OberonCore https://forum.oberoncore.ru/ |
|
Построение графиков https://forum.oberoncore.ru/viewtopic.php?f=35&t=1064 |
Страница 1 из 3 |
Автор: | n0-0-b0dy [ Вторник, 01 Июль, 2008 23:39 ] |
Заголовок сообщения: | Построение графиков |
о_0 Что это значит о_0 Среди списка модулей я таких зверей не нашёл Короче мне надо построить график тригонометрической функции [ abs(sinx) ], а как это сделать в Blackbox я не имею понятия после многочасового чтения различных мануалов. Вроде надо использовать OpenBezier, но как передать значения функции DrawPath я опять не понимаю Короче я в отчаинии ухожу спать |
Автор: | Илья Ермаков [ Вторник, 01 Июль, 2008 23:58 ] |
Заголовок сообщения: | Re: Построение графиков |
Что ж Вы так мучаетесь Речь была о компонентах из коллекции: http://www.zinnamturm.eu/ |
Автор: | n0-0-b0dy [ Среда, 02 Июль, 2008 00:56 ] |
Заголовок сообщения: | Re: Построение графиков |
Поставил компанент lib, но разобраться не смог |
Автор: | Иван Кузьмицкий [ Среда, 02 Июль, 2008 01:06 ] |
Заголовок сообщения: | Re: Построение графиков |
Я как-то делал модуль Canvas для простого рисования на отображении, он в составе подсистемы Stern: download/file.php?id=178 Вот пример использования полилинии: Код: PROCEDURE SetPoint(VAR ap: ARRAY OF Ports.Point; x,y : INTEGER; n: INTEGER);
BEGIN ap[n].x := x; ap[n].y := y; END SetPoint; PROCEDURE Draw*; VAR p: ARRAY 10 OF Ports.Point; BEGIN SternCanvas.SetBgColor(100,100,1); (*подготовка массива точек*) SetPoint(p, 10,5, 0); SetPoint(p, 40,20, 1); SetPoint(p, 80,10, 2); SetPoint(p, 160,20, 3); SetPoint(p, 200,30, 4); SetPoint(p, 180,80, 5); SetPoint(p, 120,100, 6); SetPoint(p, 80,110, 7); SetPoint(p, 40,50, 8); SetPoint(p, 10,30, 9); SternCanvas.Path(p, 0, SternCanvas.red, SternCanvas.openBezier); SternCanvas.Path(p, 0, SternCanvas.blue, SternCanvas.openPoly); END Draw; |
Автор: | А.П. [ Среда, 02 Июль, 2008 05:26 ] |
Заголовок сообщения: | Re: Построение графиков |
Простой пример на сложение двух синусоид (два варианта). Используется модуль упрощенной графики Info21sysTPGraphics. Кривая y=f(x) строится микроотрезками прямой процедурой LineTo. Ширина рисунка - 300 точек. Код: MODULE СборGrm10;
IMPORT Gr := Info21sysTPGraphics, Math; PROCEDURE Окр( x: REAL): INTEGER; BEGIN RETURN SHORT( ENTIER( x + 0.5 ) ) END Окр; PROCEDURE Do*; VAR i, k, x, y: INTEGER; BEGIN Gr.Clear; Gr.SetColor( 0 ); Gr.SetBkColor( 15 ); Gr.MoveTo( 0, 70 ); FOR i := 0 TO 300 DO y := 70 - Окр( 15 * Math.Sin( i / 3 ) + 40 * Math.Sin( i / 30 ) ); x := i; Gr.LineTo( x, y ) END; Gr.MoveTo( 0, 180 ); FOR i := 0 TO 300 DO y := 180 - Окр( 10 * Math.Sin( i / 1.3 ) + 30 * Math.Sin( i / 16 ) ); x := i; Gr.LineTo( x, y ) END; Gr.String(80, 15, "Сложение синусоид"); Gr.Open END Do; END СборGrm10. (Q) СборGrm10.Do Здесь показано сложение синусоид с разными периодами и амплитудами. |
Автор: | n0-0-b0dy [ Среда, 02 Июль, 2008 11:14 ] |
Заголовок сообщения: | Re: Построение графиков |
Сделал с помошью подсистем Bubel, Util и Plot. Работает Всё слишком просто. Всем спасибо за код, мб поможет. |
Автор: | Dirtyfan [ Четверг, 03 Июль, 2008 12:00 ] |
Заголовок сообщения: | Re: Построение графиков |
вы не могли бы написать как построить график вида y=asinx подробно наскольно это возможно, я никак не могу разобраться в программе!за ранее спасибо! |
Автор: | alla nashotova [ Пятница, 04 Июль, 2008 14:28 ] |
Заголовок сообщения: | Re: Построение графиков |
Добрый день. Ознакомилась с различными документациями ,описаниями по Black BOX ,но практически построить график функции y=d*x^2+f не смогла . Вроде бы надо использовать подсистему Plot ,но как практически строить (из мануала не поняла).Огромная просьба помочь в написании кода этой задачи. Очень жаль ,что просидела бессоные ночи и в отчаянии потеряла надежду ,что смогу одолеть эту программу Заранее благодарна. |
Автор: | Иван Кузьмицкий [ Пятница, 04 Июль, 2008 15:32 ] | ||
Заголовок сообщения: | Re: Построение графиков | ||
Я с подсистемой Plot не знаком. Поэтому приведу пример, как построить график функции y=d*x^2+f с помощью подсистемы Canvas. 1. В новом модуле SternObx1 создал процедуру Draw* (см. ниже исходный текст модуля). 2. Открыл пустую форму и в меню выбрал Stern, Вставить холст. Отображение холста появилось на форме. 3. В свойстве link отображения указал SternObx1.Draw и нажал OK. Всё. Исходный текст модуля: Код: MODULE SternObx1; IMPORT SternCanvas; (* y=d*x^2+f *) (* начало координат располагается в левом верхнем углу *) CONST d = 1; f = 1; scale = 500; (* масштабный коэффициент для ординаты *) PROCEDURE Y (x: INTEGER) : INTEGER; BEGIN RETURN d*(x*x)+f END Y; PROCEDURE SetPoint(VAR ap: ARRAY OF SternCanvas.Point; x: INTEGER; n: INTEGER); BEGIN ap[n].x := x; ap[n].y := Y(x) DIV scale; END SetPoint; PROCEDURE Draw*; VAR p: ARRAY 10 OF SternCanvas.Point; BEGIN SternCanvas.SetBgColor(200,200,200); (*подготовка массива точек*) SetPoint(p, 20, 0); SetPoint(p, 40, 1); SetPoint(p, 60, 2); SetPoint(p, 80, 3); SetPoint(p, 100, 4); SetPoint(p, 120, 5); SetPoint(p, 140, 6); SetPoint(p, 160, 7); SetPoint(p, 180, 8); SetPoint(p, 200, 9); SternCanvas.Path(p, 0, SternCanvas.blue, SternCanvas.openPoly); END Draw; END SternObx1. P.S. Подсистема Canvas требует наличие подсистемы Abf. Привожу ссылки для скачивания. Подсистема Abf: http://store.oberoncore.ru/BlackBox/com ... 0070730.7z Подсистема Canvas: download/file.php?id=178
|
Автор: | alla nashotova [ Пятница, 04 Июль, 2008 17:13 ] |
Заголовок сообщения: | Re: Построение графиков |
Проверила , работает программа отлично ,помогли подсиситемы ABF и ваш модуль Canvas. Большое спасибо. |
Автор: | Илья Ермаков [ Пятница, 04 Июль, 2008 17:15 ] |
Заголовок сообщения: | Re: Построение графиков |
Уважаемые, а скажите, пожалуйста, откуда у стольких человек сразу такой одинаковый интерес к построению таких графиков? Учебные задания какие-то (но ведь лето)? |
Автор: | Dirtyfan [ Пятница, 04 Июль, 2008 17:28 ] |
Заголовок сообщения: | Re: Построение графиков |
да это практика , дали программу и сказали разбирайтесь,а через 2 недели принесите построенный график,вот и мучеемся! |
Автор: | Вячеслав Бойко [ Пятница, 04 Июль, 2008 17:37 ] |
Заголовок сообщения: | Re: Построение графиков |
На случай, если кому нужен пример с подсистемой Lib. Код: MODULE TestPlot; IMPORT LibPlotters, Ports, Log := StdLog; (* y = a*x^2 + b*x + c *) TYPE Plot = LibPlotters.Plotter; CONST SHIFT = 0.1; (*шаг смещения переменной X*) PROCEDURE DrawPlot (a, b, c, minX, maxX: INTEGER); VAR plot: Plot; minY, maxY, X, Y, shiftX, shiftY: REAL; n: INTEGER; BEGIN (*создаем новый график и открываем окно с ним*) plot := LibPlotters.dir.NewPlotter(''); LibPlotters.OpenAux(plot, 150, 100, TRUE, 'График функции y = a*x^2 + b*x + c '); (*вычисляем максимальное и минимальное значения шкалы Y*) IF a > 0 THEN minY := - b / (2 * a); maxY := a * maxX * maxX + b * maxX + c; ELSE maxY := - b / (2 * a); minY := a * maxX * maxX + b * maxX + c END; plot.Scale(minX - 1, maxX + 1, minY - 1, maxY + 1); (*определяем размеры ячейки сетки координат*) shiftX := ENTIER((maxX - minX) / 10); shiftY := ENTIER((maxY - minY) / 10); (*рисуем сетку координат*) plot.Grid(minX - shiftX, maxX + shiftX, shiftX, minY - shiftY, maxY + shiftY, shiftY, - 2, Ports.grey12, FALSE); (*рисуем шкалу X*) plot.Xaxis(minX, maxX, 1, 5, 2, 0, {}); (*рисуем шкалу Y*) plot.Yaxis(minY, maxY, 1, 5, 0, 0, TRUE, {}); (*добавляем точки на график и их координаты значения в StdLog*) X := minX; Y := a * X * X + b * X + c; Log.Clear; WHILE X <= maxX DO Log.Ln; Log.RealForm(X, 5, 2, 0, 8FX); Log.String(" "); Log.RealForm(Y, 5, 2, 0, 8FX); plot.Point(X, Y, 0, 0, 1, 0, 1, Ports.blue); X := X + SHIFT; Y := a * (X * X) + b * X + c END; (*обнавляем график*) plot.Update END DrawPlot; PROCEDURE Do*; BEGIN (*Нарисуем несколько графиков*) DrawPlot(1, 2, 0, - 14, 10); DrawPlot(-2, 3, 1, - 14, 10); DrawPlot(4, 5, 2, -5, 5); END Do; END TestPlot. TestPlot.Do Графики хорошо масштабируются при изменении размеров окна. Ссылка на подсистему Lib: http://www.zinnamturm.eu/downloadsIN.htm#Lib |
Автор: | Иван Кузьмицкий [ Пятница, 04 Июль, 2008 17:54 ] |
Заголовок сообщения: | Re: Построение графиков |
Что-то я модуль подсистемой назвал. Либо это что-то значит, либо одно из двух Кстати, о птичках. Я скопировал вышеприведённый пример "СборGrm10" в свой BlackBox, и компилятор не смог откомпилировать - русские буквы оказались каким-то "не такими". Проблема только с браузером Opera 9.50, а копирование из окна Internet Explorer'а прошло нормально. Загадка природы. |
Автор: | Борис Рюмшин [ Пятница, 04 Июль, 2008 22:50 ] |
Заголовок сообщения: | Re: Построение графиков |
Иван Кузьмицкий писал(а): Что-то я модуль подсистемой назвал. Либо это что-то значит, либо одно из двух Ветер дует повсеместно... Цитата: Кстати, о птичках. Я скопировал вышеприведённый пример "СборGrm10" в свой BlackBox, и компилятор не смог откомпилировать - русские буквы оказались каким-то "не такими". Проблема только с браузером Opera 9.50, а копирование из окна Internet Explorer'а прошло нормально. Загадка природы. Всё правильно. Там скопировалось... склероз, по-моему сразу в юникод, а компилятор не понимает идентификаторы в юникоде. P.S. Хе-хе... масштабирование предпросмотра картинок на форуме заработало... |
Автор: | А.П. [ Суббота, 05 Июль, 2008 06:20 ] |
Заголовок сообщения: | Re: Построение графиков |
Борис Рюмшин писал(а): Всё правильно. Там скопировалось... склероз, по-моему сразу в юникод, а компилятор не понимает идентификаторы в юникоде. Похоже, так в версии 1.5. А как с этим в 1.6, кто-нибудь знает?? В ней авторы заявили о якобы полной юникодизации ББ! |
Автор: | Иван Кузьмицкий [ Суббота, 05 Июль, 2008 07:43 ] |
Заголовок сообщения: | Re: Построение графиков |
Я пробовал копировать как в 1.5re026, так и в 1.6-rc5, с Оперой результат одинаковый. |
Автор: | Info21 [ Суббота, 05 Июль, 2008 10:15 ] |
Заголовок сообщения: | Re: Построение графиков |
Иван Кузьмицкий писал(а): Я пробовал копировать как в 1.5re026, так и в 1.6-rc5, с Оперой результат одинаковый. Подозреваю, что простенькая примочка, конвертирующая CHAR в SHORTCHAR или обратно в выделенном куске текста, просто и удобно решит проблему. Плюс, возможно, нечто, что поочередно выделяет фрагменты SHORTCHAR в открытом тексте -- подобно сравнению текстов по F9. |
Автор: | PGR [ Суббота, 05 Июль, 2008 11:47 ] |
Заголовок сообщения: | Re: Построение графиков |
Вячеслав Бойко писал(а): На случай, если кому нужен пример с подсистемой Lib. ... Для сравнения, как эта задача решается на Питоне Код: from numpy import *
from pylab import * x = arange(0, 10, 0.01) y = abs(sin(x)) plot(x, y) show() |
Автор: | Илья Ермаков [ Суббота, 05 Июль, 2008 12:43 ] |
Заголовок сообщения: | Re: Построение графиков |
(Если меряться кой-чем - то в GnuPlot-е ещё короче будет тока не в счёте строк щазтье.. особенно если вспомнить про сотни ошибок в Питоновском ядре, про что Губанов как-то рассказывал). |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |