Sunteți pe pagina 1din 14

Într-un sistem de coordonate cartezian definit pe planul triunghiului și coordonează vârful unui alt punct.

Identificarea dacă acest punct al triunghiului .


Restricții : Coordonatele nodurilor - întregi , pentru orice centrare punct
următoarele condiții: -10,000 < x , y < 10 000 1 timp .
Intrare dintr-un fișier tria-pt.in . In patru linii sunt o pereche de numere - coordonatele
puncte. Numerele din primele trei linii - coordonatele vârfurile triunghiului ,
în al patrulea rând - coordonatele punctului de încercare .
Ieșire la dosar tria - pt.out . Ia cuvântul în , dacă punctul este în interiorul triunghiului
nickname sau Out - dacă afară .

Opțiunea 1

Ecuația de o linie de forma Ax + By + C = 0 are următoarea proprietate. dacă

se substituie coordonatele punctelor care aparțin acestei linii, atunci se va transforma într-o
identitate. Dacă luați un punct de una dintre semiplanurile, care împarte linia avionul, atunci
inegalitatea Ax + By + C <0, iar în cazul în care de la

de altă parte - atunci Ax + By + C> 0. Asta este, dacă există o astfel de ecuație liniară și coordonatele a
două puncte, este foarte ușor să știi dacă aceste puncte într-o singură jumătate de plan cu privire la
această linie sau diferite.

Luați în considerare ecuația de trei linii care trec prin două vârfuri ale triunghiului. Dacă toate cele
trei linii punct date se află în aceeași jumătate de plan care

iar al treilea vârful triunghiului (care nu trece prin linia), apoi aparține triunghiul.

Detalii de implementare:

• Atenție la faptul că ar trebui să se răspundă, în cazul în care punctul de se află pe granița

triunghi. În starea răspunde în mod explicit nu este, dar ar trebui să acorde o atenție la exemplele.
Într-un astfel de caz este considerat.

• Cel mai bine este să ne amintim ecuația liniei trece prin două puncte

Conversia se la o formă Ax + By + C = 0 este ușor.

• cel mai des întâlnite în rezolvarea acestei probleme este o greșeală

utilizarea de tipuri de date nepotrivite. Am văzut că, în datele inițiale

limiteze la 10 000, - și a decis să folosească întreg. B s-a descris al-

Algoritmul prin substituirea termeni cu astfel de coordonate în ecuația liniei

Devine o valoare care se măsoară în sute de milioane. Și nici variabile indiferent

TION de ce tip sunt alocate și atribuite deloc - tipul de intermediari

media rezultatelor - de cele mai multe tipuri de operanzi. Deci, dacă vă înmulțiți
100 antrenament 1

o variabila de tip viu i nteger, care conține 10 000 de la aceeași secundă,

apoi răspunsul corect nu este primit, pentru că valoarea exactă a acestor derivați

comportament nu este un tip valid i nteger. La cel mai bine

învăța o eroare a primit o "eroare Runtime» răspuns - timp de eroare efectuate

TION. Dar aceasta este numai dacă vom aplica directiva {$ R +, Q +}. În cel mai rău caz,

veți primi răspunsuri «Răspuns greșit» - răspuns greșit și să ne gândim că ideea de

decizia ta este greșită, în timp ce doar punerea în aplicare incorectă.

Una dintre cele mai bune moduri de a face acest lucru - la începutul exemple de programe

scrie

tip

întreg = longint;

Acest lucru va permite programului să folosească întreg cuvânt, adică tipul de

1ongint. Uneori, totuși, necesită exact tip întreg - de exemplu, pentru a treia procedură parametru
Val. În acest context, ar trebui să fie sistem de scriere.

număr întreg în loc de număr întreg.

• Numai în matematică pot scrie liber A • B <0 pentru a indica

că o număr este pozitiv, iar al doilea - negativ. Scrierea unui program în Pascal, trebuie să se
gândească cu atenție dacă a fi reprezentat de valoarea lui h • Într-un maxim de tipurile A și B.

Să presupunem, de exemplu, L12h V12u + + C1> 2 = 0 - ecuația de linia care trece prin primul și al
doilea punct (x3, y3) - coordonatele treia

noduri ale triunghiului, și (x0, y0) - coordonatele unui punct aparținând

care este necesar să se definească un triunghi. Luați în considerare dacă puteți înregistra ca puncte
nu se află pe părțile opuse ale liniei, după cum urmează: (A,, 2 * s + V12Uz + C1,2) O4i, 2 * o + Vi2u0 +
Clf2)> 0.

Sub rezerva constrângerilor impuse de problemă (valorile coordonatelor nu depășesc

10000) valoarea fiecăruia dintre acești factori (Li2h3 + Cu2 + V12u3 și Au 2xQ + + Bu2yQ

{2 + C) poate fi de până la câteva sute de milioane de euro. Evident, munca lor nu pot fi reprezentate
de un longint tip de număr. Prin urmare, este necesar sau
utiliza un tip real pentru a stoca coordonatele de puncte și coeficienți, sau de a folosi un longint tip,
dar refuză să folosească multiplicare

în scopul de a verifica că punctele nu se află pe părțile opuse ale liniei.

• În soluția descrisă realizează puțin calcul. Prin urmare, este mai bine pentru a pune încercare: {$ R
+, Q +}. Lucrați ei nu va fi lentă, iar daca îneca

afla despre asta.

• Atenție la ceea ce doriți să afisat. În sarcini Olimpiada doriți să arătați exact ceea ce este menționat
în declarația. Cu o scrisoare de capital?

Există un punct la sfârșitul anului? Toate acestea sunt foarte importante.


Varianta 2

Opțiunea 2

În cazul în care punctul D este situat în interiorul triunghiului ABC, sau la limita, suma de

zone ale triunghiurilor ABD, BCD și CAD egal cu aria unui triunghi LBS, și dacă este - cantitatea de
spațiu mai.

În general, această abordare nu este bun, deoarece zona a triunghiului, acesta noduri sunt
coordonatele reale, se obține o aproximative, și, prin urmare, chiar dacă punctul este în interiorul
triunghiului, suma pătratelor

triunghiuri ABD, BCD și CAD poate fi un pic, nu coincide cu aria triunghiului ABC.

Pentru coordonatele întregi de puncte, totul este mult mai bine. Zona de un triunghi cu noduri la
punctele cu coordonatele întregi pot fi găsite
și a reprezentat exact în calculator. Faptul că ea este - o jumătate de număr întreg, care este,

sau ea însăși este un număr întreg, sau un număr întreg este dublul valorii.

Demonstrăm o zonă semi-întreg. Înscrie un triunghi în dreptunghiul minim cu laturile paralele cu


axele de coordonate. Zona de un dreptunghi este egală cu suma de aria triunghiului original și mai
multe dreptunghiular

triunghiuri. Evident, aria unui dreptunghi cu vârfurile în punctele cu coordonate întregi - un număr
întreg. O zonă dreptunghiulară a fiecărui

Triunghiul - jumătate-întreg (întreg înălțimea produsul pe toata baza

împărțire în două).

Deci, este posibil, în nici un mod de a găsi în zona celor patru triunghiuri, fiecare dintre ele înmulțit cu
2, rotunjită la cel mai apropiat număr întreg pentru întreaga

Numerele pentru a verifica egalitate.

Detalii de implementare:

• Cel mai simplu de a găsi formula zona de triunghi de două ori coordonatele noduri, - abs ((x2-xl) *
(y3-il) - (x3-xl) * (y2-il)). Poluchaetsyaonaiz

unitate de produs vector


Opțiunea 3
Soluția de rezolvare găsit Catherine Grozin și Fyodor Menșikov.

În cazul în care punctul de apartine toate cele trei colțuri ale triunghiului, aparține triunghiul. La
punctul D a fost dominată treugolnikuLBS, este suficient să se întindă

în interiorul unghiurilor BAC, ABC și ACB (fig. P1.1).

Ugluekvivalentna Accesorii accesoriu două jumătăți de avioane, care este,

a punctului D este în interiorul unghiului ABC și apoi numai dacă acesta se află în același plan cu
jumătate raport cu linia punctului C AB, și unul pe jumătate

Și punctul de legătură cu linia BC.

Dacă această proprietate este utilizat direct, veți obține de două ori versiunea 1.

este necesară pentru a dovedi următoarea afirmație: pentru accesorii litera

triunghi destul l aprovizionarea cu oricare două unghiuri ale unui triunghi.

Într-adevăr, dacă luăm două unghiuri, în conformitate cu această proprietate, aparținând două
unghiuri consumabile echivalente toate cele trei semiplanurile

Opțiunea 1.

Reducerea numărului de colțuri avut trei la doi, pentru că în descrisă

altă decizie este foarte incomod unghi de triunghi> 120 °. Deoarece suma unghiurilor unui triunghi
este de 180 °, cele două unghiuri de> 1200 nu poate fi. Astfel, în triunghiul are două unghiuri <120 °.

Apartenența punctul D colț ABC <120 ° poate fi definită după cum urmează:

unghiul Abd să nu depășească valoarea unghiului ABC, iar unghiul CBD nu este

depăși BAT fragil cantitate. Rețineți că NATO unghi> 120 °, acest

criteriu nu este îndeplinit (fig. P1.2).

Spectacole colțul din stânga <120 °, pentru toate cele patru puncte situate în apropiere de aceasta,

criteriu este îndeplinită. Chiar prezinta unghiul> 120 °, iar săgeata indică punctul D este unghiul
pentru care unghiurile ABD și CBD nu a depășit unghiul ABC.

Detalii de implementare:

• În primul rând, aveți nevoie pentru a determina dacă un punct nu este același lucru ca și D, cu unele
dintre punctele

A, B, sau C. În cazul în care același - puteți vyvoditotvet. Faptul că, dacă există

coincidență, la primirea termenilor cosinus ale produsului scalar de vectori (a se vedea. de mai jos) va
nanol diviziune, astfel încât, în caz de coincidență mai bine
exclude în avans.

• cosinus de unghiul dintre cei doi vectori pot fi găsite după cum urmează:

lenl: = sqrt (sqr (DXL) + sqr (Dyl));

len2: = sqrt (sqr (DX2) + sqr (dy2));

Cosa: = (DXL * DX2 + Dyl * dy2) / (lenl * len2):

• Compararea unghiurilor de 0-180 °, și <P, echivalentul a peste ambianta de aceste unghiuri cu


ordinea schimbare: cos P <cos o.

• Nu puteți da seama care dintre unghiurile unui triunghi> 120 °. Dacă unghiul de> 120 °, atunci

unele puncte care nu aparțin colț, metoda descrisă mai sus va fi considerată

aparțin, dar nu un punct aparținând lovitura de colț, ea nu va

presupune a fi deținute. Prin urmare, punctul de trecut accidental prin criteriul

acest unghi va fi proiectat pentru celelalte două formule unghiul <120 °.


Opțiunea 4

Soluție propusă Evgeny Belov.

Dacă punctul este în interiorul triunghiului, suma unghiurilor la care

Se poate observa de mână, este 2n. În cazul în care punctul de este în afara triunghiului, atunci

Suma este mai mică de 2n.

Detalii de implementare:

• Ca și în opțiunea 3, ar trebui să iarba imediat cazul în care punctul de măsurare

coincide cu una dintre varfurile triunghiului, altfel în cele de mai sus

decizie va diviza și mai mult de zero. În cazul în care punctul de află la granița triunghiului,
următoarea formulă va da răspunsul corect.

• Găsirea cosinusul unghiului dintre vectorii -. A se vedea opțiunea 3. necesită

pe cosinusul unghiului și încă găsi unghiul sine. În Turbo Pascal nu arccos funcționale,

doar arctg, este posibil să se obțină un unghi daca stii tangentă sale.

Pentru a utiliza arctg, găsi tangenta prin cosinusul: tg = o -, păcatul o = VL - cos2 o. Adică, dacă x este
egal cu cosinusul unghiului, unghiul

Cosa

mozhnopoluchitpoformuleags1ap ^ g1A - sqr (x)) / x).

Folosind funcția arctg, trebuie să păstrați mereu în vedere faptul că acesta revine

f n n}

valoare în intervalul ~ ^> 7J "• În cazul de a găsi unghiul de la 0 la n astfel de valori

Off necesitatea de a ajusta. Unghi pozitiv nu ar trebui să fie schimbat, și aveți nevoie pentru a adăuga
la n negativ.

Dacă cosinusul este zero, atunci înlocui această valoare în formula de mai sus nu poate fi - se va
împărți la zero. Acest caz ar trebui să fie luate în considerare separat - în cazul în care cosinusul este
zero, unghiul în acest caz este egală cu / 2.

Valoarea obținută a cosinusul pot fi ușor diferite de valorile exacte.

Pentru formula de mai sus este case critic, când, de fapt,

cosinus trebuie să fie de 1 (unghi 0), sau -1 (unghi I), și se pare că modulo un pic mai mult decât 1.
Prin substituirea această valoare în formula va

eroare de calcul rădăcina unui număr negativ. Prin urmare, cazurile x> l și x <-l
ar trebui să fie luate în considerare separat.

• Pe bune computing este cel mai bine să utilizați un tip adevărat

cu acuratețe maximă - pentru Turbo Pascal se prelungește. Pentru minim

TION schimbă programul care utilizează tipul de reale, aveți nevoie pentru a scrie la început:

{$ N +, E}

tip

reală = extinsă;

Daca nu scrie directiva va fi emis o eroare de compilare.

• Așa cum sa menționat deja, valorile reale obținute inexacte, astfel încât să nu se poate compara
suma unghiurilor cu 2 * pi folosind operatorul =. pentru

scrie:

dacă abs (+ a2 + al AS - 2 * pi) <epsilon atunci

writeln ('in')

Valoarea Epsilon este aleasă astfel încât eroarea la calcularea sumei de carbon

Cristale să nu depășească această valoare. Pentru tipul reală eventuală eroare

le-6, pentru tipul de eroare extinse le-18 (obținută experimental obaznacheniya).


Soluție propusă muzicieni Jaroslav.

-Z coordonate (applicate) produs vector de vectori situate la

ploskostixOy egal (x2 X \) (Uz ~ Y \) = (xs ~ X \) (V2 ~ Y \)> are următorul text

proprietate: dacă unghiul de rotație al primului vector a doua este de la 0 la 180 °

sensul acelor de ceasornic, are același semn, iar dacă, din contră, de la 0 la 180 ° în sens antiorar,
opusă semnului. Când vectori sunt coliniari, Z-coordonate

este egal cu 0.

Ideea unor astfel de soluții. Dacă porniți toți vectorii DA - ^ DB> DB - ^ DC> DC - ^ DA

(A se vedea. fig. P1.1) sau sensul acelor de ceasornic orar sau invers, punctul de tratament

tains interiorul triunghiului, iar în cazul în care există două tranziții: unul sensul acelor de ceasornic,
iar a doua

Roy - împotriva, punctul este triunghiul.

Astfel, necesitatea de a găsi trei numere: Z-coordonate ale produselor vectoriale

[HAP Db], [D &, DTJ], [/ Jt, Dh]. Dacă printre ei sunt atât pozitive, cât și negative

punct TION este în afara triunghiului, altfel - interior.

Situația în care punctul este pe partea triunghi sau un nod,

construcții nu este. În cazul în care punctul coincide cu vârful celor două numere sunt egale cu trei

zero. Dacă punctul se află pe linia dreaptă care trece prin partea de unul dintre cele trei numere

va fi zero.

Detalii de implementare: a se vedea comentariile la opțiunea 1 de tipurile de date.

și inspecții.

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