You are on page 1of 8

Motivaii

Una dintre cele mai interesante categorii de probleme informatice este cea a realizrii
elementelor grafice, mai corect geometrice. n spatele unei imagini sau oricrui alt element
grafic realizat pe monitorul calculatorului este ascuns un model matematic, rareori complex, dar
ntotdeauna, elegant i perfect.
Problema de calcul a ariei unui triunghi sau patrulater este relativ simpl. ar cum se
procedeaz atunci c!nd este necesar s se calculeze aria unui poligon, care are "# sau chiar "##
de laturi$ %ste oare acest poligon convex sau nu$ &poar'ine oare un punct dat domeniului intrior
al acestui poligon$ (irul ntrebrilor ar putea fi continuat la nesf!rit. )spunsurile sunt ascunse
n algoritmii de geometrie computa'ional.
Problemele de geometrie apar tot mai frecvent n concursurile de programare de cele mai
diverse ranguri de la concursuri locale p!n la cele de talie interna'ional. *pre deosebire de
metodele de rezolvare a problemelor devenite de+a clasice ,programarea dinamic, algoritmii
teoriei grafurilor, metoda Divide Et Impera, banalul Backtracking- care au fost descrise n mai
multe edi'ii aprute la noi n .ar i peste hotare, algoritmii de rezolvare a problemelorde
geometrie computa'ional au fost descrii fragmentar doar n c!teva edi'ii
/
.
ncep!nd cu acest articol, pe parcursul c!torva numere se va ncerca o sistematizare a
algoritmilor de geometrie computa'ional cu expunerea lor de la cele mai simple opera'ii i p!n
la analiza i rezolvare unor probleme de concurs complexe.
0eometria computa'ional n plan se bazeaz pe c!teva elemente cheie. 1unoaterea
propriet'ilor acestora permite rezolvarea ma+orit'ii absolute a problemelor. 1are sunt aceste
2crmizi3, pe care se bazeaz algoritmii geometrici$
%numerarea lor nu va lua mult timp4
*istem de coordonate
Punct
istan'
reapt
1elelalte elemente geometrice plane ,segment, poligon, arie, perimetru etc.- pot fi definite cu
a+utorul elementelor enumerate mai sus. Prin urmare, posibilitatea de a procesa datele, care se
refer la elementele primare, permite rezolvarea problemelor care 'in de structurile geometrice
complexe.
1. Transformri de coordonate.
1.1 Deplasri i rotaii
)ezolvarea oricrei probleme de geometrie computa'ional ncepe ,dac e necesar- de la
deplasarea coordonatelor elementelor cercetate ,de cele mai multe ori 5 punctelor- ntr5un
domeniu potrivit al sistemului de coordonate ,de obicei 5 n cadranul nt!i-. eplasarea n unele
cazuri poate fi nso'it de rota'ia sistemului de coordonate.

6ie dat n planul de coordonate un punct P cu coordonatele carteziene ,x,y). eplasarea de
coordonate de5a lungul axei 0x cu o valoare dat a implic o modificare a coordonatelor
punctului conform formulelor4
- / . / ,
7
7

=
+ =
y y
a x x

/
Printre edi'iile n care au fost descrii unii dintre algoritmii geometrici pot fi men'ionate4 8h. 9. 1ormen .a.
2:ntroducere n algoritmi3, 1lu+, &gora, "##/ i 1. 1adar .a. 1ulegere de probleme i programe Pascal, ;ucureti,
Petrion, /<<=.
n cazul deplasrii de5a lungul axei 0y cu vloarea b transformarea de coordonate va fi dat de
sistemul4
- " . / ,
7
7

+ =
=
b y y
x x
>odificarea ?combinat3 a coordonatelor cu a dup 0x i b dup 0y va fi dat de sistemul4
- @ . / ,
7
7

+ =
+ =
b y y
a x x
Urmtorul tip de transformare este rotirea
cu un unghi a punctului ,punctelor- fa'
de originea sistemului de coordonate ,des.
/-. ,n unele edi'ii transformarea este
indicat ca rotirea originii coordonatelor
fa' de punctul ,sau sistemul de puncte-
dat-.
n acest caz exist patru numere a,b,c,d ,
care permit trecerea univoc a
coordonatelor x,y n x,y, utiliz!nd
sistemul de ecua'ii4
- A . / ,
7
7

+ =
+ =
dy cx y
by ax x
Pentru determinarea acestui cuadruplu de numere se folosesc punctele ,1,0- i ,0,1-
*e observ, c la rotirea cu un unchi
punctul cu coordonatele ,/,#- trece n
punctul ,cos( ), sin( )-, iar ,#,/- n
,-sin( ), cos( )-. nlocuind aceste valori
n calitate de coeficien'i n sistemul ,/.A- se
ob'ine4
- / . B . / ,
sin
cos
7
7

=
=

=
=

c
a
c y
a x
&nalogic4

=
=

=
=
- " . B . / ,
cos
sin
7
7

d
b
d y
b x
&stfel, sistemul de ecua'ii pentru rotirea cu
un unghi a unui punct arbitrar ,x,y- n
+urul centrului de coordonate capt forma4
- C . / ,
- cos, - sin,
- sin, - cos,
7
7

+ =
=


y x y
y x x
n cazul, c!nd rotirea cu unghiul a punctului cu coordonatele ,x,y- este efectuar n raport cu
un punct ,x
0
,y
0
-, diferit de originea coordonatelor, mai nt!i se transfer originea n centrul de
rotire ,deplasarea de coordonate-, apoi se efectuaz rotirea n +urul noului 2centru de
coordonate34

+ + =
+ =

+ =
=
- D . / ,
- cos, - , - sin, - ,
- sin, - , - cos, - ,
- cos, - , - sin, - ,
- sin, - , - cos, - ,
# # #
7
# # #
7
# # #
7
# # #
7




y y x x y y
y y x x x x
sau
y y x x y y
y y x x x x
1.3 mplementri
n problemele de concurs pot apare diferite modele de transformri ale coordonatelor4 deplasri
dup o ax, deplasri combinate ,dup ambele axe-, rota'ii fa' de un punct, deplasri nso'ite de
rota'ii. 8oate aceste transformri presupun recalcularea coordonatelor unui punct sau a unui
sistem de puncte.
Pentru rezolvarea eficient a problemelor de geometrie este foarte important alegerea
corect a structurilor de date. Ea moment se va implementa o singur structur punctul4
type point=record
x,y : real;
end;
Procedura de deplasare a coordonatelor cu valorile vx dup #F i vy dup #G poate fi realizat n
felul urmtor4
procedure move(var P:point; vx,vy:real);
begin
P.x:=P.x+vx;
P.y:=P.y+vy;
end;
Ea fel de simpl este i o posibil implementare a rota'iei cu un unghi u fa' de un punct cu
coordonatele vx i vy4
procedure rotate (var P:point; u,vx,vy:real);
var old:point;
begin
old:=P;
P.x:=vx+(old.x-vx)*cos(u*pi!"#)-(old.y-vy)*sin(u*pi!"#);
P.y:=vy +(old.x-vx)*sin(u*pi!"#)+(old.y-vy)*cos(u*pi!"#);
end;
1.! "robleme re#olvate
1.4.1 Comoara (Concursul on Line .Campion, ediia 2005-2006)
* gaseti o comoar ascuns de ctre pira'i este simplu dac ai o hart. e obicei harta este
nso'it de un algoritm ce descrie deplasarea spre comoar. e exemplu4 20sete st!nca alb.
>ergi @# de pai spre pdure, apoi /B spre lac, ... , i "# prin peter. 1omoara e sub semnul
desenat pe peretele drept3. 1ea mai mare parte a indica'iilor se reduce la deplasarea cu un anumit
numr de pai n una din direc'iile date ,/ nord, " nord5est, @ est, A sud5est, B sud, C
sud5vest, D vest, = nord5vest-. Eungimea pasului este considerat / pentru direc'iile /,@,B, D i
" pentru direc'iile ", A, C, =.
1ltoria dup traseul descris e foarte simpl, dar cere mult timp. 1uttorii de comori vor s
a+ung direct la comoar. e exemplu, n loc s mearg @ pai la nord, / la est, / la nord, @ la
est, " la sud i / pas la vest, se poate de mers direct, fc!nd doar aproximativ @.C pai ,des. @-.
Cerin
*crie'i un program, care dup indica'iile pira'ilor determin punctul, n care este ascuns
comoara. *e consider c axa Ox e ndreptat spre est, iar Oy spre nord. :ni'ial cuttorul de comori se
afl n originea sistemului de coordonate ,punctul cu coordonatele ,#, #--.
Input
Prima linie a fiierului de intrare con'ine numrul N numrul de indica'ii ,/HNHA#-. Urmtoarele N
linii con'ii indica'iile propriu5zise numrul direc'iei ,un numr ntreg de la / la =- i numrul de pai ,un
numr ntreg de la / la /###-, separate prin spa'iu.
utput
Unica linie a fiierul de ieire va con'ine dou numere ntregi X i Y separate prin spa'iu
coordonatele punctului n care este ascuns comoara.
!"emple
Comoara.in comoara.out
$
! %
% !
! !
% %
& '
( !
% '
!
" !#
-!# !#
$e#olvare
Program comori;
)ar
*,+:integer;
,,-:-ongint;
.,/:-ongint;
0egin
1ssign(*nput,2comori.in2);
3eset(*nput);
3ead(+);
.:=#; /:=#; 45ixarea po6itiei initiale7
8or *:=! 9o + ,o
0egin 4modelarea deplasarii con5orm instructiilor7
3ead(,,-);
case , o5
!: /:=/+-; 4 deplasare spre nord cu - pasi7
': begin .:=.+-; /:=/+-; end; 4 deplasare spre nord - est cu - pasi7
%: .:=.+-; 4 deplasare spre est cu - pasi7
:: begin .:=.+-; /:=/--; end; 4 deplasare spre sud - est cu - pasi7
&: /:=/--; 4 deplasare spre sud cu - pasi7
$: begin .:=.--; /:=/--; end; 4 deplasare spre sud - vest cu - pasi7
(: .:=.--; 4 deplasare spre vest cu - pasi7
": begin .:=.--; /:=/+-; end; 4 deplasare spre nord - vest cu - pasi7
;nd;
;nd;
<lose(*nput);
1ssign(=utput,2comori.out2);
3e>rite(=utput);
?rite(.,2 2,/);
<lose(=utput);
;nd.
1.4.2 #o$otul de%ectat
n urma unei lovituri de meteorit sistemul de comand al unui robot care se deplaseaz pe
suprafa'a planetei >arte a fost deteriorat. )obotul continu s primeasc instruc'iuni, dar le
interpreteaz n felul su. 6iecare instruc'iune este un set din trei numere ,u,vx,vy- ntregi,
pozitive. ac valoarea u I <#, atunci robotul se deplaseaz cu vx dup axa #F i cu vy dup axa
#G. ac, ns u H <#, atunci robotul se deplaseaz pe un arc de mrime u mpotriva acelor de
ceasornic a circumferin'ei cu centrul n punctul ,vx,vy-. ,des.A- )aza circumferin'ei este
segmentul care unete robotul cu centrul ei.
Cerin
*crie'i un program, care dup
coordonatele ini'iale ale robotului i un
set dat de instruc'iuni determin
punctul final, n care este pozi'ionat
robotul.
Input
Prima linie a fiierului de intrare
con'ine dou numere ntregi
coordonatele ini'iale ale robotului.
Urmtoarele linii con'ii c!te o
instruc'iune, format din trei numere
ntregi, separate prin spa'iu.
utput
Unica linie a fiierul de ieire va
con'ine dou numere X i Y separate prin
spa'iu coordonatele punctului n care se
afl robotul defectat, indicate cu cel pu'in
@ cifre dup virgul.
!"emplu
Robot.in (desen) Robot.out
% '
!%# : !
:& ! (
@! # %
$# # $
-#.$&% !&.$@(
$e#olvare
program trans5ormari;
const pi=%.!:!&@';
type point=record
x,y : real;
end;
var
P: point;
al5a:real;
xn,yn:real;
5,g:text;
procedure move(var P:point; vx,vy:real);
begin
P.x:=P.x+vx;
P.y:=P.y+vy;
end;
procedure rotate (var P:point; u,vx,vy:real);
var old:point;
begin
old:=P;
P.x:=vx+(old.x-vx)*cos(u*pi!"#)-(old.y-vy)*sin(u*pi!"#);
P.y:=vy +(old.x-vx)*sin(u*pi!"#)+(old.y-vy)*cos(u*pi!"#);
end;
begin
assign(5,2robot.in2);
reset(5);
assign(g,2rob.out2);
re>rite(g);
readln(5,P.x,P.y);
>Aile not eo5(5) do
begin
readln(5,al5a,xn,yn);
i5 al5aB@# tAen move(P,xn,yn) else rotate(P,al5a,xn,yn);
end;
>riteln(g,P.x:!#:%,2 2,P.y:!#:%);
close(g);
end.
%iblio&rafie
/. 1. 1adar .a. 1ulegere de probleme i programe Pascal, ;ucureti, Petrion, /<<=.
". J..6oleK, &. Landam, 6undamentals of interactive 1omputer 0raphics, Phillipines,
&ddison5MesleK, /<=A
@. Molfgang N. 0iloi :nteractive 1omputer 0raphics. ata structures, &lgorithms,
Eanguages. Prentice 9all :nc., OeP JerseK, /<D=
A. Q. RSTUV. WXYZTUZ[\U]^S_ `\Va\[bZ_ Z cVad]e[\b^S_ `bSfZcS ^S ghh. QVTciS,
jZ^Va, /<<D