Construiți un pătrat de 6 folosind o busolă. Cum se construiește un hexagon obișnuit. Cercul circumscris și construcție

Tema poligoanelor este acoperită în programa școlară, dar nu i se acordă suficientă atenție. Între timp, este interesant și acest lucru este valabil mai ales pentru un hexagon sau un hexagon obișnuit - la urma urmei, multe obiecte naturale au această formă. Acestea includ faguri și multe altele. Această formă funcționează foarte bine în practică.

Definiție și construcție

Un hexagon obișnuit este o figură plană care are șase laturi de lungime egală și același număr de unghiuri egale.

Dacă ne amintim formula pentru suma unghiurilor unui poligon

rezultă că în această cifră este egal cu 720°. Ei bine, deoarece toate unghiurile figurii sunt egale, nu este greu de calculat că fiecare dintre ele este egal cu 120°.

Desenarea unui hexagon este foarte simplă; tot ce aveți nevoie este o busolă și o riglă.

Instrucțiunile pas cu pas vor arăta astfel:

Dacă doriți, puteți face fără o linie desenând cinci cercuri de rază egală.

Cifra astfel obținută va fi un hexagon obișnuit, iar acest lucru poate fi demonstrat mai jos.

Proprietățile sunt simple și interesante

Pentru a înțelege proprietățile unui hexagon obișnuit, este logic să îl împărțim în șase triunghiuri:

Acest lucru va ajuta pe viitor să-și afișeze mai clar proprietățile, dintre care principalele sunt:

  1. diametrul cercului circumscris;
  2. diametrul cercului înscris;
  3. pătrat;
  4. perimetru.

Cercul circumscris și construcție

Un cerc poate fi descris în jurul unui hexagon și numai unul. Deoarece această cifră este obișnuită, o puteți face destul de simplu: trageți o bisectoare din două colțuri adiacente în interior. Se intersectează în punctul O, iar împreună cu latura dintre ele formează un triunghi.

Unghiurile dintre latura hexagonului și bisectoare vor fi de 60°, așa că putem spune cu siguranță că un triunghi, de exemplu, AOB, este isoscel. Și din moment ce al treilea unghi va fi, de asemenea, egal cu 60°, este și echilateral. Rezultă că segmentele OA și OB sunt egale, ceea ce înseamnă că pot servi drept raza unui cerc.

După aceasta, puteți să vă deplasați în partea următoare și, de asemenea, să desenați o bisectoare din unghiul din punctul C. Rezultatul va fi un alt triunghi echilateral, iar latura AB va fi comună ambelor, iar OS va fi următoarea rază prin care trece același cerc. Vor fi șase astfel de triunghiuri în total și vor avea un vârf comun în punctul O. Se dovedește că va fi posibil să se descrie un cerc și există doar unul dintre ele, iar raza lui este egală cu latura lui hexagonul:

De aceea, este posibil să construiți această figură folosind o busolă și o riglă.

Ei bine, aria acestui cerc va fi standard:

Cerc înscris

Centrul cercului circumspectiv va coincide cu centrul cercului înscris. Pentru a verifica acest lucru, puteți desena perpendiculare din punctul O pe laturile hexagonului. Ele vor fi înălțimile triunghiurilor care alcătuiesc hexagonul. Și într-un triunghi isoscel, înălțimea este mediana față de latura pe care se sprijină. Astfel, această înălțime nu este altceva decât bisectoarea perpendiculară, care este raza cercului înscris.

Înălțimea unui triunghi echilateral se calculează simplu:

h²=а²-(а/2)²= а²3/4, h=а(√3)/2

Și deoarece R=a și r=h, se dovedește că

r=R(√3)/2.

Astfel, cercul trece prin centrele laturilor unui hexagon obișnuit.

Zona sa va fi:

S=3πa²/4,

adică trei sferturi din ceea ce este descris.

Perimetrul si zona

Totul este clar cu perimetrul, este suma lungimilor laturilor:

P=6a, sau P=6R

Dar aria va fi egală cu suma tuturor celor șase triunghiuri în care poate fi împărțit hexagonul. Deoarece aria unui triunghi este calculată ca jumătate din produsul bazei și al înălțimii, atunci:

S=6(а/2)(а(√3)/2)= 6а²(√3)/4=3а²(√3)/2 sau

S=3R²(√3)/2

Cei care doresc să calculeze această zonă prin raza cercului înscris pot face acest lucru:

S=3(2r/√3)²(√3)/2=r²(2√3)

Construcții distractive

Puteți potrivi un triunghi într-un hexagon, ale cărui laturi vor conecta vârfurile printr-unul:

Vor fi doi în total, iar suprapunerea lor va da Steaua lui David. Fiecare dintre aceste triunghiuri este echilateral. Acest lucru nu este greu de verificat. Dacă te uiți la partea AC, aceasta aparține la două triunghiuri simultan - BAC și AEC. Dacă în prima dintre ele AB = BC, iar unghiul dintre ele este de 120°, atunci fiecare dintre cele rămase va fi de 30°. De aici putem trage concluzii logice:

  1. Înălțimea ABC de la vârful B va fi egală cu jumătate din latura hexagonului, deoarece sin30°=1/2. Cei care doresc să verifice acest lucru pot fi sfătuiți să recalculeze folosind teorema lui Pitagora; aceasta se potrivește perfect aici.
  2. Latura AC va fi egală cu două raze ale cercului înscris, care se calculează din nou folosind aceeași teoremă. Adică AC=2(a(√3)/2)=a(√3).
  3. Triunghiurile ABC, CDE și AEF sunt egale în două laturi și unghiul dintre ele, iar de aici rezultă că laturile AC, CE și EA sunt egale.

Intersectându-se, triunghiurile formează un nou hexagon și este, de asemenea, regulat. Acest lucru este dovedit simplu:

Astfel, figura îndeplinește caracteristicile unui hexagon obișnuit - are șase laturi și unghiuri egale. Din egalitatea triunghiurilor de la vârfuri este ușor să deducem lungimea laturii noului hexagon:

d=a(√3)/3

Va fi, de asemenea, raza cercului descris în jurul lui. Raza înscrisă va fi jumătate din dimensiunea laturii unui hexagon mare, ceea ce a fost dovedit când luăm în considerare triunghiul ABC. Înălțimea sa este exact jumătate din latură, prin urmare, a doua jumătate este raza cercului înscris în hexagonul mic:

r₂=a/2

S=(3(√3)/2)(а(√3)/3)²=а(√3)/2

Se pare că aria hexagonului din interiorul Stelei lui David este de trei ori mai mică decât cea a celui mare în care este înscrisă steaua.

De la teorie la practică

Proprietățile hexagonului sunt foarte activ utilizate atât în ​​natură, cât și în diverse domenii ale activității umane. În primul rând, acest lucru se aplică șuruburilor și piulițelor - capetele primului și celui de-al doilea nu sunt altceva decât un hexagon obișnuit, dacă nu țineți cont de teșituri. Mărimea cheilor corespunde diametrului cercului înscris - adică distanța dintre marginile opuse.

Placile hexagonale și-au găsit și aplicația. Este mult mai puțin obișnuită decât cea patruunghiulară, dar este mai convenabil să o așezi: trei plăci se întâlnesc la un moment dat, mai degrabă decât patru. Compozițiile se pot dovedi a fi foarte interesante:

Se produc și plăci de beton pentru pavaj.

Prevalența hexagoanelor în natură este explicată simplu. Astfel, cel mai ușor este să potriviți cercuri și bile strâns pe un plan dacă au același diametru. Din această cauză, fagurii au această formă.

Construcția unui hexagon regulat înscris într-un cerc. Construirea unui pentagon regulat de-a lungul unei laturi date. Mutați acul busolei în punctul de intersecție a arcului tocmai desenat cu cercul. Această construcție se poate face folosind un pătrat și o busolă. Un hexagon obișnuit poate fi construit folosind o margine dreaptă și un pătrat de 30X60°. Construiți punctele de vârf ale colțurilor unui hexagon obișnuit.


Construcția unui triunghi echilateral înscris într-un cerc. Vârfurile unui astfel de triunghi pot fi construite folosind un compas și un pătrat cu unghiuri de 30 și 60° sau doar un compas. Pentru a construi latura 2-3, setați bara transversală în poziția indicată de liniile întrerupte și trageți o linie dreaptă prin punctul 2, care va determina al treilea vârf al triunghiului.

Metoda 1 din 3: Desenați un hexagon perfect folosind o busolă

Marcam punctul 1 pe cerc și îl luăm ca unul dintre vârfurile pentagonului. Să fie dat un cerc cu diametrul D; trebuie să potriviți în el un heptagon obișnuit (Fig. 65). Împărțiți diametrul vertical al cercului în șapte părți egale. Din punctul 7 cu raza egală cu diametrul cercului D, descriem un arc până când acesta se intersectează cu continuarea diametrului orizontal în punctul F. Numim punctul F polul poligonului.

Tehnica de construire a poligoanelor regulate se bazează pe capacitatea de a construi bisectoare unghiulare și bisectoare perpendiculare ale segmentelor.

Prima coloană a acestui tabel arată numărul de laturi ale unui poligon obișnuit înscris, iar a doua coloană arată coeficienții. Lungimea laturii unui poligon dat se obține prin înmulțirea razei unui cerc dat cu un coeficient corespunzător numărului de laturi ale acestui poligon.

Subiectul acestei lecții video este „Construcția poligoanelor obișnuite”. De asemenea, vom defini din nou un poligon obișnuit, îl vom reprezenta grafic și apoi ne vom asigura din nou că centrele cercurilor înscrise și circumscrise în jurul unei astfel de figuri vor coincide. Un cerc poate fi întotdeauna înscris în acest poligon, iar un cerc poate fi întotdeauna descris în jurul lui. În cursul lecțiilor anterioare, am aflat că bisectoarele unghiurilor sale și bisectoarele perpendicularelor pe laturile sale joacă un rol de bază în descrierea proprietăților poligoanelor.

4. Am obținut triunghiul regulat ABC necesar. Problema este rezolvată. 3. După ce am plasat un picior al busolei într-un punct arbitrar A1 al cercului, folosind al doilea picior marcam punctul A2 pe același cerc și îl conectăm la punctul A1. Obținem prima latură a hexagonului. 3. Folosind bisectoarele perpendiculare pe laturile poligonului coborât din punctul O, împărțim în jumătate toate laturile acestuia și toate arcele de cerc cuprinse între vârfurile sale adiacente.

Construcțiile geometrice sunt una dintre părțile importante ale învățării. Acul ar trebui să străpungă linia trasă. Cu cât busola este instalată mai precis, cu atât construcția va fi mai precisă. Desenați un alt arc care intersectează cercul. Conectați în mod constant toate cele șase puncte de intersecție ale arcelor cu cercul desenat inițial. În acest caz, hexagonul se poate dovedi incorect.

Pentru a obține vârfuri / - // - /// din punctele IV, V și VI, trageți linii orizontale până când se intersectează cu cercul

Conectăm secvențial vârfurile găsite între ele. Un heptagon poate fi construit prin trasarea razelor de la polul F și prin diviziuni impare ale diametrului vertical. Centrele ambelor cercuri coincid (punctul O din Fig. 1). Figura arată, de asemenea, razele cercurilor circumscrise (R) și înscrise (r).

Construcția unui hexagon se bazează pe faptul că latura lui este egală cu raza cercului circumscris. În această lecție vom analiza modalități de a construi poligoane regulate folosind o busolă și o riglă. A doua metodă se bazează pe faptul că, dacă construiți un hexagon regulat înscris într-un cerc și apoi conectați vârfurile acestuia printr-unul, veți obține un triunghi echilateral. Metoda de mai sus este potrivită pentru construirea de poligoane regulate cu orice număr de laturi.

Construcția unui hexagon regulat înscris într-un cerc. Construcția unui hexagon se bazează pe faptul că latura lui este egală cu raza cercului circumscris. Prin urmare, pentru a-l construi, este suficient să împărțiți cercul în șase părți egale și să conectați punctele găsite între ele (Fig. 60, a).

Un hexagon obișnuit poate fi construit folosind o margine dreaptă și un pătrat de 30X60°. Pentru a realiza această construcție, luăm diametrul orizontal al cercului ca bisectoare a unghiurilor 1 și 4 (Fig. 60, b), construim laturile 1 -6, 4-3, 4-5 și 7-2, după care desenăm laturile 5-6 și 3-2.

Construirea unui triunghi echilateral înscris într-un cerc. Vârfurile unui astfel de triunghi pot fi construite folosind un compas și un pătrat cu unghiuri de 30 și 60° sau doar un compas.

Să luăm în considerare două moduri de a construi un triunghi echilateral înscris într-un cerc.

Prima cale(Fig. 61,a) se bazează pe faptul că toate cele trei unghiuri ale triunghiului 7, 2, 3 conțin 60°, iar linia verticală trasată prin punctul 7 este atât înălțimea, cât și bisectoarea unghiului 1. Deoarece unghiul este 0-1- 2 este egal cu 30°, apoi pentru a găsi latura

1-2, este suficient să construiți un unghi de 30° față de punctul 1 și latura 0-1. Pentru a face acest lucru, instalați bara transversală și pătratul așa cum se arată în figură, trageți linia 1-2, care va fi una dintre laturile triunghiului dorit. Pentru a construi latura 2-3, setați bara transversală în poziția indicată de liniile întrerupte și trageți o linie dreaptă prin punctul 2, care va determina al treilea vârf al triunghiului.

A doua cale se bazează pe faptul că dacă construiești un hexagon obișnuit înscris într-un cerc și apoi legați vârfurile acestuia printr-unul, veți obține un triunghi echilateral.

Pentru a construi un triunghi (Fig. 61, b), marcați punctul de vârf 1 pe diametru și trasați o linie diametrală 1-4. În continuare, din punctul 4 cu raza egală cu D/2, descriem un arc până când acesta se intersectează cu cercul în punctele 3 și 2. Punctele rezultate vor fi celelalte două vârfuri ale triunghiului dorit.

Construirea unui pătrat înscris într-un cerc. Această construcție se poate face folosind un pătrat și o busolă.

Prima metodă se bazează pe faptul că diagonalele pătratului se intersectează în centrul cercului circumscris și sunt înclinate față de axele sale la un unghi de 45°. Pe baza acestui lucru, instalăm bara transversală și pătratul cu unghiuri de 45° așa cum se arată în Fig. 62, a, și marcați punctele 1 și 3. În continuare, prin aceste puncte desenăm laturile orizontale ale pătratului 4-1 și 3-2 folosind o bară transversală. Apoi, folosind o margine dreaptă, desenăm laturile verticale ale pătratului 1-2 și 4-3 de-a lungul piciorului pătratului.

A doua metodă se bazează pe faptul că vârfurile pătratului bisectează arcele de cerc cuprinse între capetele diametrului (Fig. 62, b). Marcam punctele A, B si C la capetele a doua diametre reciproc perpendiculare si din ele cu o raza y descriem arce pana se intersecteaza.

În continuare, prin punctele de intersecție ale arcelor trasăm linii drepte auxiliare, marcate în figură cu linii continue. Punctele de intersecție a acestora cu cercul vor determina vârfurile 1 și 3; 4 și 2. Legăm între ele vârfurile pătratului dorit obținut astfel în serie.

Construcția unui pentagon regulat înscris într-un cerc.

Pentru a încadra un pentagon regulat într-un cerc (Fig. 63), facem următoarele construcții.

Marcam punctul 1 pe cerc și îl luăm ca unul dintre vârfurile pentagonului. Împărțim segmentul AO în jumătate. Pentru a face acest lucru, descriem un arc din punctul A cu raza AO până când se intersectează cu cercul în punctele M și B. Legând aceste puncte cu o dreaptă, obținem punctul K, pe care îl conectăm apoi la punctul 1. Cu cu o rază egală cu segmentul A7, descriem un arc din punctul K până când se intersectează cu linia diametrală AO ​​în punctul H. Prin conectarea punctului 1 cu punctul H, obținem latura pentagonului. Apoi, folosind o soluție de busolă egală cu segmentul 1H, care descrie un arc de la vârful 1 până la intersecția cu cercul, găsim vârfurile 2 și 5. După ce am făcut crestături din vârfurile 2 și 5 cu aceeași soluție de busolă, obținem restul. vârfurile 3 și 4. Legăm secvențial punctele găsite între ele.

Construirea unui pentagon regulat de-a lungul unei laturi date.

Pentru a construi un pentagon regulat de-a lungul unei laturi date (Fig. 64), împărțim segmentul AB în șase părți egale. Din punctele A și B cu raza AB descriem arce, a căror intersecție va da punctul K. Prin acest punct și diviziunea 3 pe dreapta AB trasăm o linie verticală.

Obținem punctul 1-vertex al pentagonului. Apoi, cu o rază egală cu AB, din punctul 1 descriem un arc până când acesta se intersectează cu arcele desenate anterior din punctele A și B. Punctele de intersecție ale arcelor determină vârfurile pentagonului 2 și 5. Legăm vârfurile găsite în serie între ele.

Construcția unui heptagon regulat înscris într-un cerc.

Să fie dat un cerc cu diametrul D; trebuie să potriviți în el un heptagon obișnuit (Fig. 65). Împărțiți diametrul vertical al cercului în șapte părți egale. Din punctul 7 cu raza egală cu diametrul cercului D, descriem un arc până când acesta se intersectează cu continuarea diametrului orizontal în punctul F. Numim punctul F polul poligonului. Luând punctul VII ca unul dintre vârfurile heptagonului, tragem raze de la polul F prin diviziuni pare ale diametrului vertical, a căror intersecție cu cercul va determina vârfurile VI, V și IV ale heptagonului. Pentru a obține vârfuri / - // - /// din punctele IV, V și VI, trageți linii orizontale până se intersectează cu cercul. Conectăm secvențial vârfurile găsite între ele. Un heptagon poate fi construit prin trasarea razelor de la polul F și prin diviziuni impare ale diametrului vertical.

Metoda de mai sus este potrivită pentru construirea de poligoane regulate cu orice număr de laturi.

Împărțirea unui cerc în orice număr de părți egale se poate face și folosind datele din tabel. 2, care furnizează coeficienți care fac posibilă determinarea dimensiunilor laturilor poligoanelor regulate înscrise.

Construcțiile geometrice sunt una dintre părțile principale ale antrenamentului. Ele formează gândirea spațială și logică și, de asemenea, ne permit să înțelegem validitatea geometrică primitivă și naturală. Construcțiile se fac pe un avion folosind o busolă și o riglă. Aceste instrumente pot fi folosite pentru a construi un număr mare de forme geometrice. În același timp, multe figuri care par destul de dificile sunt construite folosind cele mai simple reguli. De exemplu, cum se construiește un hexagon obișnuit poate fi descris în câteva cuvinte.

Vei avea nevoie

  • Compas, riglă, creion, foaie de hârtie.

Instrucțiuni

1. Desenează un cerc. Stabiliți o anumită distanță între picioarele busolei. Această distanță va fi raza cercului. Alegeți raza în așa fel încât să desenați un cerc să fie destul de confortabil. Cercul trebuie să se potrivească în întregime pe foaia de hârtie. O distanță prea mare sau prea mică între picioarele busolei poate duce la schimbarea acesteia în timpul desenului. Distanța optimă va fi cea la care unghiul dintre picioarele busolei este de 15-30 de grade.

2. Construiți punctele de vârf ale colțurilor unui hexagon obișnuit. Așezați piciorul busolei, în care este fixat acul, în orice punct al cercului. Acul ar trebui să străpungă linia trasă. Cu cât busola este instalată mai precis, cu atât construcția va fi mai precisă. Desenați un arc de cerc, astfel încât să intersecteze cercul desenat anterior. Mutați acul busolei în punctul de intersecție a arcului tocmai desenat cu cercul. Desenați un alt arc care intersectează cercul. Mutați din nou acul busolei la punctul de intersecție al arcului și al cercului și desenați din nou arcul. Repetați această acțiune de încă trei ori, mișcându-vă într-o direcție în jurul cercului. Fiecare ar trebui să aibă șase arce și șase puncte de intersecție.

3. Construiți un hexagon pozitiv. Combinați treptat toate cele șase puncte de intersecție ale arcelor cu cercul desenat inițial. Conectați punctele cu linii drepte desenate folosind o riglă și un creion. După aceste acțiuni, se va obține un hexagon corect înscris într-un cerc.

Hexagon Un poligon este considerat a avea șase unghiuri și șase laturi. Poligoanele pot fi fie convexe, fie concave. Un hexagon convex are toate unghiurile interne obtuse, în timp ce un hexagon concav are unul sau mai multe unghiuri ascuțite. Hexagonul este destul de ușor de construit. Acest lucru se face în câțiva pași.

Vei avea nevoie

  • Creion, foaie de hârtie, riglă

Instrucțiuni

1. Luați o foaie de hârtie și marcați 6 puncte pe ea aproximativ așa cum se arată în Fig. 1.

2. După ce punctele au fost marcate, luați o riglă și un creion și, cu ajutorul lor, pas cu pas, unul după altul, legați punctele așa cum arată în Fig. 2.

Video pe tema

Notă!
Suma tuturor unghiurilor interioare ale unui hexagon este de 720 de grade.

Hexagon este un poligon, unul care are șase unghiuri. Pentru a desena un hexagon arbitrar, trebuie să faceți 2 pași fiecare.

Vei avea nevoie

  • Creion, riglă, foaie de hârtie.

Instrucțiuni

1. Trebuie să iei un creion în mână și să marchezi 6 puncte aleatorii pe foaie. În viitor, aceste puncte vor juca rolul colțurilor în hexagon. (Fig.1)

2. Luați o riglă și desenați 6 segmente pe baza acestor puncte care s-ar conecta între ele de-a lungul punctelor desenate anterior (Fig. 2)

Video pe tema

Notă!
Un tip special de hexagon este hexagonul pozitiv. Se numește astfel deoarece toate laturile și unghiurile sale sunt egale între ele. Puteți descrie sau înscrie un cerc în jurul unui astfel de hexagon. Este de remarcat faptul că în punctele care au fost obținute prin atingerea cercului înscris și a laturilor hexagonului, laturile hexagonului pozitiv sunt împărțite în jumătate.

Sfaturi utile
În natură, hexagoanele pozitive sunt foarte populare. De exemplu, întregul fagure are o formă hexagonală pozitivă. Sau rețeaua cristalină a grafenului (modificarea carbonului) are și forma unui hexagon pozitiv.

Cum să construiești una sau alta colţ- mare întrebare. Dar pentru unele unghiuri sarcina este simplificată în mod invizibil. Unul dintre aceste unghiuri este colţ la 30 de grade. Este egal cu?/6, adică numărul 30 este un divizor al lui 180. În plus, sinusul său este cunoscut. Acest lucru ajută la construcția sa.

Vei avea nevoie

  • raportor, pătrat, busolă, riglă

Instrucțiuni

1. În primul rând, să ne uităm la o situație deosebit de primitivă când aveți un raportor în mâini. Apoi, o linie dreaptă la un unghi de 30 de grade față de aceasta poate fi ușor lăsată deoparte cu sprijin pentru ea.

2. Pe lângă raportor, există și colţ arcuri, unul dintre unghiurile cărora este egal cu 30 de grade. Apoi altul colţ colţ unghiul va fi egal cu 60 de grade, adică aveți nevoie de un vizual mai mic colţ pentru a construi linia dreaptă necesară.

3. Să trecem acum la modalități non-triviale de a construi un unghi de 30 de grade. După cum știți, sinusul unui unghi de 30 de grade este egal cu 1/2. Pentru a o construi, trebuie să construim direct colţţionar colţ nik. Este posibil să putem construi două drepte perpendiculare. Dar tangenta de 30 de grade este un număr irațional, prin urmare putem calcula doar aproximativ raportul dintre catete (exclusiv dacă nu există calculator) și, prin urmare, construim colţ aproximativ 30 de grade.

4. În acest caz, este posibil să se facă o construcție exactă. Să construim din nou două linii drepte perpendiculare, pe care picioarele vor fi situate drepte colţ impas colţ nik. Să întindem un picior drept BC de o anumită lungime cu sprijinul unei busole (B – drept colţ). După aceasta, vom crește lungimea dintre picioarele busolei de 2 ori, ceea ce este elementar. Desenând un cerc cu centru în punctul C cu o rază de această lungime, găsim punctul de intersecție al cercului cu o altă dreaptă. Acest punct va fi punctul A direct colţ impas colţ ABC și colţ A va fi egal cu 30 de grade.

5. Ridica colţ la 30 de grade se admite şi cu sprijinul cercului, aplicând cu ce este egal?/6. Să construim un cerc cu raza OB. Să ne uităm la teorie colţ nik, unde OA = OB = R – raza cercului, unde colţ OAB = 30 de grade. Fie OE înălțimea acestui triunghi isoscel colţ nik și, în consecință, bisectoarea și mediana acesteia. Apoi colţ AOE = 15 grade, iar, conform formulei semiunghiului, sin(15o) = (sqrt(3)-1)/(2*sqrt(2)). În consecință, AE = R*sin(15o). Prin urmare, AB = 2AE = 2R*sin(15o). Construind un cerc de raza BA cu centru în punctul B, găsim punctul de intersecție A al acestui cerc cu cel inițial. Unghiul AOB va fi de 30 de grade.

6. Dacă putem determina lungimea arcelor într-un fel, atunci, lăsând deoparte un arc de lungime?*R/6, obținem și colţ la 30 de grade.

Notă!
Trebuie să ne amintim că în paragraful 5 putem construi doar unghiul aproximativ, deoarece în calcule vor apărea numere iraționale.

Hexagon numit un caz special de poligon - o figură formată din majoritatea punctelor planului, limitată de o polilinie închisă. Un hexagon pozitiv (hexagon), la rândul său, este, de asemenea, un caz special - este un poligon cu șase laturi egale și unghiuri egale. Această cifră este semnificativă prin faptul că lungimea tuturor laturilor sale este egală cu raza cercului descris în jurul figurii.

Vei avea nevoie

  • – busolă;
  • - rigla;
  • - creion;
  • - hârtie.

Instrucțiuni

1. Selectați lungimea laterală a hexagonului. Luați o busolă și stabiliți distanța dintre capătul acului, situat pe unul dintre picioarele acestuia, și capătul plumbului, situat pe celălalt picior, egală cu lungimea laturii figurii care se desenează. Pentru a face acest lucru, puteți folosi o riglă sau puteți alege o distanță aleatorie dacă acest moment nu este semnificativ. Fixați picioarele busolei cu un șurub, dacă este posibil.

2. Desenați un cerc folosind o busolă. Distanța selectată între picioare va fi raza cercului.

3. Împărțiți cercul în șase părți egale cu puncte. Aceste puncte vor fi vârfurile colțurilor hexagonului și, în consecință, capetele segmentelor reprezentând laturile acestuia.

4. Așezați piciorul busolei cu acul într-un punct arbitrar situat pe linia cercului conturat. Acul trebuie să străpungă linia corect. Precizia construcției depinde direct de precizia instalării busolei. Desenați un arc cu o busolă astfel încât să intersecteze cercul desenat primul în 2 puncte.

5. Mutați piciorul busolei cu acul într-unul dintre punctele de intersecție ale arcului desenat cu cercul original. Desenați un alt arc, intersectând și cercul în 2 puncte (unul dintre ele va coincide cu punctul din locația anterioară a acului busolei).

6. În același mod, rearanjați acul busolei și desenați arce de încă patru ori. Deplasați piciorul busolei cu acul într-o direcție în jurul cercului (invariabil în sensul acelor de ceasornic sau în sens invers acelor de ceasornic). Ca rezultat, trebuie identificate șase puncte de intersecție a arcelor cu cercul construit inițial.

7. Desenați un hexagon pozitiv. Treptat, în perechi, uniți cele șase puncte obținute în pasul anterior cu segmente. Desenați segmentele folosind un creion și o riglă. Rezultatul va fi un hexagon corect. După finalizarea construcției, puteți șterge elementele auxiliare (arce și cercuri).

Notă!
Este logic să alegeți o distanță între picioarele busolei, astfel încât unghiul dintre ele să fie de 15-30 de grade; dimpotrivă, la realizarea construcțiilor, această distanță se poate pierde cu ușurință.

Când construiți sau dezvoltați planuri de proiectare a casei, este adesea necesar să construiți colţ, egal cu cel existent. Probele și abilitățile de geometrie școlară vin în sprijin.

Instrucțiuni

1. Un unghi este format din două drepte care emană dintr-un punct. Acest punct va fi numit vârful unghiului, iar liniile vor fi laturile unghiului.

2. Utilizați trei litere pentru a reprezenta colțurile: unul în partea de sus, două în lateral. Chemat colţ, începând cu litera care stă pe o parte, apoi se numește litera care stă în partea de sus, iar după aceea litera de pe cealaltă parte. Utilizați alte metode pentru marcarea colțurilor dacă vă simțiți mai confortabil vizavi. Ocazional, o singură literă este numită, care se află în partea de sus. Și este permis să se desemneze unghiuri cu litere grecești, de exemplu, α, β, γ.

3. Există situații în care trebuie să desenezi colţ, astfel încât să fie egal cu unghiul dat. Dacă nu există nicio șansă de a folosi un raportor atunci când construiți un desen, vă puteți descurca doar cu o riglă și o busolă. Este posibil, pe linia dreaptă indicată în desen prin literele MN, să fie necesară construirea colţîn punctul K, astfel încât să fie egal cu unghiul B. Adică din punctul K trebuie să trasați o dreaptă formând cu linia MN colţ, cel care va fi egal cu unghiul B.

4. Mai întâi, marcați un punct pe întreaga latură a unui unghi dat, de exemplu, punctele A și C, apoi conectați punctele C și A cu o linie dreaptă. Ia tre colţ nik ABC.

5. Acum construiți același tre pe linia dreaptă MN colţ astfel încât vârful său B să fie pe dreapta în punctul K. Folosiți regula pentru a construi un triunghi colţ pe trei laturi. Îndepărtați segmentul KL din punctul K. Trebuie să fie egal cu segmentul BC. Obțineți punctul L.

6. Din punctul K, desenați un cerc cu raza egală cu segmentul BA. Din L, desenați un cerc cu raza CA. Combinați punctul rezultat (P) de intersecție a 2 cercuri cu K. Obțineți trei colţ nik KPL, cel care va fi egal cu trei colţ Cartea ABC. Așa obțineți colţ K. Va fi egal cu unghiul B. Pentru a face această construcție mai confortabilă și mai rapidă, detașați segmente egale din vârful B, folosind o soluție de busolă, fără a mișca picioarele, descrieți un cerc cu aceeași rază din punctul K.

Video pe tema

Notă!
Evitați modificarea accidentală a distanței dintre picioarele busolei. În acest caz, hexagonul se poate dovedi incorect.

Sfaturi utile
Are talent de a face construcții folosind o busolă cu o plumbă perfect ascuțită. Astfel construcțiile vor fi deosebit de precise.

Grilele hexagonale (grilele hexagonale) sunt folosite în unele jocuri, dar nu sunt la fel de simple sau comune ca grilele dreptunghiulare. De aproape 20 de ani adun resurse pe rețele hexagonale și am scris acest ghid pentru cele mai elegante abordări, implementate în cel mai simplu cod. Acest articol folosește pe scară largă ghidurile lui Charles Fu și Clark Verbrugge. Voi descrie diferitele moduri de a crea rețele hexagonale, relațiile lor și cei mai comuni algoritmi. Multe părți ale acestui articol sunt interactive: selectarea unui tip de grilă modifică diagramele, codul și textele corespunzătoare. (Notă per.: acest lucru se aplică doar originalului, vă sfătuiesc să-l studiați. În traducere, toate informațiile originalului sunt păstrate, dar fără interactivitate.).

Exemplele de cod din articol sunt scrise în pseudocod, astfel încât sunt mai ușor de citit și de înțeles pentru a vă scrie propria implementare.

Geometrie

Hexagoanele sunt poligoane cu șase laturi. Hexagoanele obișnuite au toate laturile (marginile) de aceeași lungime. Vom lucra doar cu hexagoane obișnuite. De obicei, ochiurile hexagonale folosesc orientări orizontale (sus ascuțit) și vertical (sus plat).


Hexagoane cu vârfuri plate (stânga) și ascuțite (dreapta).

Hexagoanele au 6 fețe. Fiecare față este comună pentru două hexagoane. Hexagoanele au 6 colțuri. Fiecare punct de colț este comun pentru trei hexagoane. Puteți citi mai multe despre centre, margini și puncte de colț în articolul meu despre părțile ochiurilor (pătrate, hexagoane și triunghiuri).

Unghiuri

Într-un hexagon obișnuit, unghiurile interne sunt de 120°. Există șase „pene”, fiecare dintre acestea fiind un triunghi echilateral cu unghiuri interne de 60°. Punct de colț i este situat la o distanță de (60° * i) + 30°, unități de mărime față de centrul centrului. In cod:

Funcția hex_corner(center, size, i): var angle_deg = 60 * i + 30 var angle_rad = PI / 180 * angle_deg return Point(center.x + size * cos(angle_rad), center.y + size * sin(angle_rad) )
Pentru a umple un hexagon, trebuie să obțineți vârfurile poligonului de la hex_corner(…, 0) la hex_corner(…, 5) . Pentru a desena conturul hexagonului, trebuie să utilizați aceste vârfuri și apoi să desenați din nou linia în hex_corner(..., 0) .

Diferența dintre cele două orientări este că x și y sunt schimbate, rezultând o schimbare a unghiurilor: hexagoanele cu vârf plat au unghiuri de 0°, 60°, 120°, 180°, 240°, 300° și vârful ascuțit. hexagoanele au unghiuri de 30°, 90°, 150°, 210°, 270°, 330°.


Colțuri de hexagoane cu vârfuri plate și ascuțite

Dimensiunea și locația

Acum vrem să plasăm mai multe hexagoane împreună. În orientare orizontală, înălțimea hexagonului este înălțimea = dimensiunea * 2 . Distanța verticală dintre hexagoanele adiacente este vert = înălțime * 3/4 ​​​​.

Hexagon lățime lățime = sqrt(3)/2 * înălțime . Distanța orizontală dintre hexagoane adiacente este horiz = lățime.

Unele jocuri folosesc pixel art pentru hexagoane, care nu se potrivesc exact cu hexagoanele obișnuite. Formulele de unghi și de plasare descrise în această secțiune nu se vor potrivi cu dimensiunile unor astfel de hexagoane. Restul articolului care descrie algoritmi de plasă hexagonală se aplică chiar dacă hexagoanele sunt ușor întinse sau strivite.



Sisteme de coordonate

Să începem asamblarea hexagoanelor într-o grilă. În cazul grilelor de pătrate, există o singură modalitate evidentă de asamblare. Pentru hexagoane, există multe abordări. Vă recomand să utilizați coordonatele cubice ca reprezentare principală. Coordonatele axiale sau coordonatele offset trebuie utilizate pentru a stoca hărți și pentru a afișa coordonatele utilizatorului.

Coordonate offset

Cea mai comună abordare este de a compensa fiecare coloană sau rând ulterioară. Coloanele sunt desemnate col sau q. Rândurile sunt notate cu rând sau r . Puteți compensa coloanele/rândurile impare sau pare, astfel încât hexagoanele orizontale și verticale au fiecare două opțiuni.


Aranjament orizontal „odd-r”


Aranjament orizontal „even-r”


Aranjament vertical „impar-q”.


Aranjament vertical „even-q”

Coordonatele cubice

Un alt mod de a privi grilele hexagonale este să le vezi ca Trei axele principale, nu Două, ca în grile de pătrate. Ele prezintă o simetrie elegantă.

Să luăm o grilă de cuburi și hai să o tăiem planul diagonal la x + y + z = 0. Aceasta este o idee ciudată, dar ne va ajuta să simplificăm algoritmii de plasă hexagonală. În special, vom putea folosi operații standard din coordonatele carteziene: însumarea și scăderea coordonatelor, înmulțirea și împărțirea cu o mărime scalară, precum și distanțe.

Observați cele trei axe principale de pe grila de cuburi și relația lor cu cele șase diagonală direcțiile rețelei hexagonale. Axele diagonale ale rețelei corespund direcției principale a rețelei hexagonale.


Hexagoane


cuburi

Deoarece avem deja algoritmi pentru ochiurile pătrate și cubice, utilizarea coordonatelor cubice ne permite să adaptăm acești algoritmi la ochiurile hexagonale. Voi folosi acest sistem pentru majoritatea algoritmilor din articol. Pentru a folosi algoritmii cu un sistem de coordonate diferit, convertesc coordonatele cubice, rulez algoritmul și apoi le convertesc înapoi.

Aflați cum funcționează coordonatele cubice pentru o plasă hexagonală. Când selectați hexagoane, sunt evidențiate coordonatele cubice corespunzătoare celor trei axe.

  1. Fiecare direcție a grilei cubului îi corespunde linii pe o grilă de hexagoane. Încercați să selectați un hexagon cu z egal cu 0, 1, 2, 3 pentru a vedea conexiunea. Linia este marcată cu albastru. Încercați același lucru pentru x (verde) și y (violet).
  2. Fiecare direcție a rețelei hexagonale este o combinație a două direcții ale rețelei cubului. De exemplu, „nordul” unei grile hexagonale se află între +y și -z, astfel încât fiecare pas cu „nord” crește y cu 1 și scade z cu 1.
Coordonatele cubice sunt o alegere rezonabilă pentru un sistem de coordonate hexagonal. Condiția este x + y + z = 0, deci trebuie păstrată în algoritmi. Condiția asigură, de asemenea, că va exista întotdeauna o coordonată canonică pentru fiecare hexagon.

Există multe sisteme de coordonate diferite pentru cuburi și hexagoane. În unele dintre ele condiția este diferită de x + y + z = 0. Am arătat doar unul dintre multele sisteme. De asemenea, puteți crea coordonate cubice cu x-y , y-z , z-x , care au propriul set de proprietăți interesante, dar nu voi intra în ele aici.

Dar ați putea argumenta că nu doriți să stocați 3 numere pentru coordonate pentru că nu știți cum să stocați harta în acest fel.

Coordonate axiale

Un sistem de coordonate axial, uneori numit sistem de coordonate „trapezoidal”, este construit din două sau trei coordonate dintr-un sistem de coordonate cubic. Deoarece avem condiția x + y + z = 0, a treia coordonată nu este necesară. Coordonatele axiale sunt utile pentru stocarea hărților și afișarea coordonatelor pentru utilizator. Ca și în cazul coordonatelor cubice, puteți utiliza operațiile standard de adunare, scădere, înmulțire și împărțire a coordonatelor carteziene.

Există multe sisteme de coordonate cubice și multe axiale. Nu voi acoperi fiecare combinație în acest ghid. Voi selecta două variabile, q (coloană) și r (rând). În diagramele din acest articol, q corespunde lui x și r corespunde lui z, dar această corespondență este arbitrară deoarece puteți roti și roti diagramele pentru a obține diferite corespondențe.

Avantajul acestui sistem față de grilele de deplasare este că algoritmii sunt mai ușor de înțeles. Dezavantajul sistemului este că stocarea unui card dreptunghiular este puțin ciudată; consultați secțiunea despre salvarea hărților. Unii algoritmi sunt și mai clari în coordonatele cubice, dar din moment ce avem condiția x + y + z = 0, putem calcula a treia coordonată implicită și o putem folosi în acești algoritmi. În proiectele mele, numesc axele q, r, s, deci condiția arată ca q + r + s = 0 și pot calcula s = -q - r atunci când este necesar.

Axe

Coordonatele offset sunt primul lucru la care se gândesc majoritatea oamenilor, deoarece sunt aceleași cu coordonatele carteziene standard utilizate pentru grilele de pătrate. Din nefericire, una dintre cele două axe trebuie să meargă contra firului, iar asta ajunge să complice lucrurile. Sistemele de cuburi și axe merg la distanță și au algoritmi mai simpli, dar stocarea cardului este puțin mai complexă. Există un alt sistem numit „alternant” sau „dual”, dar nu îl vom lua în considerare aici; pentru unii le este mai ușor să lucreze decât cubic sau axial.


Coordonate offset, cubice și axiale

Axă este direcția în care coordonatele corespunzătoare crește. Perpendiculară pe o axă este linia pe care coordonata rămâne constantă. Diagramele grilă de mai sus arată linii perpendiculare.

Transformarea coordonatelor

Este probabil să utilizați coordonate axiale sau decalate în proiectarea dvs., dar mulți algoritmi sunt mai ușor exprimați în coordonate cubice. Prin urmare, trebuie să fim capabili să convertim coordonatele între sisteme.

Coordonatele axiale sunt strâns legate de coordonatele cubice, deci conversia este simplă:

# convertiți coordonatele cubice în axiale q = x r = z # convertiți coordonatele axiale în cubice x = q z = r y = -x-z
În cod, aceste două funcții pot fi scrise după cum urmează:

Funcția cube_to_hex(h): # axial var q = h.x var r = h.z return Hex(q, r) function hex_to_cube(h): # cubic var x = h.q var z = h.r var y = -x-z return Cube(x, y , z)
Coordonatele offset sunt ceva mai complicate:

Hexagoane adiacente

Având în vedere un hexagon, lângă ce șase hexagoane este? După cum vă puteți aștepta, răspunsul este cel mai ușor în coordonatele cubice, destul de ușor în coordonatele axiale și puțin mai dificil în coordonatele de deplasare. De asemenea, poate fi necesar să calculați șase hexagoane „diagonale”.

Coordonatele cubice

Mutarea unui spațiu în coordonate hexadecimale face ca una dintre cele trei coordonate cubice să se schimbe la +1 și cealaltă la -1 (suma trebuie să rămână 0). La +1, trei coordonate posibile se pot schimba, iar la -1, celelalte două. Acest lucru ne oferă șase modificări posibile. Fiecare corespunde uneia dintre direcțiile hexagonului. Cea mai simplă și rapidă modalitate este de a precalcula modificările și de a le pune într-un tabel de coordonate cubice Cube(dx, dy, dz) în timpul compilării:

Direcții Var = [ Cub(+1, -1, 0), Cub(+1, 0, -1), Cub(0, +1, -1), Cub(-1, +1, 0), Cub( -1, 0, +1), Cube(0, -1, +1) ] function cube_direction(directie): intoarce directii function cube_neighbor(hex, direction): return cube_add(hex, cube_direction(directie))

Coordonate axiale

Ca și înainte, folosim pentru început sistemul cubic. Să luăm tabelul Cube(dx, dy, dz) și să îl transformăm în tabelul Hex(dq, dr):

Direcții Var = [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0, +1) ] function hex_direction(directie): return directions function hex_neighbor(hex, direction): var dir = hex_direction(direction) return Hex(hex.q + dir.q, hex.r + dir.r)

Coordonate offset

În coordonatele axiale, facem modificări în funcție de locul în care ne aflăm pe grilă. Dacă ne aflăm într-o coloană/rând offset, atunci regula este diferită de cazul unei coloane/rând fără decalaj.

Ca și înainte, creăm un tabel cu numere care trebuie adăugate la col și row . Cu toate acestea, de data aceasta vom avea două matrice, unul pentru coloanele/rândurile impare și celălalt pentru cele pare. Priviți (1,1) în imaginea hărții grilă de mai sus și observați cum se schimbă colul și rândul pe măsură ce vă deplasați în fiecare dintre cele șase direcții. Acum să repetăm ​​procesul pentru (2,2) . Tabelele și codul vor fi diferite pentru fiecare dintre cele patru tipuri de grile de deplasare; aici este codul corespunzător pentru fiecare tip de grilă.

Odd-r
direcții var = [ [ Hex(+1, 0), Hex(0, -1), Hex(-1, -1), Hex(-1, 0), Hex(-1, +1), Hex(0 , +1) ], [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(0, +1), Hex( +1, +1) ] ] function offset_neighbor(hex, direction): var paritate = hex.row & 1 var dir = directii return Hex(hex.col + dir.col, hex.row + dir.row)


Chiar și-r
direcții var = [ [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(0, +1), Hex(+1), , +1) ], [ Hex(+1, 0), Hex(0, -1), Hex(-1, -1), Hex(-1, 0), Hex(-1, +1), Hex (0, +1) ] ] funcția offset_neighbor(hex, direcție): var paritate = hex.row & 1 var dir = direcții return Hex(hex.col + dir.col, hex.row + dir.row)


Grilă pentru rânduri pare (PAR) și impare (IMPARE).

Impar-q
direcții var = [ [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, -1), Hex(-1, 0), Hex(0), , +1) ], [ Hex(+1, +1), Hex(+1, 0), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex (0, +1) ] ] funcția offset_neighbor(hex, direcție): var paritate = hex.col & 1 var dir = direcții return Hex(hex.col + dir.col, hex.row + dir.row)


Chiar-q
direcții var = [ [ Hex(+1, +1), Hex(+1, 0), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0 , +1) ], [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, -1), Hex(-1, 0), Hex (0, +1) ] ] funcția offset_neighbor(hex, direcție): var paritate = hex.col & 1 var dir = direcții return Hex(hex.col + dir.col, hex.row + dir.row)


Grilă pentru coloanele pare (PAR) și impare (IMPARE).

Diagonale

Deplasarea în spațiu „diagonal” în coordonate hexadecimale schimbă una dintre cele trei coordonate cubice cu ±2 și celelalte două cu ∓1 (suma trebuie să rămână 0).

Var diagonale = [ Cube(+2, -1, -1), Cub(+1, +1, -2), Cub(-1, +2, -1), Cub(-2, +1, +1 ), Cub(-1, -1, +2), Cub(+1, -2, +1) ] function cube_diagonal_neighbor(hex, direction): return cube_add(hex, diagonale)
Ca și înainte, putem converti aceste coordonate în coordonate axiale prin scăderea uneia dintre cele trei coordonate sau le putem converti în coordonate offset calculând mai întâi rezultatele.


Distante

Coordonatele cubice

În sistemul de coordonate cubice, fiecare hexagon este un cub în spațiu tridimensional. Hexagoanele adiacente sunt distanțate la 1 în grila hexagonală, dar la distanță de 2 în grila cubului. Astfel, calcularea distanțelor este simplă. Într-o grilă de pătrate, distanțele Manhattan sunt abs(dx) + abs(dy) . Într-o grilă de cuburi, distanțele Manhattan sunt abs(dx) + abs(dy) + abs(dz) . Distanța în grila hexagonală este egală cu jumătate dintre ele:

Funcția distanță_cub(a, b): return (abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)) / 2
Echivalentul acestei notații ar fi să spunem că una dintre cele trei coordonate trebuie să fie suma celorlalte două și apoi să ia asta ca distanță. Puteți alege forma de înjumătățire sau forma de valoare maximă de mai jos, dar dau același rezultat:

Funcția cube_distance(a, b): return max(abs(a.x - b.x), abs(a.y - b.y), abs(a.z - b.z))
În figură, valorile maxime sunt evidențiate în culoare. De asemenea, rețineți că fiecare culoare reprezintă una dintre cele șase direcții „diagonale”.

GIF


Coordonate axiale

În sistemul axial, a treia coordonată este exprimată implicit. Să facem conversia de la axial la cubic pentru a calcula distanța:

Funcția hex_distance(a, b): var ac = hex_to_cube(a) var bc = hex_to_cube(b) return cube_distance(ac, bc)
Dacă compilatorul inline (inline) hex_to_cube și cube_distance în cazul dvs., atunci va genera cod astfel:

Funcția hex_distance(a, b): return (abs(a.q - b.q) + abs(a.q + a.r - b.q - b.r) + abs(a.r - b.r)) / 2
Există multe moduri diferite de a scrie distanțele dintre hexagoane în coordonate axiale, dar indiferent de metoda de scriere distanța dintre hexagoane în sistemul axial este extrasă din distanța Manhattan în sistemul cubic. De exemplu, „diferența de diferențe” descrisă se obține prin scrierea a.q + a.r - b.q - b.r ca a.q - b.q + a.r - b.r și folosind forma valorii maxime în loc de forma bisecției cube_distance . Toate sunt similare dacă vedeți legătura cu coordonatele cubice.

Coordonate offset

Ca și în cazul coordonatelor axiale, convertim coordonatele offset în coordonate cubice și apoi folosim distanța cubică.

Funcția offset_distance(a, b): var ac = offset_to_cube(a) var bc = offset_to_cube(b) return cube_distance(ac, bc)
Vom folosi același model pentru mulți dintre algoritmi: convertiți din hexagoane în cuburi, rulăm versiunea cubică a algoritmului și convertim rezultatele cubice în coordonate hexagonale (coordonate axiale sau decalate).

Desenarea liniilor

Cum să tragi o linie de la un hexagon la altul? Folosesc interpolarea liniară pentru a desena linii. Linia este eșantionată uniform la N+1 puncte și se calculează în ce hexagoane se află aceste probe.

GIF


  1. Mai întâi calculăm N, care va fi distanța în hexagoane dintre punctele finale.
  2. Apoi eșantionăm uniform N+1 puncte între punctele A și B. Utilizând interpolarea liniară, determinăm că pentru valorile lui i de la 0 la N, inclusiv acestea, fiecare punct va fi A + (B - A) * 1,0/N * eu . În figură, aceste puncte de control sunt prezentate cu albastru. Rezultatul sunt coordonatele în virgulă mobilă.
  3. Să convertim fiecare punct de control (float) înapoi în hexagoane (int). Algoritmul se numește cube_round (vezi mai jos).
Pune totul împreună pentru a trage o linie de la A la B:

Funcția lerp(a, b, t): // pentru float return a + (b - a) * funcția t cube_lerp(a, b, t): // pentru hexagoane return Cube(lerp(a.x, b.x, t), lerp(a.y, b.y, t), lerp(a.z, b.z, t)) function cube_linedraw(a, b): var N = cube_distance(a, b) var rezultate = pentru fiecare 0 ≤ i ≤ N: results.append( cube_round(cube_lerp(a, b, 1.0/N * i))) returnează rezultate
Note:

  • Există cazuri în care cube_lerp returnează un punct care se află exact pe marginea dintre două hexagoane. Apoi cube_round îl mută într-o direcție sau alta. Liniile arată mai bine dacă sunt deplasate într-o direcție. Acest lucru se poate face prin adăugarea unui cub hexagonal „epsilon” (1e-6, 1e-6, -2e-6) la unul sau ambele puncte finale înainte de a începe bucla. Acest lucru va „împinge” linia într-o direcție, astfel încât să nu lovească marginile.
  • Algoritmul de linie DDA în grile pătrate echivalează cu N cu distanța maximă de-a lungul fiecărei axe. Facem același lucru în spațiul cubic, care este similar cu distanța dintr-o grilă hexagonală.
  • Funcția cube_lerp ar trebui să returneze un cub cu coordonate flotante. Dacă programați într-un limbaj tip static, nu veți putea folosi tipul Cube. În schimb, puteți defini un tip FloatCube sau puteți introduce o funcție în codul de desen de linie dacă nu doriți să definiți un alt tip.
  • Puteți optimiza codul prin inline cube_lerp și apoi calculați B.x-A.x , B.x-A.y și 1.0/N în afara buclei. Înmulțirea poate fi convertită în însumare repetată. Rezultatul va fi ceva ca un algoritm de linie DDA.
  • Folosesc coordonate axiale sau cubice pentru a desena linii, dar dacă doriți să lucrați cu coordonate offset, consultați .
  • Există multe opțiuni pentru trasarea liniilor. Uneori este necesară „supracoperirea”. Mi s-a trimis cod pentru a desena linii super-acoperite în hexagoane, dar nu l-am analizat încă.

Raza de mișcare

Interval de coordonate

Având în vedere un centru hexagon și un interval N, care hexagoane se află în N trepte de acesta?

Putem face inversul formulei distanței dintre hexagoane distanță = max(abs(dx), abs(dy), abs(dz)) . Pentru a găsi toate hexagoanele din N avem nevoie de max(abs(dx), abs(dy), abs(dz)) ≤ N . Aceasta înseamnă că sunt necesare toate cele trei valori: abs(dx) ≤ N și abs(dy) ≤ N și abs(dz) ≤ N . Îndepărtând valoarea absolută, obținem -N ≤ dx ≤ N și -N ≤ dy ≤ N și -N ≤ dz ≤ N . În cod, aceasta va fi o buclă imbricată:

Var rezultate = pentru fiecare -N ≤ dx ≤ N: pentru fiecare -N ≤ dy ≤ N: pentru fiecare -N ≤ dz ≤ N: dacă dx + dy + dz = 0: rezultate.append(cube_add(center, Cube(dx) , dy, dz)))
Acest ciclu va funcționa, dar va fi destul de ineficient. Dintre toate valorile dz prin care trecem în buclă, doar una îndeplinește de fapt condiția cubului dx + dy + dz = 0. În schimb, vom calcula direct valoarea lui dz care satisface condiția:

Var rezultate = pentru fiecare -N ≤ dx ≤ N: pentru fiecare max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N): var dz = -dx-dy rezultate.append(cube_add( centru, cub (dx, dy, dz)))
Acest ciclu trece numai de-a lungul coordonatelor necesare. În figură, fiecare interval este o pereche de linii. Fiecare linie este o inegalitate. Luăm toate hexagoanele care satisfac cele șase inegalități.

GIF


Intervalele suprapuse

Dacă trebuie să găsiți hexagoane care se află în mai multe intervale, puteți intersecta intervalele înainte de a genera o listă de hexagoane.

Puteți aborda această problemă din punct de vedere al algebrei sau al geometriei. Algebric, fiecare domeniu este exprimat ca condiții de inegalitate de forma -N ≤ dx ≤ N , și trebuie să găsim intersecția acestor condiții. Geometric, fiecare regiune este un cub în spațiu 3D și vom intersecta două cuburi în spațiu 3D pentru a obține un cuboid în spațiu 3D. Apoi îl proiectăm înapoi pe planul x + y + z = 0 pentru a obține hexagoane. Voi rezolva această problemă algebric.

Mai întâi, rescriem condiția -N ≤ dx ≤ N în forma mai generală x min ≤ x ≤ x max și luăm x min = centru.x - N și x max = centru.x + N . Să facem același lucru pentru y și z, rezultând forma generală a codului din secțiunea anterioară:

Var rezultate = pentru fiecare xmin ≤ x ≤ xmax: pentru fiecare max(ymin, -x-zmax) ≤ y ≤ min(ymax, -x-zmin): var z = -x-y rezultate.append(Cube(x, y, z))
Intersecția a două intervale a ≤ x ≤ b și c ≤ x ≤ d este max(a, c) ≤ x ≤ min(b, d) . Deoarece aria hexagoanelor este exprimată ca intervale peste x, y, z, putem intersecta fiecare dintre intervalele x, y, z separat și apoi folosim o buclă imbricată pentru a genera o listă de hexagoane în intersecție. Pentru o zonă de hexagoane luăm x min = H.x - N și x max = H.x + N, în mod similar pentru y și z. Pentru intersecția a două regiuni hexagonale, luăm x min = max(H1.x - N, H2.x - N) și x max = min(H1.x + N, H2.x + N), în mod similar pentru y și z . Același model funcționează pentru intersecția a trei sau mai multe zone.

GIF


Obstacole

Dacă există obstacole, cel mai simplu mod este să completați cu o limitare de distanță (căutare lățime-prima). În figura de mai jos ne limităm la patru mișcări. În cod, franjuri[k] este o matrice de toate hexagoane la care se poate ajunge în k pași. De fiecare dată când trecem prin bucla principală, extindem nivelul k-1 cu nivelul k.

Funcția cube_reachable(start, movement): var vizitat = set() add start la vizitat var franjuri = franjuri.append() pentru fiecare 1< k ≤ movement: fringes.append() for each cube in fringes: for each 0 ≤ dir < 6: var neighbor = cube_neighbor(cube, dir) if neighbor not in visited, not blocked: add neighbor to visited fringes[k].append(neighbor) return visited

Se întoarce

Având în vedere un vector hexagon (diferența dintre două hexagoane), poate fi necesar să-l rotim astfel încât să indice celălalt hexagon. Acest lucru este ușor de făcut cu coordonatele cubice dacă rămâneți la o rotație de 1/6 cerc.

O rotație de 60° spre dreapta mută fiecare coordonată cu o poziție spre dreapta:

[x, y, z] la [-z, -x, -y]
O rotație de 60° la stânga mută fiecare coordonată cu o poziție spre stânga:

[x, y, z] la [-y, -z, -x]



„După ce te-ai jucat” [în articolul original] cu diagrama, poți vedea că fiecare rotație este de 60° schimbări semnează și „rotește” fizic coordonatele. După o rotație de 120°, semnele devin din nou aceleași. O rotație de 180° schimbă semnele, dar coordonatele revin la poziția inițială.

Iată secvența completă de rotație a poziției P în jurul poziției centrale C, rezultând o nouă poziție R:

  1. Convertiți pozițiile P și C în coordonate cubice.
  2. Calcularea unui vector prin scăderea centrului: P_din_C = P - C = Cub(P.x - C.x, P.y - C.y, P.z - C.z) .
  3. Rotiți vectorul P_from_C așa cum este descris mai sus și atribuiți vectorului final denumirea R_from_C .
  4. Convertirea vectorului înapoi în poziție prin adăugarea centrului: R = R_from_C + C = Cube(R_from_C.x + C.x, R_from_C.y + C.y, R_from_C.z + C.z) .
  5. Convertește poziția cubică R înapoi la sistemul de coordonate dorit.
Există mai multe etape de transformare, dar fiecare dintre ele este destul de simplă. Este posibil să scurtați unii dintre acești pași definind rotația direct în coordonate axiale, dar vectorii hexagonali nu funcționează cu coordonatele offset și nu știu cum să scurtez pașii pentru coordonatele offset. Consultați și discuția despre schimbul de stive pentru alte modalități de a calcula rotația.

Inele

Inel simplu

Pentru a afla dacă un anumit hexagon aparține unui inel cu o rază dată, trebuie să calculați distanța de la acest hexagon până la centru și să aflați dacă este egal cu raza. Pentru a obține o listă cu toate astfel de hexagoane, trebuie să faceți pași de rază din centru și apoi să urmați vectorii rotiți de-a lungul traseului de-a lungul inelului.

Funcția cube_ring(center, radius): var rezultate = # acest cod nu funcționează pentru rază == 0; intelegi de ce? var cub = cube_add(centr, cube_scale(cube_direction(4), radius)) pentru fiecare 0 ≤ i< 6: for each 0 ≤ j < radius: results.append(cube) cube = cube_neighbor(cube, i) return results
În acest cod, cubul începe pe un inel, arătat cu o săgeată mare de la centru până la colțul diagramei. Am ales unghiul 4 pentru a începe, deoarece se potrivește cu calea în care se mișcă numerele de direcție. Este posibil să aveți nevoie de un unghi de pornire diferit. La fiecare etapă a buclei interioare, cubul mișcă un hexagon în jurul inelului. După pași de 6 * rază ajunge acolo unde a început.


Inele spiralate

Trecând prin inele într-un model în spirală, putem completa părțile interioare ale inelelor:

Funcția cube_spiral(center, radius): var rezultate = pentru fiecare 1 ≤ k ≤ radius: results = results + cube_ring(center, k) returnează rezultate



Aria unui hexagon mare este suma tuturor cercurilor plus 1 pentru centru. Utilizați această formulă pentru a calcula suprafața.

Traversarea hexagoanelor în acest fel poate fi folosită și pentru a calcula intervalul de mișcare (vezi mai sus).

Zona de vizibilitate

Ce este vizibil dintr-o poziție dată la o anumită distanță și nu este blocat de obstacole? Cel mai simplu mod de a determina acest lucru este de a trasa o linie la fiecare hexagon dintr-un interval dat. Dacă linia nu se întâlnește cu pereții, atunci vedeți un hexagon. Deplasați mouse-ul peste hexagoane [pe diagrama din articolul original] pentru a vedea cum sunt trase liniile către aceste hexagoane și pereții pe care liniile se întâlnesc.

Acest algoritm poate fi lent pe suprafețe mari, dar este ușor de implementat, așa că recomand să începeți cu el.

GIF



Există multe definiții diferite ale vizibilității. Vrei să vezi centrul altui hexagon din centrul celui original? Vrei să vezi vreo parte dintr-un alt hexagon din centrul celui original? Poate orice parte a altui hexagon din orice punct al celui inițial? Obstacolele care vă împiedică vederea sunt mai mici decât un hexagon complet? Scope este un concept mai complicat și mai variat decât pare la prima vedere. Să începem cu cel mai simplu algoritm, dar așteptați-vă ca acesta să calculeze corect răspunsul în proiectul dvs. Există chiar și cazuri când un algoritm simplu produce rezultate ilogice.

Vreau să extind acest ghid în viitor. eu am



Articole aleatorii

Sus