Графика в Паскале (РЕШЕНО)

Модератор: Модераторы разделов

Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Графика в Паскале

Сообщение Jasha »

Здарова! Мну решил темку создать в помощь учителям информатики, в частности тем, которые хотят перегнать компы на Линукс. Раньше часто встречался вопрос (да и сам его задавал) о том, как заставить работать модуль Graph. Ценяйте моё решение.

ИМХО. Самая лучшая IDE для школы - Geany. Для изучения основ программирования его возможностей с головой хватит.
Лезем в настройки: Edit -> Preferences -> Tools. Напротив terminal пишем sudo /usr/bin/xterm. Теперь редактируем /etc/sudoers, добавляем такие строки:

<имя_пользователя> ALL = (root) /usr/bin/xterm
<имя_пользователя> ALL = NOPASSWD: /usr/bin/xterm
Фсё. Теперь будет работать.

з.Ы. Будут предложения по улучшению безопасности этого метода - постите сюда.
з.з.Ы. Того, кто будет разводить флейм по поводу актуальности Паскаля, зарежу, измельчу и выкину в помойную яму :angry:
Спасибо сказали:
mikluxo
Сообщения: 283
ОС: Slackware 12.2

Re: Графика в Паскале

Сообщение mikluxo »

Что-то я никак не пойму, и где решение, как использовать Graph библиотеку? Можете поподробнее изложить? Компилятор fpc как я понял?
Ich weiss, dass ich nichts weiss, aber wissen Sie es auch?
Завистники на что не взглянут,
подымут вечно лай,
А ты себе своей дорогою ступай,
Полают, да отстанут. Крылов
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

интересное решение, но как это позволяет работать svgalib с иксами?
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

Да fpc. Решение в том, что теперь можно графику сделать "как бы без рута". Вообщем удобно.
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Jasha писал(а):
05.01.2009 15:17
Да fpc. Решение в том, что теперь можно графику сделать "как бы без рута". Вообщем удобно.

можно скриншот увидеть? сдаётся мне этот способ предназначен для обмана неискушённых учителей.

Тем более с современными видяхами svgalib вообще работает хреново.
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

Скриншот чего? Исходник в студию!
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Jasha писал(а):
05.01.2009 15:35
Скриншот чего? Исходник в студию!

вы как свой "метод" проверяете?!
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

program main;
uses Graph;
var driver,mode:integer;

begin
driver:=detect;
initgraph (driver, mode,'');
if graphresult <>0
then
halt
end.


xterm: [svgalib: allocated virtual console #8]


------------------
(program exited with code: 0)
Press return to continue
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

Re: Графика в Паскале

Сообщение sarutobi »

Уважаемый, а вы сами то поняли, что насоветовали? подумайте на досуге насчет команды sudo /usr/bin/xterm, выполненной обычным пользователем из того же xterm и подумайте - насколько сильно вы понизили безопасность системы "легким движением руки"?
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Jasha писал(а):
05.01.2009 16:08
xterm: [svgalib: allocated virtual console #8]


------------------
(program exited with code: 0)
Press return to continue

более комплексная проверка...

Код:

Program Space; {составил студент Тетуев Р., мат.фак. КБГУ} Uses Graph, Crt; Const RadOrb = 250 {радиус орбиты Земли}; RadSun = 70 {радиус Солнца}; RadGal = 100 {радиус галактики }; RadZem = 18 {радиус Земли }; Naklon = 0.2 {коэффициент наклона плоскости орбиты Земли}; PressZem = 0.65 {коэффициент сплющенности полюсов Земли}; Compress = 0.8 {коэффициент сжатия при переходе из }; {расширения режима VGA в режим CGA } Var ZemX, ZemY, UgMer, PixelY, DUgZem , UpDown, XRad, Grad, UgZem, PixelX, StAngle, Ua, Ub, ParallelY , Color, ZemPix, EndAngle, VisualPage, GrMode, GrError, GrDriver, i : Integer; Ugol, CompressZem, Expansion, DUgol, Projection, PolUgol : Real; BEGIN {установка графического режима и проверка возможных ошибок} GrDriver := vga; GrMode := vgaHi; InitGraph(GrDriver, GrMode, ''); GrError := GraphResult; If GrError<>GrOk then Halt; SetBkColor(Black); SetFillStyle(1, Yellow); {установка стиля заполнения и цвета Cолнцa} Ugol := 0; DUgol := 2*Pi/180; {орбитальное угловое смещение Земли} UgZem := 0; DUgZem := 14; {осевое угловое смещение Земли} {------------------------------------------------------------------} VisualPage := 1; Repeat {цикл прерывается нажатием любой клавиши} SetVisualPage(1- (VisualPage mod 2)); {установка номера видимой видеостраницы} VisualPage := VisualPage+1; {листание видеостраниц} SetActivePage(1 - (VisualPage mod 2)); {установка номера невидимой (активной) видеостраницы,} {используемой для построения смещенного изображения } ClearDevice; {очистка графического экрана} {--------------------------------------------------------------} {Рисование "расходящейся" галактики} RandSeed:=1; {исходное значение датчика случайных чисел} Expansion:=VisualPage/100; {cкорость расширения галактики} For i:= 1 to VisualPage do begin XRad := Trunc(Expansion*RadGal*Random); {текущее расстояние от звезды до центра галактики} PolUgol:= 2*Pi*Random-VisualPage/30; {текущий центральный угол положения звезды галактики} PixelX := 370+Trunc(XRad*cos(PolUgol+1.8)); {координаты} PixelY := 250+Trunc(XRad*0.5*sin(PolUgol)); { звезды } PutPixel(PixelX, PixelY, White) {рисование звезды} end; {--------------------------------------------------------------} {Рисование мерцающих звезд} Randomize; {инициализация датчика случайных чисел} For i:=1 to 70 do PutPixel(Random(640),Random (350),White); {вспыхивающие звезды} {--------------------------------------------------------------} For i := 1 to 100 do {Рисование орбиты} PutPixel(320+Round(RadOrb * cos((i+VisualPage/5)*Pi/50+0.3)), 160+Round(RadOrb*Naklon*sin((i+VisualPage/5)*Pi/50-Pi/2)),15); {--------------------------------------------------------------} PieSlice(310, 160, 0, 360, RadSun); {Рисование Солнца} {--------------------------------------------------------------} {Рисование Земли (ее параллелей и меридианов)} Ugol := Ugol+DUgol ; {угол поворота Земли относительно Солнца} Grad := Round(180*Ugol/Pi) mod 360; {в рад.(Ugol) и в град.(Grad)} ZemX := 320+Round(RadOrb*cos((Ugol+Pi/2+0.3))); { координаты } ZemY:=160+Round(RadOrb*Naklon*sin(Ugol)); {центра Земли} CompressZem := 2.5-cos(Ugol+0.3); {коэффициент учета удаленности Земли от наблюдателя} ZemPix := Round(RadZem*CompressZem); {текущий радиус Земли} UgZem := UgZem+DUgZem; {угол поворота Земли относительно своей оси} For i := 0 to 11 do { рисование меридианов } begin UgMer := (UgZem+i*30) mod 360; If (90<UgMer) and (UgMer<270) {установка начального и конечного} then begin StAngle := 90; EndAngle := 270 end { углов дуги } else begin StAngle := 270; EndAngle := 90 end; {эллипса меридиана} Ua := (Grad+220) mod 360; Ub := (Grad+400) mod 360; {установка цветов рисования затененной и освещенной частей меридиана} Color := LightBlue; If Ua<=Ub then if (Ua<UgMer) and (UgMer<Ub) then Color := White; If Ua >Ub then if (Ua<UgMer) or (UgMer<Ub) then Color := White; SetColor(Color); XRad := round((ZemPix*cos(UgMer*Pi/180))); Ellipse(ZemX,ZemY,StAngle,EndAngle,abs(XRad),round(PressZem*ZemPix)); end; For i := 2 to 7 do {рисование параллелей} begin XRad := abs(Round(ZemPix*sin(i*Pi/9))); {большая полуось эллипса параллели} UpDown := Round(ZemPix*PressZem*cos(i*Pi/9)); {высота параллели над плоскостью экватора} ParallelY := ZemY+UpDown; {координата Y центра эллипса параллели} SetColor(LightBlue); Ellipse(ZemX, ParallelY, 0, 360, XRad, Round(Naklon*XRad)); {затененная часть параллели} SetColor(White); Ellipse(ZemX,ParallelY,Grad+220,Grad+400,XRad,Round(Naklon*XRad)); {освещенная часть параллели} end; {------------------------------------------------------------------} {Повторное рисование Cолнца, если оно ближе к наблюдателю, чем Земля} If CompressZem<2 then PieSlice(310, 160, 0, 360, RadSun); {------------------------------------------------------------------} RandSeed := VisualPage mod 12; For i := 1 to 250 do {Рисование протуберанцев} begin Projection := (1-sqr(Random))*Pi/2; XRad := RadSun+Round((20)*sin(Projection))-15; PolUgol := 2 * Pi * Random+VisualPage/20; {PolUgol, XRad - полярные координаты протуберанца} PixelX := 310 + Round( XRad * cos(PolUgol)); PixelY := 160 + Round( Compress * XRad * sin(PolUgol)); PutPixel(PixelX, PixelY, LightRed) end; until KeyPressed END.
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

sarutobi, да, я знаю, что безопасность понизилась. Советую почитать з.Ы. в первом посте
yaleks, извини, не знаю, как скриншот делать.
Фопщем_там_планета_голубая_крутиццо.
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Jasha писал(а):
06.01.2009 20:57
sarutobi, да, я знаю, что безопасность понизилась. Советую почитать з.Ы. в первом посте

она не понизилась, её просто нет. Это аналогично тому, что просто работать под рутом.
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

Цитата(Jasha @ Jan 6 2009, в 20:57)
sarutobi, да, я знаю, что безопасность понизилась. Советую почитать з.Ы. в первом посте

она не понизилась, её просто нет. Это аналогично тому, что просто работать под рутом.

не работать. просто свежескомпиленая программа сможет делать ВСЁ.
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Эту проблему следует решать установкой FreePascal в DosBOX. Или доделать модуль Graph через SDL.

Давать права root не нужно. Модераторам предлагаю удалить первое сообщение темы, а то кто-нибудь поверит и сделает.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Графика в Паскале

Сообщение RasenHerz »

кривой костыль какой-то.
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Графика в Паскале

Сообщение Ali1 »

может ggigraph ?
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

Чё за ggigraph?
yaleks, Ты фанат dosbox' a?
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Нет, просто в данном случае это единственное работающее решение проблемы. Svgalib не работает без прав root, потому применять её в школах нельзя.
Спасибо сказали:
Аватара пользователя
akdengi
Сообщения: 4244

Re: Графика в Паскале

Сообщение akdengi »

Ali1 писал(а):
08.01.2009 11:07
может ggigraph ?


Можно еще и sdlgraph - но там цветов нету :( Так что кто знает плиз краткий мануал по ggigraph :) Или может sdlgraph допилим?
Меня тут снова нет :P
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

yaleks, а ведь

Код: Выделить всё

driver := detect;
initgraph(driver, mode, '');

лучше работает.
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Графика в Паскале

Сообщение Ali1 »

akdengi писал(а):
09.01.2009 13:49
Ali1 писал(а):
08.01.2009 11:07
может ggigraph ?


Можно еще и sdlgraph - но там цветов нету :(

В каком смысле?
http://userpage.fu-berlin.de/~molski/fpsdl...kap3/demo03.pas

Код: Выделить всё

...
Uses SDL, crt;
....

(akdengi) писал(а):Так что кто знает плиз краткий мануал по ggigraph :)

Пока совсем краткий. :)
Поставить libggi и libgii
(akdengi) писал(а):Или может sdlgraph допилим?

Можно подробней.
ИМХО SDL интересней, конечно. Но все это слабо совместимо с томами описаний и примеров из Graph .
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Ali1 писал(а):
09.01.2009 20:32
(akdengi) писал(а):Так что кто знает плиз краткий мануал по ggigraph :)

Пока совсем краткий. :)
Поставить libggi и libgii
(akdengi) писал(а):Или может sdlgraph допилим?

Можно подробней.
ИМХО SDL интересней, конечно. Но все это слабо совместимо с томами описаний и примеров из Graph .

не, там ка раз идея сделать совместимым со старым Graph.
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

Вот что нашлось: ТЫЦ

Вот только я там мало понял.
1)Пакетов svgalib-devel, kernel-modules-svgalib_helper-std-smp у меня на 3 DVD Debian' a нету. Где их скачать? (дайте прямые ссылки, а то у меня диал-ап, репозитарий подключать ОЧЧЕНЬ долго). Или может эти пакеты иначе называются?
2)cd /etc/rc.d/rc.local
bash: cd: /etc/rc.d/rc.local: No such file or directory
У меня в папке /etc есть rc.conf, rc0.d, rc1.d ...... rc6.d
3)/dev/svga тоже нету

Помогите разобраться!
Спасибо сказали:
Flaming
Сообщения: 2579

Re: Графика в Паскале

Сообщение Flaming »

Мы в школе без всякого graph обходились...
Читал в одном номере линуксформата, что для школьников вообще лучше бы питон первым языком делать - паскаль морально устарел... Извиняюсь, что не в тему.
А если уж нужен паскаль, то зачем graph? Для графики что-нить более продвинутое лучше, иксовое даже, а не какой-то там svgalib.

Ali1 писал(а):
09.01.2009 20:32
ИМХО SDL интересней, конечно. Но все это слабо совместимо с томами описаний и примеров из Graph .

Ну просто школьную программу нужно в корне менять, и информатику в том же числе.
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Графика в Паскале

Сообщение yaleks »

Flaming писал(а):
15.01.2009 16:05
А если уж нужен паскаль, то зачем graph? Для графики что-нить более продвинутое лучше, иксовое даже, а не какой-то там svgalib.

Про svgalib школьники не знают, просто в линуксе полный аналог борландовского graph её использует для отрисовки.
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

Помочь с ТЫЦем мне никто не хочет?
Ну и ладно.
Спасибо.
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Графика в Паскале

Сообщение Ali1 »

Jasha писал(а):
15.01.2009 23:36
Помочь с ТЫЦем мне никто не хочет?
Ну и ладно.
Спасибо.

Я не знаю как в Вашем debian`е называются пакеты.
Попробуйте поискать по маске *svga* . Скорее всего будет :
svgalib-bin
libsvga1
libsvga1-dev
Файл rc.local в /etc найдите пожалуйста сами.
Спасибо сказали:
Nymin
Сообщения: 1095
Статус: -
ОС: GNU/Linux

Re: Графика в Паскале

Сообщение Nymin »

омг, в школах еще учат Паскалю
Спасибо сказали:
Аватара пользователя
Jasha
Сообщения: 492
Статус: ##LinuxUser##
ОС: Debian

Re: Графика в Паскале

Сообщение Jasha »

Ali1, libsvga1-dev установлен, а насчет второго пакета?
/dev/svga нету по прежнему.
Спасибо сказали:
Аватара пользователя
Ali1
Сообщения: 2250

Re: Графика в Паскале

Сообщение Ali1 »

Jasha писал(а):
16.01.2009 11:44
Ali1, libsvga1-dev установлен, а насчет второго пакета?
/dev/svga нету по прежнему.

И не будет.
Чтобы он появился нужно собрать модуль ядра и загрузить его. Но я думаю, с ядрами новее 2.6.18 он не соберётся без напильника.
Впрочем, здесь можно найти тестовую версию библиотеки содержащую модуль.
Патчи в Сизифе.
Замечу, не все видео-карты поддерживаются, работает только в консоли (без Х), можно запускать от пользователя.
Стандартная библиотека позволяет запустить приложение в xterm, но от рута.
Спасибо сказали: