Sunteți pe pagina 1din 10

Geometrie Computat, ională. Grupa Specială.

Neagu Alexandru
26 Februarie 2023

1 Geometrie 2D
Cea mai importantă not, iune atunci când rezolvăm probleme de geometrie computat, ională
sunt, fără doar s, i poate, vectorii. Atunci când vorbim despre vectori, contează foarte
mult punctul de referint, ă pe care ı̂l considerăm. De exemplu, dacă considerăm orig-
inea O = (0, 0) ca punct de referint, ă, atunci fiecare punct p = (x, y) din plan poate fi
echivalent definit de vectorul p⃗ = (x, y). Folosind interpretarea vectorială, operat, iile
precum rotat, ia, translat, ia s, i aflarea anumitor unghiuri sunt mult mai intuitive.

O idee foarte utilă ı̂n geometria computat, ională este că, indiferent de punctul de
referint, ă pe care dorim să ı̂l considerăm, putem abstractiza totul raportându-ne la
origine. De exemplu, fie că avem două puncte ı̂n plan a = (x1 , y1 ) s, i b = (x2 , y2 ).
Folosind, notat, iile s, i operat, iile vectoriale, este foarte us, or să răspundem la următoarea
ı̂ntrebare: Dacă am considera punctul a drept punctul de referint, ă, cum s-ar modifica
coordonatele punctului b? Răspunsul este surprinzător de simplu:
⃗b = ((x2 − x1 ), (y2 − y1 ))

Dacă aplicăm această transformare peste toate punctele din plan, observăm că punctul
a se transformă ı̂n (0, 0) iar toate celelalte puncte rezultate ı̂n urma transformării de
mai sus sunt amplasate fat, ă de (0, 0) exact cum erau amplasate punctele init, iale fat, ă
de a. Dacă privim din punct de vedere vectorial, aceste transformări capătă mult
mai mult sens, deoarece ı̂n fond, tot ce contează atunci când analizăm un punct din
perspectiva altui punct este direct, ia s, i distant, a. Astfel, raportându-ne la un punct,
putem vedea toate celelalte puncte ca nis, te vectori ce au aceeas, i origine. O imagine
mai clară a procesului este prezentată mai jos:

Figure 1: Exemplu de reprezentare vectorială

O astfel de reducere este, deseori, crucială ı̂n problemele de geometrie computat, ională,
deoarece putem să ne folosim de proprietăt, i s, i identităt, i utile din algebra liniară.

1.1 Dot Product


O operat, ie importantă din algebra liniară este produsul scalar (dot product). Pro-
dusul scalar a doi vectori ⃗v = (x1 , y1 ) s, i w
⃗ = (x2 , y2 ) este definit geometric ı̂n felul
următor:
1) ⃗v · w
⃗ = ∥v∥∥w∥ cos (θ)
• ∥a∥ - semnifică
p norma (lungimea) vectorului ⃗a. Mai concret, dacă ⃗a = (x, y),
atunci ∥a∥ = x2 + y 2 .

1
• θ - semnifică unghiul care se formează ı̂ntre cei doi vectori. Trebuie de precizat
că un unghi poate fi pozitiv sau negativ, conform direct, iei sale de rotat, ie. Dacă
unghiul este ı̂n sens trigonometric (anticlockwise), el este pozitiv, in caz contrar
este negativ. Un exemplu care ilustrază acest lucru este afis, at mai jos.

Figure 2: Unghiuri pozitive/negative

Am ment, ionat acest lucru deoarece, chiar dacă ı̂n acest caz funct, ia cos este
simetrică, cel mai des ı̂n abordarea problemelor de geometrie computat, ională
este ales următorul domeniu de valori: θ ∈ [−π, π]).
• Datorită proprietăt, ii cos (θ) = cos (−θ), conchidem că ⃗v · w ⃗ · ⃗v .
⃗ =w
Fascinant este că, produsul scalar a vectorilor ⃗v = (x1 , y1 ) s, i w
⃗ = (x2 , y2 ) poate fi
calculat s, i după formula
2) ⃗v · w
⃗ = x1 x2 + y1 y2
Bineı̂nt, eles, putem egala proprietăt, ile 1) s, i 2) s, i să utilizăm produsul scalar ı̂n următoarele
scopuri:
1. Stabilirea unghiului θ dintre vectorii ⃗v s, i w
⃗ prin următoarea formulă:
  !
⃗v · w
⃗ x1 x2 + y1 y2
arccos = arccos p 2
∥v∥∥w∥ (x1 + y12 )(x22 + y22 )

Atent, ie, domeniul de valori al funct, iei arccos este [0, π], deci unghiul returnat
va fi mereu pozitiv, net, inându-se cont de sensul trigonometric unghiului.

2. Stabilirea tipului de unghi dintre vectori :


(a) ⃗v · w
⃗ > 0 ⇒ Unghi Ascut, it
(b) ⃗v · w
⃗ = 0 ⇒ Unghi Drept
(c) ⃗v · w
⃗ < 0 ⇒ Unghi Obtuz

1.2 Cross Product


Cea mai des utilizată operat, ie ı̂n practică din algebra liniară este produsul vectorial
(cross product). Produsul vectorial a doi vectori ⃗v = (x1 , y1 ) s, i w
⃗ = (x2 , y2 ) este definit
geometric ı̂n felul următor:

3) ⃗v × w
⃗ = ∥v∥∥w∥ sin (θ)

Norma unui vector ∥⃗a∥ s, i unghiul θ sunt definite exact ca ı̂n cazul produsului scalar.
Există totus, i o diferent, ă crucială: Funct, ia sin nu este simetrică, prin urmare obt, inem
că sin (−θ) = − sin (θ). Astfel, semnul unghiului θ influent, ează direct semnul produsu-
lui vectorial.

2
La fel ca ı̂n cazul produsului scalar, putem calcula produsul vectorial al vectorilor
⃗v = (x1 , y1 ) s, i w
⃗ = (x2 , y2 ) folosind o formulă mult mai simplă:

4) ⃗v × w
⃗ = x1 y2 − x2 y1

Din nou, putem pune cap la cap proprietăt, ile 3) s, i 4) s, i să folosim produsul vectorial
ı̂n următorul scop:
1. Semnul produsului vectorial ne comunică direct s, i semnul unghiului θ, astfel
obsevăm că
(a) ⃗v × w
⃗ < 0 ⇒ sin (θ) < 0 ⇒ θ ∈ (−π, 0) ⇒ w ⃗ este orientat ı̂n sens anti-
trigonometric (clockwise) fat, ă de ⃗v . Intuitiv, mai putem spune că vectorul
w
⃗ este orientat ”la dreapta” lui ⃗v .
(b) ⃗v × w
⃗ = 0 ⇒ sin (θ) = 0 ⇒ θ ∈ {0, π} ⇒ vectorii ⃗v s, i w
⃗ sunt coliniari.
(c) ⃗v × w⃗ > 0 ⇒ sin (θ) > 0 ⇒ θ ∈ (0, π) ⇒ w ⃗ este orientat ı̂n sens trigono-
metric (anticlockwise) fat, ă de ⃗v . Intuitiv, mai putem spune că vectorul w⃗
este orientat ”la stânga” lui ⃗v .

Figure 3: O reprezentare grafică a cazurilor

2. Orice pereche de vectori necoliniari ⃗v s, i w


⃗ pot forma un triunghi ı̂n felul următor

Figure 4: Triunghiul format de doi vectori

S, tim deja din geometria plană că aria unui asemenea triunghi poate fi calculată
conform formulei:
1
5) A = ∥⃗v ∥∥w∥ ⃗ sin (θ)
2
Dacă punem cap la cap formulele 3) s, i 5) obt, inem că
1
6) A = |⃗v × w|

2
Din motiv că facem abstract, ie de orientarea celor doi vectori atunci când cal-
culăm aria triunghiului, considerăm valoarea absolută a produsului vectorial!

Dacă nu am lua valoarea absolută a produsului vectorial, am obt, ine o valoare


ı̂ntreagă pentru arie a cărei semn depinde exclusiv de orientarea (trigonomet-
rică sau anti-trigonometrică) a vectorului w
⃗ fat, ă de vectorul ⃗v . Defapt, această
proprietate a ariei cu semn este crucială atunci când calculăm aria unui poligon
cu un număr oarecare de laturi.

3
1.3 Rotat, ii de coordonate
Avem nevoie deseori să rotim ı̂n jurul originii un vector P⃗ = (x, y) cu un anumit unghi
α ∈ (−π, π]. Defapt, putem roti un punct ı̂n jurul oricărui alt punct dacă facem trans-
formarea de coordonate descrisă ı̂n sect, iunea 1.

Pentru realizarea s, i ı̂nt, elegerea acestui procedeu, putem să vizualizăm punctul P⃗ drept
un număr complex x+yi. Dacă analizăm teoria numerelor complexe, facem următoarea
observat, ie:
• Fie ⃗a = x1 + y1 i s, i ⃗b = x2 + y2 i două numere complexe oarecare. Aceste numere
pot fi rescrise ı̂n formă polară astfel: ⃗a = r1 (cos α+i sin α) s, i ⃗b = r2 (cos ϕ+i sin ϕ)
• Dacă analizăm produsul celor două numere complexe scrise ı̂n formă polară,
obt, inem următorul rezultat
⃗a ∗ ⃗b = r1 r2 (cos (α + ϕ) + i sin (α + ϕ))
Argumentele ambelor numere complexe se adună iar razele se ı̂nmult, esc. Bineı̂nt, eles,
acelas, i rezultat ı̂l putem obt, ine s, i dacă ı̂nmult, im numerele complexe scrise ı̂n
formă normală, clasic.

Figure 5: Înmult, irea a două numere complexe

• Analizând bine această proprietate, putem să tragem următoarea concluzie: Pen-
tru a roti vectorul P⃗ = (x, y) cu unghiul α ı̂n jurul originii este suficient să facem
următorul calcul:
(x + yi) ∗ (cos α + i sin α) =
x cos α + xi sin α + yi cos α + i2 y sin α) =
(x cos α − y sin α) + i(x sin α + y cos α)
Astfel, am reus, it intuitiv să arătăm că vectorul P⃗ = (x, y) rotit cu unghiul α rezultă
vectorul P⃗ ′ = (x cos α − y sin α, x sin α + y cos α).

1.4 Sortare polară


Un concept foarte util s, i des ı̂ntâlnit ı̂n practică (ı̂n special ı̂n problemele care necesită
two pointers de tip rotating calipers). Imaginat, i-vă că avem o multitudine de vectori
ı̂n jurul originii s, i ne dorim să ı̂i sortăm circular ı̂n felul următor:

Figure 6: O posibilă sortare a vectorilor

4
Cu alte cuvinte, trebuie să sortăm eficient vectorii ı̂n funct, ie de unghiul (cu semn)
pe care aces, tia ı̂i formează cu axa Ox. În desenul de  mai sus, am dori să sortăm
prioritizând unghiurile ı̂n felul următor − π2 , − π2 + 2π . Cum putem face acest lucru
eficient? O primă idee ar fi să comparăm vectorii ⃗v s, i w ⃗ ı̂n funct, ie de produsul lor
vectorial. Dacă ⃗v × w ⃗ > 0, atunci ⃗v apare ı̂naintea lui w ⃗ ı̂n sortare. Din păcate,
această idee nu este completă. De exemplu, dacă ne uităm la J, ⃗ observăm că vectorul
⃗ ⃗ ⃗ ⃗
F ar trebui să apară după J ı̂n sortare, ı̂nsă J × F > 0! Problema cu ideea de mai
sus apare ı̂n momentul ı̂n care unghiul (antitrigonometric) ı̂ntre vectorul J⃗ s, i vectorul
X⃗ este mai mare decât π. Din cauza faptului că produsul vectorial interpretează
unghiurile ı̂n intervalul (−π, π], unghiul α ∈ (π, 2π) este interpretat ca α − 2π. Prin
urmare, acesta ı̂s, i schimbă semnul. Astfel, algoritmul de mai sus este corect doar dacă
unghiul ı̂n sens anti-trigonometric dintre cei doi vectori este mai mic decât π. Putem
corecta această problemă dacă ı̂mpărt, im planul ı̂n două jumătăt, i. Pentru exemplul
din imagine, putem defini:
1. Vectorii din prima jumătate sunt cei cu unghiurile ∈ [− π2 , π2 ) fat, ă de origine.
2. Vectorii din a doua jumătate ca fiind cei cu unghiurile ∈ [ π2 , 3π
2 ) fat, ă de origine.

Atunci când comparăm vectorii ⃗v s, i w,


⃗ verificăm ı̂ntâi dacă aces, tia fac sau nu parte
din aceeas, i jumătate.
• Dacă nu fac parte din aceeas, i jumătate, atunci prioritizăm vectorul din prima
jumătate. ⃗v < w
⃗ dacă s, i numai dacă ⃗v este ı̂n prima jumătate.
• Dacă fac parte din aceeas, i jumătate, spunem că ⃗v < w
⃗ dacă s, i numai dacă
⃗v × w
⃗ > 0.
Observăm că cele două jumătăt, i pot fi foarte us, or definite ı̂n cazul particular de mai
sus, astfel putem scrie următoarea funct, ie de comparare:

Figure 7: Supraı̂ncărcarea operatorului <

Bineı̂nt, eles, această implementare a sortării polare este corectă numai pentru cazul
particular ı̂n care ı̂ncepem sortarea ı̂ncepând cu unghiul − π2 . Totus, i, acest cod poate fi
adaptat indiferent care ar fi unghiul de start. Tot ce trebuie să modificăm este funct, iei
de ı̂ncadrare a vectorului ı̂n una dintre jumătăt, i.

1.5 Reprezentarea liniilor


Putem defini ı̂n mai multe feluri o linie:
1. Linia caracterizată ecuat, ia ax + by = c.
2. Linia caracterizată de două puncte A = (x1 , y1 ), B = (x2 , y2 ).

Obt, inerea interpretării geometrice


Putem să reprezentăm linia ı̂ntr-un mod mult mai us, or de folosit ı̂n practică, asociindu-i
un vector s, i o valoare caracteristică ı̂n felul următor:
1. Dacă linia este caracterizată de ecuat, ia ax + by = c, observăm că putem rescrie
această ecuat, ie ca (b, −a) × (x, y) = c. Astfel, putem spune că linia este carac-
terizată de vectorul ⃗v = (b, −a) s, i valoarea c. Astfel, putem spune că punctul
(x, y) apart, ine liniei, dacă s, i numai dacă ⃗v × (x, y) = c

5
2. Dacă linia este caracterizată de punctele A = (x1 , y1 ) s, i B = (x2 , y2 ), putem să
ı̂i asociem vectorul ⃗v = (x2 − x1 , y2 − y1 ), care este paralel cu linia. În acest caz
ı̂nsă, nu ne este foarte clar care este valoarea c care trebuie asociată linie astfel
ı̂ncât ⃗v × (x, y) = c dacă s, i numai dacă punctul (x, y) apart, ine liniei. S, tim ı̂nsă că
punctul A apart, ine cu sigurant, ă liniei, astfel putem calcula valoarea c = ⃗v × A.
Conform definit, iei, valoarea produsului vectorial rămâne constantă dacă (x, y) se
mis, că paralel cu ⃗v . Astfel, dacă ⃗v × (x, y) = c, atunci (x, y) este coliniar cu A.

Distant, a de la un punct la linie


În primul rând, pentru un punct (x, y) putem calcula valoarea side = ⃗v × (x, y) − c.
Conceptual, putem privi această valoare ca produsul vectorial dintre ⃗v s, i (x, y) dacă
⃗v ar fi translat ı̂n as, a fel ı̂ncât să fie coliniar cu linia. Bineı̂nt, eles, putem să deducem
orientarea (sus, jos) unui punct fat, ă de linie, ı̂n funct, ie de semnul lui side. De asemenea,
putem calcula distant, a de la un punct p = (x, y) la linie ı̂n felul următor:

|side|
dist =
∥v∥

Această formulă se deduce analizând ı̂n detaliu interpretarea geometrică a produsului


vectorial:

Figure 8: Interpretarea geometrică a produsului vectorial

|⃗
v ×w|

⃗ = ∥w∥
Bineı̂nt, eles, d⃗v (w) ⃗ sin θ = ∥v∥

Translarea liniei
Uneori poate apărea nevoia de a transla o linie conform unui vector ⃗t. Cu alte cuvinte,
am dori ca fiecare punct p = (x, y) cu proprietatea ⃗v × p = c să fie transformat ı̂n
p + ⃗t. Observăm că vectorul ⃗v va fi vectorul corespunzător liniei translate, deoarece va
rămâne paralel cu aceasta. Valoarea c ı̂n schimb se va modifica atunci când translăm
linia conform următorului rat, ionament:
Fie p = (x, y) un punct care apart, ine liniei init, iale (ı̂nainte de translat, ie). Ob-
servăm că p + ⃗t trebuie să apart, ină liniei după translat, ie, adică trebuie să se
satisfacă identitatea:

⃗v × (p + ⃗t) − c′ = 0 ⇔ c′ = ⃗v × p + ⃗v × ⃗t ⇔ c′ = c + ⃗v × ⃗t

Proiect, ia ortogonală a unui punct pe o linie


Proiect, ia ortogonală a punctului p pe linie, este un punctul p′ aflat pe linie, cel mai
aproapiat de p. Bineı̂nt, eles, segmentul [pp′ ] este perpendicular pe linie.

6
Figure 9: Proiect, ia ortogonală a punctului P pe linia l

Fie vectorul w,
⃗ perpendicular cu vectorul ⃗v corespunzător liniei l. Observăm că pentru
a găsi punctul p′ trebuie să găsim cel mai mic k astfel ı̂ncât p + k w
⃗ se află pe linia l
caracterizată de vectorul ⃗v s, i de valoarea c. Cu alte cuvinte, trebuie să găsim cel mai
mic k astfel ı̂ncât:
0 = ⃗v × (p + k w)
⃗ −c
= ⃗v × p + ⃗v × k w
⃗ −c
= (⃗v × p − c) + k(⃗v × w)

= (⃗v × p − c) + k∥v∥2
−(⃗
v ×p−c)
Astfel, observăm că k = ∥v∥2 . Prin urmare, proiect, ia ortogonală se calculeaază ı̂n
felul următor:
⃗ v × p − c)
w(⃗
p′ = p −
∥v∥2
⃗ efectuând o rotat, ie de coordonate la 90 de grade ( π2 radiani).
Putem obt, ine vectorul w
Am vorbit despre cum se poate face asta ı̂n sect, iunea 1.3.

2 Geometrie 3D
Tot ce t, ine de operat, iile elementare cu vectori este aproape la fel cu ce am ı̂ntâlnit la
geometria 2D. Singura diferent, ă este numărul de dimensiuni cu care operăm. În cazul
geometriei 3D, un punct P este reprezentat de 3 numere reale (x, y, z). Mici diferent, e
se găsesc ı̂n interpretarea produsului vectorial s, i scalar.

2.1 Dot Product


Produsul scalar (dot product) ı̂ntre vectorii ⃗v = (x1 , y1 , z1 ) s, i w
⃗ = (x2 , y2 , z2 ) este
definit exact ca ı̂n cazul geometriei 2D:

⃗v · w
⃗ = ∥⃗v ∥∥w∥
⃗ cos θ

Vizual, ne putem imagina că originea, ı̂mpreună cu cei doi vectori, formează un plan,
iar unghiul θ (ı̂ntre cei doi vectori) apart, ine acestui plan. Relat, iile dintre rezultatul
produsului scalar s, i tipul unghiului θ sunt exact aceleas, i ca s, i cele prezentate aici 2.
Bineı̂nt, eles, s, i ı̂n acest caz, produsul scalar mai poate fi calculat simplu, utilizând
următoarea formulă:
⃗v · w
⃗ = x1 x2 + y1 y2 + z1 z2

2.2 Cross Product


Produsul vectorial (cross product) ı̂ntre vectorii ⃗v = (x1 , y1 , z1 ) s, i w
⃗ = (x2 , y2 , z2 )
diferă un pic fat, ă de ce am văzut deja la geometria 2D. De data aceasta, rezultatul
produsul vectorial este un vector N ⃗ , perpendicular cu planul determinat. Acest
vector poate fi interpretat geometric ı̂n felul următor:

⃗v × w ⃗ = (∥v∥∥w∥ sin θ) ∗ ⃗n
⃗ =N

Simbolul ∗ utilizat ı̂n formula de mai sus semnifică ı̂nmult, irea unui vector cu un scalar.
De exemplu, dacă ı̂nmult, im valoarea c cu vectorul ⃗v = (x, y), obt, inem:

c ∗ (x, y) = (cx, cy)

7
Dacă analizăm un pic rezultatul produsului vectorial, observăm că acesta este foarte
similar cu ce obt, ineam ı̂n două dimensiuni. Putem să ne imaginăm acest rezultat
ca: un vector ⃗n scalat cu valoarea care se calculează ı̂n 2 dimensiuni. Singurul lucru
care rămâne de aflat este: ce este vectorul ⃗n? Vectorul ⃗n este un vector unitate
(lungimea egală cu 1) perpendicular cu ambii vectori ⃗v s, i w, ⃗ direct, ia căruia este
calculată conform regulii mâinii drepte. Folosind algebra liniară, produsul vectorial
poate fi calculat s, i cu ajutorul formulei:
⃗ = (y1 z2 − z1 y2 , z1 x2 − x1 z2 , x1 y2 − y1 x2 )
N

Figure 10: Reprezentare grafică a produsului vectorial ı̂n 3D

2.3 Combinarea produsului vectorial cu cel scalar


Putem combina cele două operat, ii importante pentru a rezolva următoarea prob-
lemă: Dându-se un vector ı̂n spat, iu p⃗ = (x3 , y3 , z3 ) s, i doi vectori ⃗v = (x1 , y1 , z1 ) s, i
w
⃗ = (x2 , y2 , z2 ), care este orientarea punctului P fat, ă de planul determinat de cei doi
vectori? Există trei orientări posibile, enunt, ate ı̂n următoarea imagine:

Figure 11: Orientarea vectorului P⃗S fat, ă de planul determinat de vectorii P⃗R s, i P⃗Q

Acest lucru poate fi simplu realizat, calculând valoarea

(⃗v × w)
⃗ · p⃗

⃗ · p⃗, unde N
Observăm că această formulă este echivalentă cu N ⃗ este un vector perpen-
dicular pe planul determinat de vectorii ⃗v s, i w.
⃗ Astfel, putem folosi această formulă
ca să determinăm tipul unghiului care se formează ı̂ntre o perpendiculară la plan s, i
vectorul p⃗. Astfel:
• Dacă (⃗v × w) ⃗ s, i
⃗ · p⃗ > 0, unghiul care se formează ı̂ntre perpendiculara la plan N
vectorul p⃗ este ascut, it, prin urmare vectorul p⃗ este orientat deasupra planului.

• Dacă (⃗v × w) ⃗ s, i
⃗ · p⃗ = 0, unghiul care se formează ı̂ntre perpendiculara la plan N
vectorul p⃗ este drept, prin urmare vectorul p⃗ este orientat pe planului.
• Dacă (⃗v × w) ⃗ s, i
⃗ · p⃗ < 0, unghiul care se formează ı̂ntre perpendiculara la plan N
vectorul p⃗ este obtuz, prin urmare vectorul p⃗ este orientat sub planului.

8
2.4 Reprezentarea Planelor
Putem defini un plan ı̂n următorul mod: Toate punctele (x, y, z) care satisfac ecuat, ia

ax + by + cz = d

Interpretarea geometrică a unui plan


Bineı̂nt, eles, formula descrisă mai sus este greu de utilizat ı̂n practică. Ideal ar fi să
descriem planul folosind operat, ii cu vectori, exact cum am procedat ı̂n cazul liniilor
ı̂n geometria 2D. Din fericire, un plan poate fi caracterizat de un vector ⃗n (despre care
s, tim sigur că este perpendicular cu planul deplasat ı̂n origine) s, i de un număr real d.
Astfel, am putea formula următoarea ecuat, ie de determinare a planului:

⃗n · (x, y, z) = d ⇔ x, y, z apart, ine planului

Ca s, i ı̂n cazul liniilor, ne imaginăm că planul nostru este translat ı̂n as, a fel ı̂ncât trece
prin origine. Din acest motiv, folosind formula ⃗n · (x, y, z) putem să vedem testăm
apartenent, a unui punct la planul care trece prin origine. Valoarea d ne spune practic,
cu cât trebuie să translăm planul astfel ı̂ncât acesta să revină la starea init, ială (paralelă
cu originea). Astfel, putem efectua următoarele transformări:
1. Dacă ne este dată ecuat, ia planului ax + by + cz = d, putem considera ⃗n = (a, b, c)
s, i valoarea d dată ı̂n ecuat, ie. Este demonstrabil că ⃗n este perpendicular cu planul.

2. Dacă ne sunt date trei puncte (necoliniare) P , Q, R s, i dorim să formulăm ecuat, ia
planului determinat de aceste puncte putem proceda ı̂n felul următor:
• Extragem vectorii P⃗Q s, i P⃗R as, a cum am discutat ı̂n sect, iunea 1.
• Observăm că ambii vectori sunt paraleli cu planul, astfel ei determină un
plan paralel cu planul init, ial.
• Putem determina un vector ⃗n perpendicular cu acest plan utilizând produsul
vectorial P⃗Q × P⃗R
• S, tim că punctul P apart, ine sigur planului, astfel putem afla valoarea lui d
folosind formula ⃗n · P .
• Prin urmare, ecuat, ia ⃗n · (x, y) = d determină planul format de cele 3 puncte.

Distant, a de la un punct la plan


Distant, a de la un punct p la un plan determinat de vectorul ⃗n s, i valoarea d se calculează
ı̂n felul următor:
• Se calculează valoarea side = ⃗n · p − d.

• Folosind rat, ionamente similare cu cele pe care le-am dedus la geometria 2D,
putem deduce că formula de calcul a distant, ei este următoarea:

|side|
dist =
∥⃗n∥

3 Probleme Us, oare


3.1 Polygon Area
Link Problemă: https://cses.fi/problemset/task/2191
Link Solut, ie: https://pastebin.com/WMMmtFm8

3.2 Point Location Test


Link Problemă: https://cses.fi/problemset/task/2189
Link Solut, ie: https://pastebin.com/z9hKx0UF

9
3.3 Convex Hull
Link Problemă: https://cses.fi/problemset/task/2195/
Link Solut, ie: https://pastebin.com/Yw3X6LHd

4 Probleme Medii
4.1 Norocoase
Link Problemă: https://www.infoarena.ro/problema/norocoase
Link Solut, ie: https://www.infoarena.ro/job_detail/2977490?action=view-source

4.2 Geometrie
Link Problemă: https://www.infoarena.ro/problema/geometrie
Link Solut, ie: https://www.infoarena.ro/job_detail/2977169?action=view-source

5 Probleme Mai Grele


5.1 Birthday Cake (SEERC 2022)
Link Problemă: https://codeforces.com/gym/104114/problem/B
Link Solut, ie: https://pastebin.com/Q9DqgyLy

6 Alte Probleme
• Robot Arm
• Hongcow Draws a Circle

References
[1] Resurse De Anul Trecut.
https://profs.info.uaic.ro/~infogim/2021/lectii/1112/18%20geometrie.
pdf
[2] Victor Lecomte. Handbook of geometry for competitive programmers.
https://victorlecomte.com/cp-geo.pdf
[3] Al. Cash. Geometry: 2D points and lines [Tutorial].
https://codeforces.com/blog/entry/48122

[4] Wikipedia. Cross Product.


https://en.wikipedia.org/wiki/Cross_product

10

S-ar putea să vă placă și