Смекни!
smekni.com

Комп ютерна графіка 2 (стр. 2 из 11)

Ах + Ву + С < 0, (1.4)

Якщо прийняти, яка з цих півплощин роз­міщена зліва, а яка справа від прямої, то цим самим можна орієнтувати пряму (1.2). Для зміни напряму прямої (1.2) на протилеж­ний треба обидві частини рівняння (1.2) помножити на -1. При цьому півплощини (1.3) і (1.4) поміняються місцями.

Сукупністю нерівностей, кожна з яких задає півплощину, задають область, обме­жену опуклим багатокутником на площині, якщо кількість нерівностей менша від трьох. При цьому можна використовувати нерівності лише одного знака.

Наприклад, внутрішність квадрата, зоб­раженого на рис. 1.4 моделюється систе­мою нерівностей

-у + 2 > 0, -х + 2 > 0, у + 2 > 0, х + 2 > О, (1.5)

а зовнішність квадрата, зображеного на рис. 1.5, — системою нерівностей.

у - 1 > 0, х - 1 > 0, -у - 1 > 0, -х - 1 > О, (1.6)

"Кільцева" область (рис. 1.6), яка обме­жена двома попередніми квадратами мо­делюється системою з восьми нерівностей (1.5) і (1.6).

Обчислення координат точки перетину двох прямих. Якщо прямі задані формою (1.2)

А1х+В1у+С1 =0, (1.7)

А2х+ В2у+ С2=0,

то координати точки перетину їх обчислю­ють за формулами

(1.8)

Якщо D = 0, а Dx ¹О або D y¹0, то прямі паралельні.

Якщо D=0, Dx= О, Dy= 0, то прямі збіга­ються.

Рівняння прямої, що проходить через дві точки, має вигляд

(1.9)

Це рівняння доцільно застосовувати тоді, коли впорядкована послідовність точок спо­лучається ламаною. Ця послідовність задаєть­ся масивами координат хi, уi

(і =1,2, ..., n). Рівняння ланок ламаної дістанемо у вигляді

(1.10)

Рівняння (1.9) можна звести до вигляду (1.1), якщо обчислити k і b за формулами

(1.11)

та до вигляду (1.2), якщо обчислити А, В і С за формулами

(1.12)

Розглянемо ще параметричну форму за-дання прямої. Запишемо рівняння (1.9) у

вигляді

(1.13)

Звідси

, (1.14)

де s є параметром. Якщо s = 0, то x = x1| , у = y1. Якщо s = 1, то x2 = х, у = у2. Якщо

О <д< 1, то точка лежить усередині відрізка (x1 , y1), (y2, x2). Якщо s<0 або s >1, то точ­ка лежить зовні відрізка.

Параметричне рівняння (1.14) застосо­вують у багатьох алгоритмах комп'ютер­ної графіки: в алгоритмі покриття області штриховкою, в алгоритмах визначення видності — рухомого та нерухомого екра­нів тощо.

Нехай область, яку треба покрити штри­ховкою (рис. 1.7), задана масивами коор­динат (x1,y2), (x2,y2) (і = 1, 2, 3, 4). Рівняння ла­нок, що обмежують область, дістанемо у вигляді (1.10) при i = 1, 2, 3, 4. Визначив­ши iнтервал, який пробігає параметр b у рівнянні (1.1) сім'ї ліній штриховки, зада­мо крок зміни b. На кожному кроці треба розв'язати систему чотирьох рівнянь (1.10) і (1.1). У результаті дістанемо координа­ти точок I…IV. Підставимо у формули (1.14) замість х та у знайдені координати хnj та ynj. Матимемо

. (1.15)

Якщо хі+1і= 0, то слід скористатися другою формулою з (1.15), а якщо уі+1і= 0, то ­­­­- першою.

У результаті для точок ІІ і ІІІ дістанемо значення s2 та s3 за межами інтервалу

0<s<1, тобто їх не враховують при визна­ченні того відрізка лінії штриховки що на­лежить області.

Полярні параметри прямої. Відстань р початку координат від прямої (1.2) та кут між віссю Ох і відрізком перпендикуляра ОК (рис. 1.8) називають полярними параметрами прямої.

Відстань р визначають за формулою

. (1.16)

Кут t визначають не безпосередньо, а за допомогою функцій синуса та косинуса:

(22.17)

Умова паралельності прямих (1.7) ви­пливає з формул (1.8) при D= 0:

A1B2-B1A2 (1.18)

Умова перпендикулярності прямих (1.7):

A1A2+B1B2 =0 (1.19)

Рівняння прямої, яка проходить через точку М(х1, у1) і перпендикулярна до пря­мої (1.2):

А(у –у1)- В(х-х1)=0. (1.20)

Відстань точки М (х1,у1) до прямої (1.2):

(1.21)

Якщо в цю формулу підставити коорди­нати початку 0(0.0), то відстань d матиме знак С, чим і пояснюється знак абсолютної величини. Точки, розміщені по той самий бік від прямої що й початок коорди­нат, дають той самий знак для d. Точки. розміщені по різні боки від прямої, дають протилежні знаки для d. Тому відстань d на­зивають орієнтованою.

Коло

Рівняння кола, центр якого збігається з початком координат, має вигляд

х22=R2. (1.22)

У параметричній формі

x=Rcost, y=Rsint, (1.23)

де t — кут між Ох та радіусом-вектором точки.

Якщо центр кола має координати (а, b) то рівнянням кола є (рис. 1.6):

(х - а)2 + (у - b)2 = R2 (1.24)

та

х = а + Rсоst, у = b + Rsint . (1.25)

Орієнтація кола. Перейдемо від форми задання (1.22) чи (1.24) до неявної фор­ми задання:

x2 +y2-R2=0, (1.26)

(x-a)2+(y-b)2-R2=0. (1.27)

Якщо координати точок, які лежать усе­редині кола, підставити в рівняння (1.26) або (1.27), то матимемо зміну знака ''=" на "<".

Можна вважати, що коло (1.26) або (1.27) має такий напрям, що точки, коор­динати яких змінюють знак "=" на знак "<" у рівнянні (1.26) чи (1.27), розміщені, на­приклад, зліва від напряму кола, тим самим визначити його орієнтацію. Щоб змінити напрям кола на протилежний, треба помно­жити рівняння на -1. Тоді матимемо

-x2-y2+R2=0, або –(x-a)2-(y-b)2+R2 = 0.

Поділ кола на рівні частини. Щоб поді­лити коло на n рівних частин, треба ввести параметр s:

(1.28)

Кутониіі параметр точок поділу

ti=2psi (1.29)

Змінюючи i від 1 до n + 1 обчислюємо спо­чатку si за формулою (1.28), а потім ti, за формулою (1.29). Підставивши ti, у рівнян­ня (1.23) або (1.25), знайдемо координа­ти xi, yi точок поділу.

Перша точка поділу (і = 1, si = 0, ti = 0) збігається з останньою (i=n+ 1, si = 1, ti = 2p). Цей збіг, як і кінцеве значення i=n+ 1 зроблено навмисно: при кресленні кола чи багатокутника графопобудовником креслярський пристрій міститься у почат­ковій точці двічі — на початку та напри­кінці креслення.

Наведений алгоритм застосовують у програмах креслення правильних багато­кутників і кіл. У другому випадку n виби­рають значно більшим, щоб візуально ба­гатокутник не відрізнявся від кола.

Дуга (відрізок) кола. Параметрами, що визначають будь-яку дугу кола є: хс, ус- координати центра; R—радіус; tп —куто­вий параметр початкової точки дуги; tд

центральний кут, що охоплює дугу, або кутовий параметр дуги. Кути tп та tд орієн­товані. Перший — від напряму +х до раді­уса-вектора початкової точки, другий від радіуса-вектора початкової до радіуса-вектора кінцевої точки. Якщо вини спря­мовані проти ходу годинникової стрілки, то значення беруть зі знаком "+", а якщо за ходом - зі знаком "-".

Поділ дуги кола на рівні частини. Наве­дений вище алгоритм для кола треба мо­дернізувати, замінивши формулу (1.29) на

t= tп (1-s)+( tд+ tд) (1.30)

Решта — без змін. На цьому алгоритмі грунтується програма креслення дуги кола.

Перетин кола та прямої. Щоб знайти координати точок перетину прямої (див-рис. 1.9), заданої у формі (1.2)

Ах + Ву + С = 0, (1.31)

та кола, заданого формою (1.25), знайде­мо рівняння прямої у локальній системі х'О'у’ з початком у центрі кола О' (a,b) (рис. 1.9). За формулами рівняння пря­мої у локальній системі х'О'у'

А(х' +a)+ В(у'+b)+ С=0 або

Ах' + Ву' + С + Аа + Вb = 0. (1.32)

Згідно з (1.16) та (1.17) визначимо полярні параметри прямої (1.32) у системі х'О'у'

,

(1.33)

.

Очевидно, якщо p > R, то розв'язків не існує, якщо р = R, то маємо один розв'язок (дотик), Знайдемо синус та косинус кута

(22.34)

Координати точок перетину прямої з колом у системі

(1.35)

де .

Координати точок перетину у системі хОу маємо

(1.36)

Пряма, дотична до кола та паралельна заданій прямій. Форми задання прямої та кола, віднесення їх до локальної системи х'О'у' та вирази (1.32) і (1.33) такі самі, як і в попередньому алгоритмі. Для дотич­них прямих р = R, а кутовий параметр однієї з точок дотику дорівнює куту нахи­лу до осі О'х' полярного параметра р. Звідси координати точки дотику однієї з шуканих прямих у системі х'О'у' є такими:

(1.37)

де cost і sint визначають за формулами (1.33). Координати точки дотику другої прямої у системі х'О'у'

(1.38)

знаходимо як для точки, симетричної точці () відносно початку О'.

Перехід у глобальну систему хОу здійс­нюється ча формулами (1.36). Якщо хі, уі— знайдені координати точок дотику у системі хОу, то рівняння дотичних прямих дістанемо у вигляді

А(х +х1)+В(у-уі)= О (і= 1,2), (1.39)

тобто коефіцієнти А і В такі самі, як і в рівнянні заданої прямої, а вільний член С набуває значення

Сі= -Ахі - Вуі. (1.40)

Перетин двох кіл. Розглянемо спочатку випадок окремого розміщення кіл, коли центр першого збігається з початком, а центр другого лежить на осі Ох (рис. 1.10). Задача має два розв'язки, якщо міжцентрова відстань d задовольняє умові (при R1 > R2)

.

Тут не розглядаємо тривіальні випадки, коли d=R1-R2 або d= R1+R2.

Рівняння першого кола (1.41)

Рівняння другого кола (1.42)

Координати шуканих точок перетину знайдемо як розв'язок системи рівнянь (1.41) і (1.42).

2ах – а2 = ,

звідки

(1.43)