лабораторные на Pasca (Кудрявцев)l
.pdfРисование графических примитивов и фигур |
203 |
|
|
While x < GetMaxX do begin
Line (x, GetMaxY div 2 – dy, x, GetMaxY div 2 + dy); x := x + MasKoefX;
end;
Здесь 2dy – длина вертикальных штрихов разметки.
Аналогичным образом выполняется разметка оси Y. Следует, одна- ко, помнить, что разрешающая способность по оси X и оси Y не- одинакова, поэтому и коэффициент масштабирования по оси Y бу- дет другим:
MasKoefY = Round (Xasp /Yasp * MasKoefX).
Значения Xasp и Yasp получим, используя функцию
GetAspectRatio (Xasp , Yasp ).
После разметки осей координат экран бдет иметь вид (рис. 2.).
y
MasKoefY
MasKoefX |
|
GetMaxX div 2 |
|
||
|
|
GetMaxY div 2 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GetMaxX, GetMaxY
Рис. 2
Для рисования графика функции y = f(x) в системе координат XOY необходимовыполнить следующий фрагмент программы:
Koord x := –k; h := 0.1; While Koord x < k do
begin
x := round (Koord x); y = f(x);
PutPixel (x,round (y));
Рисование графических примитивов и фигур |
205 |
|
|
Procedure SysCoord; |
|
Const |
|
dx=2; |
|
dy=2; |
|
var |
|
Delen: Word; |
|
x,y: Word; |
|
Rat: Extended; |
|
begin |
|
Line(0, GetMaxY div 2, GetMaxX, GetMaxY div 2); |
|
x:= (GetMaxX div 2) mod MasKoefX; |
|
While x < GetMaxX do |
|
begin |
|
Line(x, GetMaxY div 2 – dy, x, GetMaxY div 2 + dy); |
|
x:= x + MasKoefX; |
|
end; |
|
Line(GetMaxX div 2, 0, GetMaxX div 2, GetMaxY); |
|
y:= (GetMaxY div 2) mod MasKoefY; |
|
While y < GetMaxY do |
|
begin |
|
Line(GetMaxX div 2 – dx, y, GetMaxX div 2 + dx, y); |
|
y:= y + MasKoefY; |
|
end; |
|
end; |
|
{--------------------------------------------------} |
|
Procedure DrawGraph; |
|
var |
|
i: Word; |
|
xi,yi: Extended; |
|
Delen: Word; |
|
h: Extended; |
|
CountPoint: Word; |
|
begin |
|
Delen:= (GetMaxX div 2) div MasKoefX; |
|
h:=1/MasKoefX; |
|
i:=0; |
|
xi:= –Delen; |
|
While xi<Delen do |
|
begin |
|
yi:= f(xi); |
|
y_func[i].x:= GetMaxX div 2 + round(xi*MasKoefX); y_func[i].y:= GetMaxY div 2 – round(yi*MasKoefY); xi:= xi + h;
inc(i)
Рисование графических примитивов и фигур |
207 |
|
|
|
|
31. y = x/ln x; |
32. y = 3x2 – 2x + 5; |
|
33. y = 1/(3x2 + 2x + 1); |
34. y = 1/(x2 + 2x + 1); |
|
35. y = (x + 1)2 – sin x; |
36. |
y = (1 + x2 )/x; |
37. y = x2ex ; |
38. |
y = x3 – 3x; |
39. y = e–x – (x – 4)2; |
40. |
y = 1/(x3 + 1); |
41. y = x2/3; |
42. |
y = (x – 4) e–x/10 ; |
43. y = (sin x – cos x)e–x/5 ; |
44. y = e–x/3 sin x. |
II.Построить кривые по заданному параметрическому представлению:
1.Окружность радиуса r с центром в начале координат:
x = r cost, y = r sin t, t [0, 2π).
2.Эллипс с большой и малой полуосями, равными соответственно r1 и r2 и расположенными параллельно осям координат:
x = r1 cos t, y = r2 sin t, t [0, 2π).
3. УлиткуПаскаля:
x = a cos2 t + b cos t, y = a cos t sin t + b sin t, a > 0, b > 0, t [0, 2π).
Рассмотреть случаи, когда b >= 2a, a < b < 2a, a > b.
4.Кардиоиду:
x= a cos t (1 + cos t), y = a sin t (1+cos t), a > 0, t [0, 2π).
5.Эпициклоиду:
x= (a + b) cos t – a cos ((a + b) t/a), y = (a +b) sin t – a sin ((a + b) t/a), a > 0, b > 0. Рассмотреть следующие случаи:
a)если b/а есть целое положительное число, t [0, 2π);
b)если b/a = p/q, где p и q – положительные целые взаимно про- стые числа, t [0, 2qπ).
6.Астроиду: x = b cos3 t, y = b sin3 t, t [0, 2π).
7. |
Циссоиду: x = at2 /(1 + t2), y = at3/(1 + t2 ), t (– ∞,∞), a > 0. |
8. |
Строфоиду: x = a(t2 – 1)/(t2 + 1), y = at(t2 –1)/(t2 +1), t (– ∞, ∞), a > 0. |
9. |
Конхоиду Никомеда: x = a +lcost, y = atgt +lsint, t (– π/2, π/2) – правая |
|
ветвь, t (π/2, 3π/2) – левая ветвь, a >0, l > 0. Рассмотреть случаи, ко- |
|
гда l < a, l > a, l = a. |
10.Астроиду: x = R cos3 (t/4), y = R sin3 (t/4).
11.Гипоциклоиду: x = (R – mR) cos mt + mR cos(t – mt),
y = (R –mR)sinmt – mR sin (t – mt), mR = r, (m = r/R), m = 1/4; m = 1/2; m = 2/3; m = 2/5.
208 |
Лабораторная работа № 17 |
|
|
12.Декартов лист: x = 3at / (t3 + 1); y = 3at2 / (t3 + 1).
13.Кардиоиду: x = 2r cos t –r cos 2t, y = 2r sin t – r sin 2t.
14.Строфоиду: x = 2at2 / (1 + t2 ), y = at (t2 – 1) / (1 + t2 ).
15.Трактрису: x = a (ln tg t/2 + cos t), y = a sin t.
16.Циклоиду: x = a (t – sin t), y = a (1 – cos t).
17.Удлиненную(укороченную) циклоиду: x = at – d sin t, y = a – d cos t.
18.Циссоиду Диоклеса: x = a / (t2+ 1), y = a / t(t2+ 1).
19.Эвольвенту окружности: x = a (cos t + t sin t), y = a (sin t – t cos t).
III. Построить кривые по их уравнениям, заданным в полярных координатах:
1. r = а sin 3α; |
2. |
r = а sin 2α; |
||||||||
3. r = а α; |
4. |
r = а α2 – l; l >= 0; |
||||||||
5. r = а sin (4α/3); |
6. |
r = а sin (5α/3); |
||||||||
7. r = а/α2 ; |
8. |
r = а/cos α ± a tg α; |
||||||||
9. r = a |
|
|
|
|
10. r = −a cos2α/ cos α |
|||||
2cos2α |
||||||||||
11. r = а ebα ; |
12. r = а(4cos a – 1/cos a); |
|||||||||
13. r = a |
|
; |
14. r = −a |
|
|
|
||||
α |
α +1; |
|||||||||
15. r = а sin 3α; |
16. |
r = а/sinα ± l; |
||||||||
17. r = аα , a>0; |
18. r = 1 + sin(2α); |
|||||||||
19. r = sin 2α; |
20. |
r = 3a sinα cosα/(sin3 α +cos3 α); |
||||||||
21. r = а sin (α/2); |
22. r = а sin (α/3); |
|||||||||
23. r = а/α; |
24. |
r = a |
|
|
||||||
α |
||||||||||
25. r = 1 + cos a; |
26. r = 2а cos a – l; |
|||||||||
27. r = 2а(1 – cos α); |
28. r = 2а sin 2α/cos α; |
|||||||||
29. r = b + а sinα; |
30. r = а(1 + cosα); |
|||||||||
31. r = а sin α; |
32. |
r = 2а sin2 α/cos α; |
||||||||
33. r = 2а(1 – cos α); |
34. r = α/4; |
|||||||||
35. r = b + а sin α; |
36. r = 1 + 2cos α; |
|||||||||
37. r = а sin α; |
38. |
r = 1 + 2cos 2α; |
||||||||
39. r = sin 5α; |
40. |
r = sin 7α. |
||||||||
IV. |
|
|
|
|
|
|
1. Построить ход лучей в собирающей линзе. Свет распространяется парал- лельно оптической оси.
Рисование графических примитивов и фигур |
209 |
|
|
2.Построить ход лучей в собирающей линзе. Свет распространяется под углом a к оптической оси.
3.Построить ход лучей в собирающей линзе. Источник света находится в главном фокусе.
4.Построить ход лучей в собирающей линзе. Источник света находится в фокальной плоскости.
5.Построить ход лучей в рассеивающей линзе. Свет распространяется па- раллельно оптической оси.
6.Построить ход лучей в рассеивающей линзе. Источник света находится в главном фокусе.
7.Выполнить построение изображения в собирающей линзе. Предмет рас- положен на расстоянии l>f от линзы.
8.Выполнить построение изображения в собирающей линзе. Предмет рас- положен на расстоянии l<f от линзы.
9.Выполнить построение изображения в рассеивающей линзе. Предмет расположен на расстоянии l>f от линзы.
10.Выполнить построение изображения в рассеивающей линзе. Предмет расположен на расстоянии l<f от линзы.
11.Выполнить построение изображения в сферическом вогнутом зеркале. Предмет расположен на расстоянии l>f от зеркала.
12.Выполнить построение изображения в сферическом выпуклом зеркале. Предмет расположен на расстоянии l<f от зеркала.
13.Построить ход лучей в треугольной призме.
V. Составить программу, иллюстрирующую:
a)часы–ходики;
b)секундомер;
c)вращающийся квадрат;
d)вращающийся треугольник;
e)вращающийся вокруг центра отрезок;
f)вращающийся пятиугольник;
g)вращающийся прямоугольник;
h)вращающаяся пятиконечная звезда;
i)вращающаяся шестиконечная звезда.
210
Лабораторная работа № 18
УПРАВЛЕНИЕ ЦВЕТАМИ И ШАБЛОНАМИ ЗАЛИВКИ (ЗАПОЛНЕНИЯ)
В модуле Graph предусмотрены процедуры, с помощью которых можно заполнить (залить) определенным “узором” любую замкну- тую область изображения. Вид “узора” задается так называемым шаблоном заливки. В Turbo Pascal предопределены ряд стандарт- ных шаблонов, но, кроме того, имеется возможность конструиро- вать собственные.
Назначение шаблона заполнения (заливки) производится процеду-
рой
SetFillStyle (Pattern: Word; Color: Word),
где параметр Pattern определяет вид шаблона заливки, а Color – его цвет. Все разрешенные значения параметра Pattern предопределены в модулеGraph в виде констант:
Const
EmptyFill = 0; |
{ сплошная штриховка цветом фона (узор отсутствует) } |
|
|
SolidFill = 1; |
{ сплошная штриховка текущим цветом } |
|
|
LineFill = 2; |
{ штриховка линиями ======= } |
|
|
LtSlashFill = 3; |
{ штриховка линиями / / / / / / / } |
|
|
SlashFill = 4; |
{ штриховка утолщенными линиями / / / / / / / } |
|
|
BkSlashFill = 5; |
{ штриховка линиями \ \ \ \ \ \ \ } |
|
|
LtBkSlashFill = 6; |
{ штриховка утолщенными линиями \ \ \ \ \ \ \ } |
|
|
HatchFill = 7; |
{ штриховка +++++++ } |
|
|
XHatchFill = 8; |
{ штриховка ЧЧЧЧЧЧЧ } |
|
|
InterLeaveFill = 9; |
{ штриховка в прямоугольную клеточку } |
|
|
WideDotFill = 10; |
{ штриховка редкими точками } |
|
|
CloseDotFill = 11; |
{ штриховка частыми точками } |
|
|
UserFill = 12; |
{ штриховка определяется пользователем } |
Константа UserFill используется для определения типа заливки, ко- торый предварительно был задан в программе.
Управление цветами и шаблонами заливки (заполнения) |
211 |
|
|
Для задания нового шаблона необходимо воспользоваться проце-
дурой
SetFillPattern (PattMatrix: FillPatternType; Color: Word),
передав ей в параметре PattMatrix матрицу шаблона заливки и ука- зав цвет параметром Color. Эта процедура по действию аналогична SetFillStyle, но устанавливает только “самодельные” шаблоны. По- лучение информации о текущих установках шаблона заливки про-
изводится процедурой
GetFillSettings (Var FillType: FillSettingsType),
которая возвращает в переменной FillType предопределенноготипа
Type |
|
FillSettingsType = Record |
|
Pattern: Word; |
{шаблон} |
Color: Word; |
{цвет} |
End; |
|
номер шаблона из списка, представленного при описании процеду- ры SetFillStyle (поле Pattern), и цвет, которым наносится этот шаб- лон (поле Color).
Если значение поля Pattern оказалось равным UserFill, то для полу-
чения подробной информации следует вызвать процедуру
GetFillPattern (Var PatternMatrix: FillPatternType),
возвращающую в переменной типа FillPatternType матрицу послед- него определенного пользователем шаблона.
Заливка областей изображения. В модуле Graph имеется ряд про-
цедур, рисующих графические фигуры и сразу же заполняющих их по заданному шаблону.
Процедура
Bar (X1,Y1,X2,Y2: Integer)
рисует прямоугольник, внутренняя область которого залита по те- кущему шаблону. Параметры (X1,Y1) и (X2,Y2) – координаты верх- него левого и нижнего правого углов прямоугольника.
Процедура
Bar3D (X1,Y1,X2,Y2: Integer; D3: Word; Top: Boolean)