Конспект по теме: "Графика в Турбо Паскале"





Скачать 270.53 Kb.
НазваниеКонспект по теме: "Графика в Турбо Паскале"
страница7/7
Дата публикации14.09.2013
Размер270.53 Kb.
ТипКонспект
100-bal.ru > Астрономия > Конспект
1   2   3   4   5   6   7

Циклы в графике. Построение случайных процессов


Для того, чтобы картинки не были монотонными и регулярными, можно задавать фигурам случайные размеры, цвет, координаты. Для этого имеется специальная функция Random. Она генерирует случайные числа из [0, 1). Для расширения первоначального промежутка используется функция Random(I: word), которая выдает число из диапазона 0… I. На самом деле эти функции генерируют некоторую последовательность псевдослучайных чисел, и чтобы добиться иллюзии полной «случайности» используют команду Randomize, которая изменяет базу датчика случайных чисел.

Пример. Нарисовать в случайном месте экрана точку случайного цвета

Фрагмент программы:

Randomize

x:=random(640); y:=Random(480); c:=Random(15);

PutPixel(x, y, c);

 

Пример. Нарисовать 5000 точек случайного цвета в случайном месте.

            Фрагмент программы:

For i:=1 to 5000 do

begin

x:=Random(640); y:=Random(480); c:=Random(15);

PutPixel(x, y, c);

end;

Создание иллюзии движения


Создать видимость движения изображения на экране можно несколькими способами. Рассмотрим два из них.

            I способ. Имитация движения объекта на экране за счет многократного выполнения программой набора действий: нарисовать – пауза – стереть (нарисовать в том же месте цветом фона) – изменить координаты положения рисунка.

            Перед началом составления программы надо продумать описание «двигающегося» объекта, характер изменения координат, определяющих текущее положение объекта, диапазон изменения и шаг.
Пример 1. Программа, которая рисует модель атома.

program Model_At;

uses Crt, Graph;

const Ra=100;{радиус атома}

Rc=10; {радиус ядра}

Re=4; {радиус электрона}

k=0.5; {коэффициент сжатия орбит электронов}

Dr=30; {параметр изменения координат электрона}

Step1=0.2; {шаг изменения положения электрона}

Step=100; {время задержки – скорость движения электронов}

var cx, cy, y, y1, y2, x, x1, x2, x3, y3:integer;

I, I1, I2, I3: real; gd, gm: integer;

begin

clrscr;

gd:=detect; initgraph(gd, gm, ‘путь к драйверу’);

SetTextStyle(0, 0, 2); OutTextXY(200, 30, ‘Модель атома’);

cx:= GetMaxX div 2; {определить центр экрана- положение ядра}

cy:= GetMaxY div 2;

PieSlice(cx, cy, 0, 360, Rc);{нарисовать ядро атома}

SetColor(Red); SetLineStyle(0, 0, 3);

Line(cx-7, cy, cx+7, cy); Line(cx, cy-5, cx, cy+5);

SetLineStyle(0,0,1); SetFillStyle(1, 1);

I:=Pi/4; {задать начальное положение 4 электронов}

I1:= - Pi/4; I2:= - Pi/2; I3:= Pi/2;

SetTextStyle(0, 0, 1);SetColor(jellow);

OutTextXY(180, 420,’Для отмены нажмите любую клавишу’);

While not KeyPressed do {повторять, пока не нажата любая клавиша }

begin

{ определить координаты электронов}

x:=Round (Ra*cos(I)) +cx; Y:= Round (k+Ra*sin(I)) +cy;

x1:= Round((Ra+Dr)*cos(I1)) +cx; y1:= Round (k*(Ra+Dr)*sin(I1)) +cy;

x2:= Round((Ra-Dr)*cos(I2)) +cx; y2:= Round (k*(Ra-Dr)*sin(I2)) +cy;

x3:= Round((Ra-Dr)*cos(I3)*2.3) +cx; y3:= Round (k*(Ra-Dr)*sin(I3)*2.3) +cy;

{установить синий цвет и нарисовать электроны}

SetColor(1);

Circle (x, y, Re); PutPixel(x, y, 2);

Circle (x1, y1, Re); PutPixel(x1, y1, 2);

Circle (x2, y2, Re); PutPixel(x2, y2, 2);

Circle (x3, y3, Re); PutPixel(x3, y3, 2);

Delay(Step);

{нарисовать электроны цветом фона}

SetColor(0);

Circle (x, y, Re); PutPixel(x, y, 2);

Circle (x1, y1, Re); PutPixel(x1, y1, 2);

Circle (x2, y2, Re); PutPixel(x2, y2, 2);

Circle (x3, y3, Re); PutPixel(x3, y3, 2);

{задать изменение положения электронов}

I:=I + Step1; I1:=I1 – Step1; I2:=I2 + Step1; I3:=I3 + Step1;

end; {конец цикла}

CloseGraph;

end. 
II способ. Иллюзия движения создается при помощи специальных процедур и функций.

            Функция ImageSize(x1, y1, x2, y2: integer):word возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения, где x1,y1 – координаты левого верхнего и x2, y2 – правого нижнего углов фрагмента изображения.

            Процедура GetImage(x1, y1, x2, y2:integer, var Buf) помещает в память копию прямоугольного фрагмента изображения, где x1, ..,y2 – координаты углов фрагмента изображения, Buf – специальная переменная, куда будет помещена копия видеопамяти с фрагментом изображения. Buf должна быть не меньше значения, возвращаемого функцией ImageSize с теми же координатами.

            Процедура PutImage(x1, y1, x2, y2:integer, var Buf, Mode:word) выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. X, Y – координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения; Buf –специальная переменная, откуда берется изображение, Mode – способ копирования. Координаты правого нижнего угла не указываются, так как они полностью определяются размерами выводимой на экран копии изображения. Координаты левого верхнего угла могут быть любыми, лишь бы только копия уместилась в пределах экрана (если копия не размещается на экране, то она не выводится, и экран остается без изменений). Параметр Mode определяет способ взаимодействия размещаемой с уже имеющимся на экране изображением (табл. 7) .


Константа

Значение

Операция

Пояснения

NormalPut

0

Замена существующего на копию

Стирает часть экрана и на это место помещает копию

XorPut

1

Исключительное или

Рисует сохраненный образ или стирает ранее нарисованный, сохраняя фон

OrPut

2

Объединительное или

Накладывает сохраненный образ на существующий

AndPut

3

Логическое и

Объединяет сохраненный образ и уже существующий на экране

NotPut

4

Инверсия изображения

То же самое, что и 0, только копия выводится в инверсном виде


Пример 2. Программа, которая рисует звездное небо и перемещает на его фоне рисунок НЛО. program NLO;

uses crt, graph;

const k=20; Pause=50;

var

gd, gm, xmin, xm, ymin, ym, x, y, tx, ty, rx, ry, size, i, dx, dy, width, height: integer;

sauser:Pointer;

begin

Randomize;

gd:= detect; initgraph(gd, gm, ‘путь к драйверу’);

SetTextStyle(0, 0, 2); OutTextXY(50, 10, ‘Демонстрация движения НЛО’);

{Рисуем НЛО}

x:=R*5; y:=R*2; xm:=GetmaxX- 5; ym:=GetmaxY-25;

Ellipse(x, y, 0, 360, R, R div 3+2);

Ellipse(x, y-4, 190, 357, R, R div 3);

Line(x + 7, y - 6, x + 10, y - 12);

Line(x -7, y - 6, x + 10, y - 12);

Circle(x + 10, y - 10, 2);

Circle(x -10, y - 10, 2);

FloodFill(x+1, y+4, White);

{определяем габариты НЛО и помещаем в специальную динамическую переменную}

Tx:= x-R; Ty:=y-14; Rx:;=x+R; Ry:=y+R div3 +3;

Width:=Rx-Tx+1; Size:=ImageSize(Tx, Ty, Rx, Ry);

GetMem(sauser, Size);

GetImage(Tx, Ty, Rx, Ry, sauser^);

{стираем построенное изображение}

PutImage(Tx, Ty, sauser^, XorPut);

{рисуем звездное небо}

SetStyle(1, blue); {установить стиль и цвет закраски голубое небо}

SetColor(White);

{начертить прямоугольник и открыть окно}

Rectangle(xmin, ymin, GetmaxX, GetmaxY);

SetViewPort(xmin, ymin, GetmaxX, GetmaxY, ClipOn);

FloodFill(xmin+1, ymin+1, White);

For i:=1 to 500 do {нарисовать 500 звезд белого цвета}

PutPixel(Random(GetmaxX), Random(GetmaxY- ymin), 15);

{задаем начальное положение НЛО}

x:=xm div 3 – xmin; y:=ym div 3 – ymin; dx:=6; dy:=6;

Repeat {цикл: повторять, пока не нажата любая клавиша}

PutImage(x, y, sauser^, XorPut); {изображаем объект}

Delay (Pause);{ задержка}

PutImage(x, y, sauser^, XorPut); {после паузы стираем объект}

{перемещаем объект}

If (x xm) Or (y+Height +1> ym) Then

begin {если объект смещается влево-вверх за границы окна, изменить координаты так, чтобы он оставался в окне}

If (x- Dx< xmin) then x:= xmin else x := x- Dx;

If (y- Dy< ymin) then y:= ymin else y := y- Dy;

Dx:= GetmaxX div 10 - Random(GetmaxX div 4);

Dy:= GetmaxY div 10 - Random(GetmaxY div 4);

end else

begin { если объект смещается вправо-вниз за границы окна, изменить координаты так, чтобы он оставался в окне}

If (x + Dx< xm) then x:= x + Dx else x:= Random(GetmaxX) - Random(GetmaxX div 4);

If (y + Dy< ym) then y:= y + Dy else y:= Random(GetmaxY) - Random(GetmaxY div 3);

end;

until KeyPressed; {завершить, как только будет нажата клавиша }

FreeMem (sauser, Size);

Closegraph;

end;

end.



1   2   3   4   5   6   7

Похожие:

Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект по теме: «Записи в Паскале»
Цель урока: сформировать представление у учащихся о способе обозначения геометрических фигур буквами латинского алфавита
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект по теме: ‘Строковый тип данных в паскале’
Планирование составлено на основе : «Программы воспитания и обучения в детском саду» под редакцией М. А. Васильевой, В. В гербовой,...
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект урока по теме Компьютерная графика
Задачи: формирование знаний учащихся о развитии животных, учить рассуждать, делать выводы, умение работать с текстом
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект урока компьютерная графика. Растровая и векторная графика....
Семакин И. Г. Информатика и икт. Базовый курс: Учебник для 8 класса. М.: Бином. Лаборатория знаний,2007
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект интегрированного урока по информатике и математике по теме:...
Методы: объяснительно–иллюстративный, использование пк для выполнения самостоятельной работы
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект урока тема: построение графиков функций в паскале авс. Цель...
Воспитательная: воспитание информационной культуры учащихся, внимательности, аккуратности, дисциплинированности, усидчивости
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект урока информатики в 7 классе по теме «Растровая и векторная графика»
Продолжить знакомство с Красной книгой, расширить и углубить знания детей о животных и растениях, встречающихся в нашей местности,продолжить...
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект по теме «Ландшафтные исследования за рубежом»
Составить конспект по теме «Влияние геологического и тектонического строения земной коры на ландшафт»
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект занятия по теме «Прошивание угла» Конспект занятия по теме...
Методические разработки к программе дополнительного образования «Играем в экологию»
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект по теме «Россия в начале 20 века» Конспект по теме «Русско-японская война»
Царствование последнего российского императора Николая II. Кризис власти. Россия в годы трех российских революций
Конспект по теме: \"Графика в Турбо Паскале\" iconИсследование функций с помощью графика производной Графики производной...
Систематизировать знания обучающихся по теме: «Производная функции», формирование у обучающихся базовой математической подготовки...
Конспект по теме: \"Графика в Турбо Паскале\" iconПрограмма по русскому языку Фонетика. Графика
Звуки и буквы, их соотношение. Графика. Алфавит. Звуковое значение букв е, ё, ю, я. Употребление букв ь и ъ, их функции
Конспект по теме: \"Графика в Турбо Паскале\" iconПрограмма по формированию навыков безопасного поведения на дорогах...
Урок Технологии построения анимационных изображений, трехмерная графика. Растровая и векторная графика. Модели цветообразования
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект урока Тема: Растровая и векторная графика
Самостоятельная работа студентов в рамках учебного курса «Культурология» включает в себя
Конспект по теме: \"Графика в Турбо Паскале\" iconПлан-конспект урока по теме «Choosing a profession»
План конспект урока №4 по теме №6 Shopping for everything с проектной деятельностью в 4-а классе, аттестующегося учителя Шмарцевой...
Конспект по теме: \"Графика в Турбо Паскале\" iconКонспект урока по окружающему миру в 3 классе по теме
План конспект урока биологии в 7 классе по теме «Сфагновый мох. Образование торфа»


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск