>)
повертає в змінних A і B значення, ставлення яких (А/В) соответсвует коефіцієнту стиснення зображення. У модулі Graph немає жодного речового параметра (що підвищує швидкодію), тому всі нецілі значення представляються як відношення двох цілих.
Інша процедура,
SetAspectRatio (А, В: Word )
Дозволяє змінювати поточний коефіцієнт стиснення на коефіцієнт, рівний (А/В). Перепризначення коефіцієнта стиснення впливає на роботу всіх процедур, які виводять окружності, еліпси, дуги і на значення параметрів, що повертаються при виклику процедури GetAspectRatio. Побудувати ж правильний квадрат можна, Домножимо його вертикальний розмір на вихідний (системний) коефіцієнт стиснення.
{ Побудова квадрата }
Program QuadroDem;
Uses Graph;
const l = 100;
Var
d, r, e: integer;
a, b: word;
Begin
d: = Detect;
InitGraph (d, r,'');
e: = GraphResult;
if e <> grOk then
writeln (GraphErrorMsg (e))
else
begin
GetAspectRatio (a, b);
Rectangle (20,20, round (l * (b/a)), l);
readln;
CloseGraph;
end
End.
Кола , еліпси і дуги
Для зображення кіл використовується процедура
Circle ( x , у: Integer ; Radius : Word )
Тут (X, Y) - Координати центру кола, Radius - її радіус. Результатом її роботи буде окружність, якщо коефіцієнт зображення відповідає прийнятому BGI-драйвером для поточного графічного режиму. В іншому випадку на екрані з'явиться еліпс, витягнутий по вертикалі (коефіцієнт стиснення більше прийнятого за замовчуванням) або по горизонталі (Коефіцієнт менше прийнятого). p> У модулі Graph представлені процедури малювання еліпсів, дуг, секторів і процедура, що дозволяє малювати сектор, залитий по заданому шаблоном. Всі вони запитують параметри StartAngle і EndAngle , які позначають початковий і кінцевий кут дуги. На малюнку зображена система графічних координат, в якій ми працюємо.
В
Позитивний напрямок осі X (зліва направо) прийнято за 0 В°, негативне напрямок осі Y - за 90 В°, тобто кути відміряються від позитивного напрямку осі X проти годинникової стрілки. Всі значення цих параметрів даються в градусах.
Нижче перераховані процедури розглянутого класу:
Малювання дуги радіуса Radius з центру з координатами (X, Y) від кута StartAngle до EndAngle :
Arc (X, Y: Integer; StartAngle, EndAngle, Radius: Word)
При зміні коефіцієнта стиснення зображення вид виведених дуг буде відрізнятися від правильних кіл.
Малювання еліптичної дуги з аналогічними параметрами:
Ellipse (X, Y: Integer; StartAngle, EndAngle, XRadius, YRadius: Word)
де XRadius і YRadius - розміри горизонтальної та вертикальної піввісь відповідно. Осі еліпса можуть бути тільки паралельні осях X і Y. Для зображення повного еліпса треба задавати кути 0 В° і 360 В°. Значення коефіцієнта стиснення зображення не впливає на його вигляд.
Кутові параметри дуже незручні для нашої системи координат - ми можемо визначити координати початку і кінця дуг кола або еліпса не інакше, як тільки використовуючи відомі тригонометричні вирази. Але в подібних обчисленнях немає необхідності, оскільки ці координати все одно відомі усередині процедур Arc , Ellips , Sector і PieSlice .
Витягти кінцеві координати дуг дозволяє процедура
GetArcCoords (VAR ArcCoords : ArcCoordsType ) b>
Тип ArcCoordsType оголошений в модулі Graph таким чином:
TYPE
ArcCoordsType = RECORD
X, Y
: Integer;
{центр}
XStart, YStart
: Integer;
{початок}
XEnd, YEnd
: Integer;
{кінець}
END ;
Розглянута процедура повертає результати останнього дзвінка процедури малювання дуги або сектора. <В
Побудова прямокутників і ламаних
Для побудови прямокутника досить викликати процедуру Rectangle (Х1, Y 1, Х2,