Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОЛЯКОВ_ПРЕЗЕНТАЦИИ_С++ / СтруктПрогрГрафики.ppt
Скачиваний:
15
Добавлен:
20.05.2015
Размер:
1.23 Mб
Скачать

Функции, заданные в неявном виде

 

 

 

21

 

 

 

 

f (x, y) = 0 пример: уравнение эллипса

 

 

 

 

 

 

(x x0 )2

 

( y y0 )2

1

(x x0 )2

 

( y y0 )2

1 0

a2

 

b2

 

a2

 

 

 

 

 

b2

 

 

 

 

 

 

 

 

( y y

)2

1

(x x )2

 

 

 

 

y

 

 

0

 

 

 

0

 

 

 

 

 

 

a

b2

 

 

 

 

 

 

a2

 

 

2

 

 

 

 

 

 

 

 

 

 

 

(x

x0 )

 

 

 

 

 

( y y0 )

2

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

1

a

2

 

 

 

 

y0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

 

 

y y0 b

1

(x x )2

 

 

 

 

 

 

0

 

 

 

 

 

 

 

a2

 

 

 

 

 

x0

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(x x )2

 

 

 

 

 

 

 

 

y y0 b

1

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

a2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Полярные координаты

22

 

 

 

 

 

- полярный

А( , )

 

радиус

 

 

O

- полярный угол

 

полярный луч

полюс

 

= f ( )

Описание фигур, полученных при вращении объектов.

Примеры:

 

 

 

= R

= a

 

= a∙sin(2 /3)

 

R

 

 

O

O

 

O

окружность

спираль Архимеда

«роза»

Полярные координаты

23

 

Переход к декартовым координатам

А( , )

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

tg x

 

O

 

x

x cos( ) y sin( )

x2 y2

arctg xy

Описание в параметрической форме

24

 

x

= f1 (t)

t – независимый параметр («время»)

 

y

= f2 (t)

Описание фигур, полученных при

 

сложном движении объектов.

 

y

 

x v0 cos( ) t

 

 

v0

 

 

y v

sin( ) t gt

2

 

 

 

 

 

0

2

 

0

x

 

 

 

 

Циклоида – траектория точки на ободе колеса при вращении

 

y

R

x R (t sin t)

 

 

 

 

 

y R (1 cos t)

0

 

x

Системы координат

 

 

25

 

 

 

Математическая

 

 

Экранная

 

 

 

 

(0,0)

640

 

(639,0)

Y

 

 

xЭ

yЭ

 

XЭ

x

 

 

 

y0

(x, y)

 

(xЭ, yЭ)

 

480

 

 

 

 

y

 

 

(x0, y0)

 

 

0

 

X

x0

 

 

 

 

 

 

 

 

 

 

 

 

 

(0,479)

 

 

(639,479)

 

 

 

YЭ

 

 

Преобразование координат:

 

 

 

 

 

 

 

x0, y0 – экранные координаты

xЭ x0

k x

?

Почему

точки (0,0)

 

 

k масштаб (во сколько раз

yЭ y0

k y

«минус»?

растягивается единичный

 

 

 

 

отрезок)

 

 

 

 

 

 

Структура программы

26

 

 

 

 

 

 

#include<graphics.h>

 

 

 

#include<stdio.h>

 

 

 

#include<conio.h>

 

 

 

#include<math.h>

 

 

 

const x0 = 100, y0 = 400, // координаты точки (0,0)

 

 

k = 80;

// масштаб

 

 

глобальные переменные

процедуры и функции

void main()

{

int d = DETECT, m;

initgraph(&d, &m, "c:\\borlandc\\bgi");

основная часть

getch();

closegraph();

}

Перевод в экранные координаты

27

 

 

 

 

 

//-----------------------------------------

 

 

//SCREENX – перевод X в координаты экрана //-----------------------------------------

int ScreenX (float x)

{

return x0+k*x;

}

//-----------------------------------------

//SCREENY – перевод Y в координаты экрана //-----------------------------------------

int ScreenY (float y)

{

return y0-k*y;

}

?Откуда берутся x0, y0 и k?

Оси координат

28

 

 

 

 

 

(0,0)

(639,0)

 

y0

 

(x0, y0)

 

x0

(0,479)

(639,479)

 

void Axes()

{

line ( x0, 0, x0, 479 ); line ( 0, y0, 639, y0 );

}

Разметка оси X («черточки»)

 

29

 

 

xЭ

 

 

 

Число меток на [0, xmax]:

 

(x

, y 2)

y0

длина 640 x0

 

 

Э

0

 

единичный отрезок k

 

 

 

 

 

 

 

 

N

640

x0

(xЭ, y0+2)

 

 

 

k

 

 

 

 

 

 

x

640 − x0

 

 

 

 

0

 

 

 

 

 

 

void Axes()

 

 

 

 

 

 

{

 

 

 

 

 

 

int i, xe;

...

for (i = 1; i <= (640 xe = ScreenX(i);

line ( xe, y0-2, xe, y0+2 );

}

}

переходим к экранным координатам

Разметка оси X (числа)

 

30

 

 

 

xЭ

 

Вывод символьной строки

 

 

(xЭ, y0+2)

в графическом режиме:

 

(xЭ-4, y0+3)

 

outtextxy(x, y, s);

 

 

8 на 8

координаты

строка:

 

 

левого

 

 

1

 

 

верхнего угла

char s[5];

void Axes()

с

 

 

{

 

 

 

 

запасом…

 

 

 

char s[5];

 

 

 

 

 

 

 

...

 

перевести целое

 

for (i = 1; i <= (640-x0)/k;

 

число i в строку s

 

...

 

 

 

 

 

 

sprintf ( s, "%d", i );

 

 

 

outtextxy ( xe-4, y0+3, s );

вывести строку

}

}

 

s на экран

 

 

 

 

Соседние файлы в папке ПОЛЯКОВ_ПРЕЗЕНТАЦИИ_С++