Zbuduj kwadrat o boku 6 za pomocą kompasu. Jak zbudować regularny sześciokąt. Okrąg opisany i konstruowalność

Temat wielokątów jest poruszany w szkolnym programie nauczania, ale nie poświęca się mu wystarczającej uwagi. Tymczasem jest to ciekawe, a szczególnie dotyczy to sześciokąta lub sześciokąta foremnego - wszak wiele obiektów naturalnych ma taki kształt. Należą do nich plastry miodu i wiele innych. Forma ta bardzo dobrze sprawdza się w praktyce.

Definicja i konstrukcja

Sześciokąt foremny to płaska figura, która ma sześć boków jednakowej długości i taką samą liczbę równych kątów.

Jeśli przypomnimy sobie wzór na sumę kątów wielokąta

okazuje się, że na tej figurze jest ona równa 720°. Cóż, skoro wszystkie kąty figury są równe, nie jest trudno obliczyć, że każdy z nich jest równy 120°.

Rysowanie sześciokąta jest bardzo proste, wystarczy kompas i linijka.

Instrukcje krok po kroku będą wyglądać następująco:

Jeśli chcesz, możesz obejść się bez linii, rysując pięć okręgów o jednakowym promieniu.

Otrzymana w ten sposób figura będzie foremnym sześciokątem, co można udowodnić poniżej.

Właściwości są proste i interesujące

Aby zrozumieć właściwości regularnego sześciokąta, warto podzielić go na sześć trójkątów:

Pomoże to w przyszłości wyraźniej wyświetlić jego właściwości, z których główne to:

  1. ograniczona średnica koła;
  2. średnica okręgu wpisanego;
  3. kwadrat;
  4. obwód.

Okrąg opisany i konstruowalność

Wokół sześciokąta można opisać okrąg i tylko jeden. Ponieważ ta figura jest regularna, możesz to zrobić po prostu: narysuj dwusieczną z dwóch sąsiadujących rogów wewnątrz. Przecinają się w punkcie O i razem z bokiem między nimi tworzą trójkąt.

Kąty między bokiem sześciokąta a dwusiecznymi będą wynosić 60°, więc z pewnością możemy powiedzieć, że trójkąt, na przykład AOB, jest równoramienny. A ponieważ trzeci kąt również będzie równy 60°, jest on również równoboczny. Wynika z tego, że odcinki OA i OB są równe, co oznacza, że ​​mogą pełnić funkcję promienia okręgu.

Następnie możesz przejść do następnej strony, a także narysować dwusieczną od kąta w punkcie C. Rezultatem będzie kolejny trójkąt równoboczny, a bok AB będzie wspólny dla obu, a OS będzie kolejnym promieniem, przez który przechodzi ten sam okrąg. Takich trójkątów będzie w sumie sześć i będą miały wspólny wierzchołek w punkcie O. Okazuje się, że da się opisać okrąg, a jest go tylko jeden, a jego promień jest równy bokowi sześciokąt:

Dlatego możliwe jest zbudowanie tej figury za pomocą kompasu i linijki.

Cóż, obszar tego koła będzie standardowy:

Wpisane koło

Środek okręgu opisanego będzie pokrywał się ze środkiem okręgu wpisanego. Aby to sprawdzić, możesz narysować prostopadłe z punktu O do boków sześciokąta. Będą to wysokości trójkątów tworzących sześciokąt. A w trójkącie równoramiennym wysokość jest medianą boku, na którym spoczywa. Zatem wysokość ta jest niczym innym jak dwusieczną prostopadłą, która jest promieniem okręgu wpisanego.

Wysokość trójkąta równobocznego oblicza się w prosty sposób:

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

A ponieważ R=a i r=h, okazuje się, że

r=R(√3)/2.

W ten sposób okrąg przechodzi przez środki boków sześciokąta foremnego.

Jego powierzchnia będzie wynosić:

S=3πa²/4,

czyli trzy czwarte tego, co opisano.

Obwód i powierzchnia

Z obwodem wszystko jest jasne, jest to suma długości boków:

P=6a, Lub P=6R

Ale obszar będzie równy sumie wszystkich sześciu trójkątów, na które można podzielić sześciokąt. Ponieważ pole trójkąta oblicza się jako połowę iloczynu podstawy i wysokości, wówczas:

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

S=3R²(√3)/2

Ci, którzy chcą obliczyć tę powierzchnię poprzez promień okręgu wpisanego, mogą to zrobić:

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

Zabawne konstrukcje

Możesz dopasować trójkąt do sześciokąta, którego boki połączą wierzchołki w jeden:

W sumie będzie ich dwóch, a ich nakładanie się da Gwiazdę Dawida. Każdy z tych trójkątów jest równoboczny. Nie jest to trudne do zweryfikowania. Jeśli spojrzysz na bok AC, należy on do dwóch trójkątów jednocześnie - BAC i AEC. Jeśli w pierwszym z nich AB = BC, a kąt między nimi wynosi 120°, to każdy z pozostałych będzie miał 30°. Z tego możemy wyciągnąć logiczne wnioski:

  1. Wysokość ABC od wierzchołka B będzie równa połowie boku sześciokąta, ponieważ sin30°=1/2. Tym, którzy chcą to zweryfikować, można doradzić ponowne obliczenia, korzystając z twierdzenia Pitagorasa, które tutaj pasuje idealnie.
  2. Strona AC będzie równa dwóm promieniom okręgu wpisanego, co jest ponownie obliczane przy użyciu tego samego twierdzenia. Oznacza to, że AC=2(a(√3)/2)=a(√3).
  3. Trójkąty ABC, CDE i AEF są równe w dwóch bokach i w kącie między nimi, z czego wynika, że ​​boki AC, CE i EA są równe.

Przecinając się, trójkąty tworzą nowy sześciokąt, który również jest regularny. Udowodniono to po prostu:

Tym samym figura spełnia cechy foremnego sześciokąta - ma sześć równych boków i kątów. Z równości trójkątów na wierzchołkach łatwo wywnioskować długość boku nowego sześciokąta:

d=a(√3)/3

Będzie to jednocześnie promień okręgu opisanego wokół niego. Wpisany promień będzie o połowę mniejszy od boku dużego sześciokąta, co zostało udowodnione przy rozważaniu trójkąta ABC. Jego wysokość stanowi dokładnie połowę boku, zatem druga połowa to promień okręgu wpisanego w mały sześciokąt:

r₂=a/2

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

Okazuje się, że pole sześciokąta wewnątrz Gwiazdy Dawida jest trzy razy mniejsze niż pole dużego, w który wpisana jest gwiazda.

Od teorii do praktyki

Właściwości sześciokąta są bardzo aktywnie wykorzystywane zarówno w przyrodzie, jak i w różnych dziedzinach działalności człowieka. Przede wszystkim dotyczy to śrub i nakrętek - łby pierwszej i drugiej to nic innego jak zwykły sześciokąt, jeśli nie uwzględnić fazowań. Rozmiar kluczy odpowiada średnicy wpisanego koła, czyli odległości między przeciwległymi krawędziami.

Swoje zastosowanie znalazły także płytki sześciokątne. Jest znacznie mniej powszechny niż czworokątny, ale wygodniej jest go ułożyć: w jednym punkcie spotykają się trzy płytki, a nie cztery. Kompozycje mogą okazać się bardzo ciekawe:

Produkowane są również płyty betonowe do kostki brukowej.

Występowanie sześciokątów w przyrodzie jest po prostu wyjaśnione. Dlatego najłatwiej jest ciasno dopasować koła i kule do płaszczyzny, jeśli mają tę samą średnicę. Z tego powodu plastry miodu mają taki kształt.

Konstrukcja sześciokąta foremnego wpisanego w okrąg. Konstruowanie pięciokąta foremnego wzdłuż danego boku. Przesuń igłę kompasu do punktu przecięcia właśnie narysowanego łuku z okręgiem. Konstrukcję tę można wykonać za pomocą kwadratu i kompasu. Regularny sześciokąt można zbudować za pomocą prostej krawędzi i kwadratu 30X60°. Konstruuj wierzchołki narożników foremnego sześciokąta.


Konstrukcja trójkąta równobocznego wpisanego w okrąg. Wierzchołki takiego trójkąta można skonstruować za pomocą kompasu i kwadratu o kątach 30 i 60° lub tylko jednego kompasu. Aby skonstruować bok 2-3, ustaw poprzeczkę w pozycji pokazanej liniami przerywanymi i poprowadź linię prostą przez punkt 2, co wyznaczy trzeci wierzchołek trójkąta.

Metoda 1 z 3: Narysuj idealny sześciokąt za pomocą kompasu

Zaznaczamy punkt 1 na okręgu i przyjmujemy go jako jeden z wierzchołków pięciokąta. Niech będzie dany okrąg o średnicy D; musisz zmieścić w nim regularny siedmiokąt (ryc. 65). Podziel pionową średnicę okręgu na siedem równych części. Z punktu 7 o promieniu równym średnicy okręgu D opisujemy łuk aż do przecięcia się z kontynuacją średnicy poziomej w punkcie F. Punkt F nazywamy biegunem wielokąta.

Technika konstruowania wielokątów foremnych opiera się na umiejętności konstruowania dwusiecznych kątów i dwusiecznych prostopadłych odcinków.

Pierwsza kolumna tej tabeli pokazuje liczbę boków foremnego wielokąta wpisanego, a druga kolumna pokazuje współczynniki. Długość boku danego wielokąta oblicza się mnożąc promień danego okręgu przez współczynnik odpowiadający liczbie boków tego wielokąta.

Temat tej lekcji wideo to „Konstrukcja wielokątów foremnych”. Zdefiniujemy także ponownie wielokąt foremny, przedstawimy go graficznie, a następnie jeszcze raz upewnimy się, że środki okręgów wpisanych i opisanych wokół takiej figury będą się pokrywać. W ten wielokąt zawsze można wpisać okrąg i zawsze można wokół niego opisać okrąg. Na poprzednich lekcjach dowiedzieliśmy się, że dwusieczne jego kątów i dwusieczne prostopadłych do jego boków odgrywają podstawową rolę w opisie właściwości wielokąta.

4. Otrzymaliśmy wymagany trójkąt foremny ABC. Problem jest rozwiązany. 3. Ustawiając jedną nogę kompasu w dowolnym punkcie A1 na okręgu, drugą nogą zaznaczamy na tym samym okręgu punkt A2 i łączymy go z punktem A1. Otrzymujemy pierwszą stronę sześciokąta. 3. Wykorzystując dwusieczne prostopadłe do boków wielokąta wyrzuconego z punktu O, dzielimy na pół wszystkie jego boki i wszystkie łuki okręgu zawartego pomiędzy sąsiednimi wierzchołkami.

Konstrukcje geometryczne są jedną z ważnych części uczenia się. Igła powinna przebić narysowaną linię. Im dokładniej kompas zostanie zainstalowany, tym dokładniejsza będzie konstrukcja. Narysuj kolejny łuk przecinający okrąg. Konsekwentnie połącz wszystkie sześć punktów przecięcia łuków z oryginalnie narysowanym okręgiem. W takim przypadku sześciokąt może okazać się nieprawidłowy.

Aby otrzymać wierzchołki / - // - /// z punktów IV, V i VI narysuj linie poziome aż przetną się z okręgiem

Łączymy znalezione wierzchołki sekwencyjnie ze sobą. Siedmiokąt można skonstruować, rysując promienie z bieguna F i poprzez nieparzyste podziały średnicy pionowej. Środki obu okręgów pokrywają się (punkt O na ryc. 1). Rysunek pokazuje również promienie okręgów opisanych (R) i wpisanych (r).

Konstrukcja sześciokąta opiera się na fakcie, że jego bok jest równy promieniowi opisanego okręgu. W tej lekcji przyjrzymy się sposobom konstruowania wielokątów foremnych za pomocą kompasu i linijki. Druga metoda polega na tym, że jeśli zbudujesz sześciokąt foremny wpisany w okrąg, a następnie połączysz jego wierzchołki przez jeden, otrzymasz trójkąt równoboczny. Powyższa metoda nadaje się do konstruowania wielokątów foremnych o dowolnej liczbie boków.

Konstrukcja sześciokąta foremnego wpisanego w okrąg. Konstrukcja sześciokąta opiera się na fakcie, że jego bok jest równy promieniowi opisanego okręgu. Dlatego, aby go skonstruować, wystarczy podzielić okrąg na sześć równych części i połączyć ze sobą znalezione punkty (ryc. 60, a).

Regularny sześciokąt można zbudować za pomocą prostej krawędzi i kwadratu 30X60°. Aby wykonać tę konstrukcję, przyjmujemy poziomą średnicę koła jako dwusieczną kątów 1 i 4 (ryc. 60, b), konstruujemy boki 1 -6, 4-3, 4-5 i 7-2, po czym rysujemy boki 5-6 i 3-2.

Konstruowanie trójkąta równobocznego wpisanego w okrąg. Wierzchołki takiego trójkąta można skonstruować za pomocą kompasu i kwadratu o kątach 30 i 60° lub tylko jednego kompasu.

Rozważmy dwa sposoby skonstruowania trójkąta równobocznego wpisanego w okrąg.

Pierwszy sposób(Rys. 61,a) opiera się na fakcie, że wszystkie trzy kąty trójkąta 7, 2, 3 zawierają 60°, a linia pionowa poprowadzona przez punkt 7 jest zarówno wysokością, jak i dwusieczną kąta 1. Ponieważ kąt wynosi 0-1- 2 równa się 30°, a następnie znajdź bok

1-2, wystarczy skonstruować kąt 30° z punktu 1 i boku 0-1. Aby to zrobić, zainstaluj poprzeczkę i kwadrat, jak pokazano na rysunku, narysuj linię 1-2, która będzie jednym z boków pożądanego trójkąta. Aby skonstruować bok 2-3, ustaw poprzeczkę w pozycji pokazanej liniami przerywanymi i poprowadź linię prostą przez punkt 2, co wyznaczy trzeci wierzchołek trójkąta.

Drugi sposób opiera się na fakcie, że jeśli zbudujesz sześciokąt foremny wpisany w okrąg, a następnie połączysz jego wierzchołki przez jeden, otrzymasz trójkąt równoboczny.

Aby skonstruować trójkąt (ryc. 61, b), zaznacz wierzchołek 1 na średnicy i narysuj linię średnicową 1-4. Następnie od punktu 4 o promieniu D/2 opisujemy łuk aż do przecięcia się z okręgiem w punktach 3 i 2. Powstałe punkty będą dwoma pozostałymi wierzchołkami pożądanego trójkąta.

Konstruowanie kwadratu wpisanego w okrąg. Konstrukcję tę można wykonać za pomocą kwadratu i kompasu.

Pierwsza metoda polega na tym, że przekątne kwadratu przecinają się w środku opisanego okręgu i są nachylone do jego osi pod kątem 45°. Na tej podstawie montujemy poprzeczkę i kwadrat o kątach 45°, jak pokazano na ryc. 62, a i zaznacz punkty 1 i 3. Następnie przez te punkty rysujemy poziome boki kwadratu 4-1 i 3-2 za pomocą poprzeczki. Następnie za pomocą prostej krawędzi rysujemy pionowe boki kwadratu 1-2 i 4-3 wzdłuż nogi kwadratu.

Druga metoda opiera się na fakcie, że wierzchołki kwadratu przecinają na pół łuki koła zawartego między końcami średnicy (ryc. 62, b). Zaznaczamy punkty A, B i C na końcach dwóch wzajemnie prostopadłych średnic i od nich promieniem y opisujemy łuki, aż się przetną.

Następnie przez punkty przecięcia łuków rysujemy pomocnicze linie proste, zaznaczone na rysunku liniami ciągłymi. Punkty ich przecięcia z okręgiem wyznaczą wierzchołki 1 i 3; 4 i 2. Wierzchołki tak otrzymanego kwadratu łączymy szeregowo ze sobą.

Konstrukcja pięciokąta foremnego wpisanego w okrąg.

Aby dopasować pięciokąt foremny do okręgu (ryc. 63), wykonujemy następujące konstrukcje.

Zaznaczamy punkt 1 na okręgu i przyjmujemy go jako jeden z wierzchołków pięciokąta. Dzielimy odcinek AO na pół. W tym celu opisujemy łuk z punktu A promieniem AO aż do jego przecięcia z okręgiem w punktach M i B. Łącząc te punkty linią prostą otrzymujemy punkt K, który następnie łączymy z punktem 1. Za pomocą o promieniu równym odcinku A7, opisujemy łuk od punktu K aż do przecięcia się z linią średnicową AO w punkcie H. Łącząc punkt 1 z punktem H, otrzymujemy bok pięciokąta. Następnie korzystając z rozwiązania kompasu równego odcinka 1H, opisującego łuk od wierzchołka 1 do przecięcia z okręgiem, znajdujemy wierzchołki 2 i 5. Po wykonaniu nacięć z wierzchołków 2 i 5 tym samym rozwiązaniem kompasu otrzymujemy pozostałe wierzchołki 3 i 4. Znalezione punkty łączymy ze sobą sekwencyjnie.

Konstruowanie pięciokąta foremnego wzdłuż danego boku.

Aby zbudować pięciokąt foremny wzdłuż danego boku (ryc. 64), dzielimy odcinek AB na sześć równych części. Z punktów A i B o promieniu AB opisujemy łuki, których przecięcie da punkt K. Przez ten punkt i podział 3 na prostą AB rysujemy prostą pionową.

Otrzymujemy punkt 1-wierzchołek pięciokąta. Następnie o promieniu AB, od punktu 1 opisujemy łuk aż do jego przecięcia z łukami narysowanymi wcześniej z punktów A i B. Punkty przecięcia łuków wyznaczają wierzchołki pięciokąta 2 i 5. Znalezione wierzchołki łączymy w serie ze sobą.

Konstrukcja siedmioboku foremnego wpisanego w okrąg.

Niech będzie dany okrąg o średnicy D; musisz zmieścić w nim regularny siedmiokąt (ryc. 65). Podziel pionową średnicę okręgu na siedem równych części. Z punktu 7 o promieniu równym średnicy okręgu D opisujemy łuk aż do przecięcia się z kontynuacją średnicy poziomej w punkcie F. Punkt F nazywamy biegunem wielokąta. Przyjmując punkt VII za jeden z wierzchołków siedmiokąta, wyciągamy promienie z bieguna F przez parzyste podziały średnicy pionowej, których przecięcie z okręgiem wyznaczy wierzchołki VI, V i IV siedmiokąta. Aby otrzymać wierzchołki / - // - /// z punktów IV, V i VI, narysuj linie poziome aż przetną się z okręgiem. Łączymy znalezione wierzchołki sekwencyjnie ze sobą. Siedmiokąt można skonstruować, rysując promienie z bieguna F i poprzez nieparzyste podziały średnicy pionowej.

Powyższa metoda nadaje się do konstruowania wielokątów foremnych o dowolnej liczbie boków.

Podziału koła na dowolną liczbę równych części można również dokonać, korzystając z danych zawartych w tabeli. 2, który podaje współczynniki umożliwiające wyznaczenie wymiarów boków wielokątów foremnych wpisanych.

Konstrukcje geometryczne są jedną z głównych części treningu. Kształtują myślenie przestrzenne i logiczne, a także pozwalają zrozumieć prymitywną i naturalną ważność geometryczną. Konstrukcje wykonuje się na płaszczyźnie za pomocą kompasu i linijki. Narzędzia te można wykorzystać do konstruowania dużej liczby kształtów geometrycznych. Jednocześnie wiele figur, które wydają się dość trudne, buduje się przy użyciu najprostszych zasad. Na przykład, jak zbudować regularny sześciokąt, można opisać w kilku słowach.

Będziesz potrzebować

  • Kompasy, linijka, ołówek, kartka papieru.

Instrukcje

1. Narysuj okrąg. Ustaw pewną odległość między nóżkami kompasu. Odległość ta będzie promieniem okręgu. Wybierz promień w taki sposób, aby rysowanie okręgu było w miarę wygodne. Okrąg musi w całości mieścić się na kartce papieru. Zbyt duża lub zbyt mała odległość pomiędzy nóżkami kompasu może spowodować jego zmianę podczas rysowania. Optymalna odległość będzie taka, przy której kąt pomiędzy nóżkami kompasu będzie wynosił 15-30 stopni.

2. Konstruuj wierzchołki narożników foremnego sześciokąta. Umieść nóżkę kompasu, w której zamocowana jest igła, w dowolnym miejscu okręgu. Igła powinna przebić narysowaną linię. Im dokładniej kompas zostanie zainstalowany, tym dokładniejsza będzie konstrukcja. Narysuj łuk kołowy tak, aby przecinał wcześniej narysowany okrąg. Przesuń igłę kompasu do punktu przecięcia właśnie narysowanego łuku z okręgiem. Narysuj kolejny łuk przecinający okrąg. Przesuń ponownie igłę kompasu do punktu przecięcia łuku i okręgu i ponownie narysuj łuk. Powtórz tę czynność jeszcze trzy razy, poruszając się w jednym kierunku po okręgu. Każdy powinien mieć sześć łuków i sześć punktów przecięcia.

3. Zbuduj dodatni sześciokąt. Stopniowo połącz wszystkie sześć punktów przecięcia łuków z oryginalnie narysowanym okręgiem. Połącz punkty liniami prostymi narysowanymi linijką i ołówkiem. Po tych czynnościach otrzymamy prawidłowy sześciokąt wpisany w okrąg.

Sześciokąt Uważa się, że wielokąt ma sześć kątów i sześć boków. Wielokąty mogą być wypukłe lub wklęsłe. Sześciokąt wypukły ma wszystkie kąty wewnętrzne rozwarte, natomiast sześciokąt wklęsły ma jeden lub więcej kątów ostrych. Sześciokąt jest dość łatwy do skonstruowania. Odbywa się to w kilku krokach.

Będziesz potrzebować

  • Ołówek, kartka papieru, linijka

Instrukcje

1. Weź kartkę papieru i zaznacz na niej 6 punktów, mniej więcej tak, jak pokazano na ryc. 1.

2. Po zaznaczeniu punktów weź linijkę i ołówek i za ich pomocą krok po kroku, jeden po drugim, połącz punkty tak, jak to wygląda na ryc. 2.

Wideo na ten temat

Notatka!
Suma wszystkich kątów wewnętrznych sześciokąta wynosi 720 stopni.

Sześciokąt jest wielokątem, który ma sześć kątów. Aby narysować dowolny sześciokąt, musisz wykonać 2 kroki każdy.

Będziesz potrzebować

  • Ołówek, linijka, kartka papieru.

Instrukcje

1. Musisz wziąć ołówek do ręki i zaznaczyć 6 losowych kropek na arkuszu. W przyszłości punkty te będą pełnić rolę narożników sześciokąta. (ryc. 1)

2. Weź linijkę i na podstawie tych punktów narysuj 6 odcinków, które łączyłyby się ze sobą wzdłuż wcześniej narysowanych punktów (ryc. 2)

Wideo na ten temat

Notatka!
Specjalnym rodzajem sześciokąta jest sześciokąt dodatni. Nazywa się to tak, ponieważ wszystkie jego boki i kąty są sobie równe. Możesz opisać lub wpisać okrąg wokół takiego sześciokąta. Warto zauważyć, że w punktach uzyskanych poprzez dotknięcie wpisanego okręgu i boków sześciokąta, boki dodatniego sześciokąta są podzielone na pół.

Pomocna rada
W naturze pozytywne sześciokąty są bardzo popularne. Na przykład cały plaster miodu ma dodatni kształt sześciokąta. Albo sieć krystaliczna grafenu (modyfikacja węgla) również ma kształt dodatniego sześciokąta.

Jak zbudować jedno lub drugie narożnik- wielkie pytanie. Ale dla niektórych kątów zadanie jest niewidocznie uproszczone. Jednym z tych kątów jest narożnik przy 30 stopniach. Jest równa?/6, czyli liczba 30 jest dzielnikiem 180. Poza tym znany jest jej sinus. Pomaga to w jego budowie.

Będziesz potrzebować

  • kątomierz, kwadrat, kompas, linijka

Instrukcje

1. Najpierw przyjrzyjmy się szczególnie prymitywnej sytuacji, gdy masz w rękach kątomierz. Następnie można łatwo odłożyć do tego linię prostą pod kątem 30 stopni, korzystając z podpórki.

2. Oprócz kątomierza są też narożnikłuki, których jeden z kątów jest równy 30 stopni. Potem kolejny narożnik narożnik kąt będzie równy 60 stopni, to znaczy potrzebujesz wizualnie mniejszego narożnik skonstruować wymaganą linię prostą.

3. Przejdźmy teraz do nietrywialnych sposobów konstruowania kąta 30 stopni. Jak wiadomo, sinus kąta 30 stopni jest równy 1/2. Aby to skonstruować, musimy konstruować bezpośrednio narożnik cjalny narożnik Nik. Możliwe jest skonstruowanie dwóch prostych prostopadłych. Ale tangens 30 stopni jest liczbą niewymierną, dlatego możemy tylko w przybliżeniu obliczyć stosunek między nogami (wyłącznie, jeśli nie ma kalkulatora), a zatem skonstruować narożnik około 30 stopni.

4. W takim przypadku możliwe jest wykonanie dokładnej konstrukcji. Zbudujmy ponownie dwie prostopadłe linie proste, na których nogi będą ustawione prosto narożnik nie narożnik Nik. Połóżmy jedną prostą nogę BC o pewnej długości, podpierając się kompasem (B – prosta narożnik). Następnie zwiększymy długość między nogami kompasu 2 razy, co jest elementarne. Rysując okrąg o środku w punkcie C o promieniu tej długości, znajdujemy punkt przecięcia okręgu z inną prostą. Ten punkt będzie bezpośrednio punktem A narożnik nie narożnik ABC i narożnik A będzie równe 30 stopni.

5. Wyprostowany narożnik jest dozwolone pod kątem 30 stopni i przy wsparciu koła, stosując to, co jest równe?/6. Skonstruujmy okrąg o promieniu OB. Spójrzmy na teorię narożnik nik, gdzie OA = OB = R – promień okręgu, gdzie narożnik OAB = 30 stopni. Niech OE będzie wysokością tego trójkąta równoramiennego narożnik nik, a co za tym idzie, jego dwusieczna i mediana. Następnie narożnik AOE = 15 stopni i zgodnie ze wzorem na półkąt sin(15o) = (sqrt(3)-1)/(2*sqrt(2)). W rezultacie AE = R*sin(15o). Stąd AB = 2AE = 2R*sin(15o). Konstruując okrąg o promieniu BA ze środkiem w punkcie B, znajdujemy punkt przecięcia A tego okręgu z punktem początkowym. Kąt AOB będzie wynosić 30 stopni.

6. Jeśli w jakiś sposób możemy wyznaczyć długość łuków, to pomijając łuk o długości?*R/6, również otrzymamy narożnik przy 30 stopniach.

Notatka!
Musimy pamiętać, że w paragrafie 5 możemy skonstruować kąt tylko w przybliżeniu, ponieważ w obliczeniach pojawią się liczby niewymierne.

Sześciokąt nazywany szczególnym przypadkiem wielokąta - figury utworzonej przez większość punktów płaszczyzny, ograniczonej zamkniętą polilinią. Z kolei dodatni sześciokąt (sześciokąt) to także przypadek szczególny - jest to wielokąt o sześciu równych bokach i równych kątach. Liczba ta jest znacząca, ponieważ długość wszystkich jej boków jest równa promieniowi okręgu opisanego wokół figury.

Będziesz potrzebować

  • – kompas;
  • - linijka;
  • - ołówek;
  • - papier.

Instrukcje

1. Wybierz długość boku sześciokąta. Weź kompas i ustaw odległość między końcem igły, znajdującym się na jednej z jej nóg, a końcem ołowiu, znajdującym się na drugiej nodze, równą długości boku rysowanej figury. Aby to zrobić, możesz użyć linijki lub wybrać losową odległość, jeśli ten moment nie jest znaczący. Jeśli to możliwe, zabezpiecz nogi kompasu śrubą.

2. Narysuj okrąg za pomocą kompasu. Wybrana odległość pomiędzy ramionami będzie promieniem okręgu.

3. Podziel okrąg za pomocą kropek na sześć równych części. Punkty te będą wierzchołkami rogów sześciokąta i odpowiednio końcami odcinków reprezentujących jego boki.

4. Umieść nogę kompasu z igłą w dowolnym punkcie znajdującym się na linii zarysowanego okręgu. Igła powinna prawidłowo przebić linię. Dokładność konstrukcji zależy bezpośrednio od dokładności instalacji kompasu. Narysuj łuk za pomocą kompasu tak, aby przecinał narysowany jako pierwszy okrąg w 2 punktach.

5. Przesuń nogę kompasu z igłą do jednego z punktów przecięcia narysowanego łuku z oryginalnym okręgiem. Narysuj kolejny łuk, również przecinający okrąg w 2 punktach (jeden z nich będzie pokrywał się z punktem poprzedniego położenia igły kompasu).

6. W ten sam sposób przestaw igłę kompasu i narysuj łuki jeszcze cztery razy. Poruszaj nogą kompasu z igłą w jednym kierunku po okręgu (zawsze zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara). W rezultacie należy zidentyfikować sześć punktów przecięcia łuków z pierwotnie skonstruowanym okręgiem.

7. Narysuj dodatni sześciokąt. Stopniowo, w parach, połącz sześć punktów uzyskanych w poprzednim kroku segmentami. Narysuj segmenty za pomocą ołówka i linijki. Rezultatem będzie prawidłowy sześciokąt. Po zakończeniu budowy możesz usunąć elementy pomocnicze (łuki i okręgi).

Notatka!
Sensowne jest takie dobranie odległości między nóżkami kompasu, aby kąt między nimi wynosił 15-30 stopni, wręcz przeciwnie, podczas wykonywania konstrukcji odległość tę można łatwo zgubić.

Budując lub opracowując plany projektu domu, często konieczne jest budowanie narożnik, równy już istniejącemu. Próbki i szkolne umiejętności geometrii są pomocne.

Instrukcje

1. Kąt tworzą dwie linie proste wychodzące z jednego punktu. Punkt ten nazwiemy wierzchołkiem kąta, a linie będą bokami kąta.

2. Użyj trzech liter do oznaczenia narożników: jednej u góry i dwóch po bokach. Zwany narożnik, zaczynając od litery znajdującej się po jednej stronie, następnie nazywa się literę znajdującą się na górze, a następnie literę znajdującą się po drugiej stronie. Użyj innych metod zaznaczania narożników, jeśli wygodniej jest Ci naprzeciwko. Czasami nazwana jest tylko jedna litera, która znajduje się na górze. I dozwolone jest oznaczanie kątów greckimi literami, powiedzmy α, β, γ.

3. Są sytuacje, w których trzeba rysować narożnik, tak aby był równy danemu kątowi. Jeśli podczas konstruowania rysunku nie ma możliwości użycia kątomierza, można sobie poradzić jedynie za pomocą linijki i kompasu. Możliwe jest, że na linii prostej oznaczonej na rysunku literami MN konieczne jest zbudowanie narożnik w punkcie K tak, aby był równy kątowi B. Czyli z punktu K należy poprowadzić linię prostą tworzącą się z linią MN narożnik, taki, który będzie równy kątowi B.

4. Najpierw zaznacz punkt na całym boku danego kąta, powiedzmy punkty A i C, następnie połącz punkty C i A linią prostą. Zdobądź tre narożnik nic ABC.

5. Teraz skonstruuj ten sam tre na prostej MN narożnik tak aby jego wierzchołek B znajdował się na prostej w punkcie K. Skorzystaj z reguły konstruowania trójkąta narożnik z trzech stron. Odłóż odcinek KL od punktu K. Musi być równy segmentowi BC. Zdobądź punkt L.

6. Z punktu K narysuj okrąg o promieniu równym odcinku BA. Od L narysuj okrąg o promieniu CA. Połącz powstały punkt (P) przecięcia 2 okręgów z K. Zdobądź trzy narożnik nik KPL, ten, który będzie równy trzy narożnik Książka ABC. W ten sposób otrzymujesz narożnik K. Będzie on równy kątowi B. Aby ta konstrukcja była wygodniejsza i szybsza, od wierzchołka B oddziel równe odcinki, korzystając z jednego rozwiązania kompasu, nie ruszając nogami, opisz okrąg o tym samym promieniu od punktu K.

Wideo na ten temat

Notatka!
Unikaj przypadkowej zmiany odległości pomiędzy nóżkami kompasu. W takim przypadku sześciokąt może okazać się nieprawidłowy.

Pomocna rada
Ma talent do konstruowania konstrukcji za pomocą kompasu z doskonale zaostrzoną końcówką. Dzięki temu konstrukcje będą szczególnie dokładne.

W niektórych grach używane są siatki sześciokątne (siatki sześciokątne), ale nie są one tak proste i powszechne jak siatki prostokątne. Zbieram zasoby na temat siatek heksadecymalnych od prawie 20 lat i napisałem ten przewodnik po najbardziej eleganckich podejściach, zaimplementowanych w najprostszym kodzie. W artykule w szerokim zakresie wykorzystano przewodniki Charlesa Fu i Clarka Verbrugge. Opiszę różne sposoby tworzenia siatek sześciokątnych, ich relacje i najpopularniejsze algorytmy. Wiele części tego artykułu ma charakter interaktywny: wybranie typu siatki powoduje zmianę odpowiednich diagramów, kodu i tekstów. (Uwaga na: dotyczy to tylko oryginału, radzę go przestudiować. W tłumaczeniu wszystkie informacje z oryginału zostają zachowane, ale bez interaktywności.).

Przykłady kodu w artykule są napisane w pseudokodzie, dzięki czemu są łatwiejsze do odczytania i zrozumienia w celu napisania własnej implementacji.

Geometria

Sześciokąty to wielokąty sześcioboczne. Regularne sześciokąty mają wszystkie boki (krawędzie) tej samej długości. Będziemy pracować tylko z regularnymi sześciokątami. Zazwyczaj siatki sześciokątne wykorzystują orientację poziomą (spiczasty wierzchołek) i pionową (płaski wierzchołek).


Sześciokąty z płaskimi (po lewej) i ostrymi (po prawej) wierzchołkami

Sześciokąty mają 6 ścian. Każda ściana jest wspólna dla dwóch sześciokątów. Sześciokąty mają 6 narożników. Każdy punkt narożny jest wspólny dla trzech sześciokątów. Możesz przeczytać więcej o środkach, krawędziach i punktach narożnych w moim artykule na temat części siatkowych (kwadratów, sześciokątów i trójkątów).

Kąty

W regularnym sześciokącie kąty wewnętrzne wynoszą 120°. Istnieje sześć „klinów”, z których każdy jest trójkątem równobocznym o kącie wewnętrznym 60°. Punkt narożny I znajduje się w odległości (60° * i) + 30°, jednostki wielkości od centrum centrum. W kodzie:

Funkcja hex_corner(środek, rozmiar, i): var angle_deg = 60 * i + 30 var angle_rad = PI / 180 * angle_deg return Point(center.x + size * cos(kąt_rad), center.y + size * sin(angle_rad) )
Aby wypełnić sześciokąt, musisz uzyskać wierzchołki wielokąta od hex_corner(…, 0) do hex_corner(…, 5) . Aby narysować kontur sześciokąta, musisz użyć tych wierzchołków, a następnie ponownie narysować linię w hex_corner(..., 0) .

Różnica między tymi dwiema orientacjami polega na tym, że x i y są zamienione miejscami, co powoduje zmianę kątów: sześciokąty z płaskim wierzchołkiem mają kąty 0°, 60°, 120°, 180°, 240°, 300°, a sześciokąty ze spiczastym wierzchołkiem sześciokąty mają kąty 30°, 90°, 150°, 210°, 270°, 330°.


Narożniki sześciokątów z płaskimi i ostrymi wierzchołkami

Rozmiar i lokalizacja

Teraz chcemy umieścić razem kilka sześciokątów. W orientacji poziomej wysokość sześciokąta to wysokość = rozmiar * 2 . Odległość pionowa między sąsiednimi sześciokątami wynosi pion = wysokość * 3/4.

Szerokość sześciokąta szerokość = sqrt(3)/2 * wysokość . Odległość pozioma pomiędzy sąsiednimi sześciokątami wynosi horiz = szerokość.

Niektóre gry wykorzystują grafikę pikselową dla sześciokątów, która nie pasuje dokładnie do zwykłych sześciokątów. Wzory kąta i rozmieszczenia opisane w tej sekcji nie będą odpowiadać wymiarom takich sześciokątów. Pozostała część artykułu opisująca algorytmy siatki sześciokątnej ma zastosowanie nawet wtedy, gdy sześciokąty są lekko rozciągnięte lub zgniecione.



Układy współrzędnych

Zacznijmy składać sześciokąty w siatkę. W przypadku siatek kwadratów istnieje tylko jeden oczywisty sposób montażu. W przypadku sześciokątów istnieje wiele podejść. Zalecam używanie współrzędnych sześciennych jako podstawowej reprezentacji. Do przechowywania map i wyświetlania współrzędnych użytkownikowi należy używać współrzędnych osiowych lub współrzędnych przesunięcia.

Przesunięcie współrzędnych

Najbardziej powszechnym podejściem jest przesunięcie każdej kolejnej kolumny lub wiersza. Kolumny są oznaczone jako col lub q. Wiersze są oznaczone wierszem lub r . Możesz przesunąć nieparzyste lub parzyste kolumny/wiersze, więc poziome i pionowe sześciokąty mają dwie opcje.


Układ poziomy „nieparzysty-r”


Układ poziomy „parzysty-r”


Pionowy układ „nieparzystego-q”.


Układ pionowy „parzysty-q”

Współrzędne sześcienne

Innym sposobem spojrzenia na siatki sześciokątne jest postrzeganie ich jako trzy główne osie, nie dwa, jak w siatkach kwadratów. Charakteryzują się elegancką symetrią.

Weźmy siatkę kostek i wytnijmy to płaszczyzna ukośna w punkcie x + y + z = 0. To dziwny pomysł, ale pomoże nam uprościć algorytmy siatki sześciokątnej. W szczególności będziemy mogli wykonywać standardowe operacje na współrzędnych kartezjańskich: sumowanie i odejmowanie współrzędnych, mnożenie i dzielenie przez wielkość skalarną, a także odległości.

Zwróć uwagę na trzy główne osie siatki sześcianów i ich związek z szóstką przekątna kierunki siatki sześciokątnej. Osie ukośne siatki odpowiadają głównemu kierunkowi siatki sześciokątnej.


Sześciokąty


kostki

Ponieważ mamy już algorytmy dla siatek kwadratowych i sześciennych, użycie współrzędnych sześciennych pozwala nam dostosować te algorytmy do siatek sześciokątnych. Będę używał tego systemu w przypadku większości algorytmów artykułu. Aby użyć algorytmów z innym układem współrzędnych, konwertuję współrzędne sześcienne, uruchamiam algorytm, a następnie konwertuję je z powrotem.

Dowiedz się, jak współrzędne sześcienne działają w przypadku siatki sześciokątnej. Po wybraniu sześciokątów podświetlone zostaną współrzędne sześcienne odpowiadające trzem osiom.

  1. Każdy kierunek siatki sześcianu odpowiada linie na siatce sześciokątów. Spróbuj wybrać sześciokąt z z równym 0, 1, 2, 3, aby zobaczyć połączenie. Linia jest zaznaczona na niebiesko. Spróbuj tego samego dla x (zielony) i y (fioletowy).
  2. Każdy kierunek siatki sześciokątnej jest kombinacją dwóch kierunków siatki sześcianu. Na przykład „północ” siatki sześciokątnej leży pomiędzy +y i -z , więc każdy krok o „północ” zwiększa y o 1 i zmniejsza z o 1.
Współrzędne sześcienne są rozsądnym wyborem w przypadku układu współrzędnych siatki sześciokątnej. Warunek to x + y + z = 0, więc musi być zachowany w algorytmach. Warunek zapewnia również, że dla każdego sześciokąta zawsze będzie istniała współrzędna kanoniczna.

Istnieje wiele różnych układów współrzędnych dla sześcianów i sześciokątów. W niektórych z nich warunek jest inny niż x + y + z = 0. Pokazałem tylko jeden z wielu systemów. Możesz także tworzyć współrzędne sześcienne za pomocą x-y, y-z, z-x, które mają swój własny zestaw interesujących właściwości, ale nie będę się nimi tutaj zajmować.

Można jednak argumentować, że nie chcesz przechowywać 3 liczb dla współrzędnych, ponieważ nie wiesz, jak przechowywać mapę w ten sposób.

Współrzędne osiowe

Osiowy układ współrzędnych, czasami nazywany „trapezowym” układem współrzędnych, jest zbudowany z dwóch lub trzech współrzędnych z sześciennego układu współrzędnych. Ponieważ mamy warunek x + y + z = 0, trzecia współrzędna nie jest potrzebna. Współrzędne osiowe są przydatne do przechowywania map i wyświetlania współrzędnych użytkownikowi. Podobnie jak w przypadku współrzędnych sześciennych, można używać standardowych operacji dodawania, odejmowania, mnożenia i dzielenia współrzędnych kartezjańskich.

Istnieje wiele sześciennych układów współrzędnych i wiele osiowych. W tym przewodniku nie będę omawiał każdej kombinacji. Wybiorę dwie zmienne, q (kolumna) i r (wiersz). Na diagramach w tym artykule q odpowiada x, a r odpowiada z, ale ta zgodność jest dowolna, ponieważ można obracać i obracać diagramy, aby uzyskać różne odpowiedniki.

Przewagą tego systemu nad siatkami przemieszczeń jest to, że algorytmy są bardziej zrozumiałe. Wadą systemu jest to, że przechowywanie prostokątnej karty jest trochę dziwne; zobacz sekcję dotyczącą zapisywania map. Niektóre algorytmy są jeszcze jaśniejsze we współrzędnych sześciennych, ale ponieważ mamy warunek x + y + z = 0, możemy obliczyć trzecią implikowaną współrzędną i zastosować ją w tych algorytmach. W moich projektach nazywam osie q, r, s, więc warunek wygląda następująco: q + r + s = 0 i w razie potrzeby mogę obliczyć s = -q - r.

Osie

Współrzędne przesunięcia są pierwszą rzeczą, o której myśli większość ludzi, ponieważ są takie same, jak standardowe współrzędne kartezjańskie używane w siatkach kwadratów. Niestety, jedna z dwóch osi musi przebiegać pod włos, co komplikuje sprawę. Systemy kostkowe i osiowe pokonują duże odległości i mają prostsze algorytmy, ale przechowywanie kart jest nieco bardziej złożone. Istnieje inny system zwany „naprzemiennym” lub „podwójnym”, ale nie będziemy go tutaj rozważać; niektórym łatwiej się z nimi pracuje niż sześciennie lub osiowo.


Współrzędne przesunięcia, sześcienne i osiowe

jest kierunkiem, w którym rośnie odpowiednia współrzędna. Prostopadła do osi jest linia, na której współrzędna pozostaje stała. Powyższe diagramy siatki przedstawiają linie prostopadłe.

Transformacja współrzędnych

Prawdopodobnie w swoim projekcie użyjesz współrzędnych osiowych lub przesunięć, ale wiele algorytmów łatwiej jest wyrazić we współrzędnych sześciennych. Dlatego musimy mieć możliwość konwersji współrzędnych między systemami.

Współrzędne osiowe są ściśle powiązane ze współrzędnymi sześciennymi, więc konwersja jest prosta:

# zamień współrzędne sześcienne na osiowe q = x r = z # zamień współrzędne osiowe na sześcienne x = q z = r y = -x-z
W kodzie te dwie funkcje można zapisać w następujący sposób:

Funkcja sześcienna_do_sześcianu(h): # osiowa var q = h.x var r = h.z return Hex(q, r) funkcja hex_to_cube(h): # sześcienna var x = h.q var z = h.r var y = -x-z powrót Cube(x, y , z)
Współrzędne przesunięcia są nieco bardziej skomplikowane:

Sąsiednie sześciokąty

Biorąc pod uwagę jeden sześciokąt, obok jakich sześciu sześciokątów się znajduje? Jak można się spodziewać, odpowiedź jest najłatwiejsza w przypadku współrzędnych sześciennych, całkiem łatwa w przypadku współrzędnych osiowych i nieco trudniejsza w przypadku współrzędnych przemieszczenia. Może być również konieczne obliczenie sześciu „ukośnych” sześciokątów.

Współrzędne sześcienne

Przesunięcie o jedno miejsce we współrzędnych szesnastkowych powoduje zmianę jednej z trzech współrzędnych sześciennych na +1, a drugiej na -1 (suma musi pozostać 0). Przy +1 mogą zmienić się trzy możliwe współrzędne, a przy -1 pozostałe dwie. Daje nam to sześć możliwych zmian. Każdy odpowiada jednemu z kierunków sześciokąta. Najprostszym i najszybszym sposobem jest wstępne obliczenie zmian i umieszczenie ich w sześciennej tabeli współrzędnych Cube(dx, dy, dz) w czasie kompilacji:

Zmienne kierunki = [ Kostka(+1, -1, 0), Kostka(+1, 0, -1), Kostka(0, +1, -1), Kostka(-1, +1, 0), Kostka( -1, 0, +1), Kostka(0, -1, +1) ] funkcja kierunek_kostki(kierunek): powrót wskazówki funkcja sąsiad_kostki(szesnastkowy, kierunek): powrót dodanie_kostki(szesnastkowy, kierunek_kostki(kierunek))

Współrzędne osiowe

Tak jak poprzednio, na początek używamy układu sześciennego. Weźmy tabelę Cube(dx, dy, dz) i przekształćmy ją w tabelę Hex(dq, dr):

Zmienne kierunki = [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0, +1) ] funkcja hex_direction(kierunek): powrót kierunki funkcja hex_neighbor(hex, kierunek): var dir = hex_direction(kierunek) return Hex(hex.q + dir.q, hex.r + dir.r)

Przesunięcie współrzędnych

We współrzędnych osiowych zmian dokonujemy w zależności od tego, gdzie jesteśmy na siatce. Jeżeli jesteśmy w przesuniętej kolumnie/wierszu, to zasada jest inna niż w przypadku kolumny/wiersza bez przesunięcia.

Tak jak poprzednio tworzymy tabelę liczb, które należy dodać do col i row . Jednak tym razem będziemy mieli dwie tablice, jedną dla nieparzystych kolumn/wierszy, a drugą dla parzystych. Spójrz na (1,1) na powyższym obrazie mapy siatki i zwróć uwagę, jak zmieniają się kolumny i wiersze, gdy poruszasz się w każdym z sześciu kierunków. Teraz powtórzmy proces dla (2,2). Tabele i kod będą różne dla każdego z czterech typów siatek przemieszczeń; tutaj znajduje się odpowiedni kod dla każdego typu siatki.

Dziwne-r
var kierunki = [ [ Hex(+1, 0), Hex(0, -1), Hex(-1, -1), Hex(-1, 0), Hex(-1, +1), Hex(0 , +1) ], [ szesnastkowe(+1, 0), szesnastkowe(+1, -1), szesnastkowe(0, -1), szesnastkowe(-1, 0), szesnastkowe(0, +1), szesnastkowe( +1, +1) ] ] funkcja offset_neighbor(hex, kierunek): var parity = hex.row & 1 var dir = kierunki return Hex(hex.col + dir.col, szesnastkowy rząd + katalog)


Nawet-r
var kierunki = [ [ 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) ] ] funkcja offset_neighbor(hex, kierunek): var parity = hex.row & 1 var dir = kierunki return Hex(hex.col + dir.col, szesnastkowy rząd + katalog)


Siatka dla wierszy parzystych (PARZYSTYCH) i nieparzystych (ODD).

Nieparzyste-q
var kierunki = [ [ 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) ] ] funkcja offset_neighbor(hex, kierunek): var parity = hex.col & 1 var dir = kierunki return Hex(hex.col + dir.col, szesnastkowy rząd + katalog)


Parzyste-q
var kierunki = [ [ Hex(+1, +1), Hex(+1, 0), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0 , +1) ], [ szesnastkowo(+1, 0), szesnastkowo(+1, -1), szesnastkowo(0, -1), szesnastkowo(-1, -1), szesnastkowo(-1, 0), szesnastkowo (0, +1) ] ] funkcja offset_neighbor(hex, kierunek): var parity = hex.col & 1 var dir = kierunki return Hex(hex.col + dir.col, szesnastkowy rząd + katalog)


Siatka dla kolumn parzystych (EVEN) i nieparzystych (ODD).

Przekątne

Poruszanie się w przestrzeni „ukośnej” we współrzędnych szesnastkowych zmienia jedną z trzech współrzędnych sześciennych o ±2, a pozostałe dwie o ∓1 (suma musi pozostać 0).

Różne przekątne = [ Sześcian(+2, -1, -1), Sześcian(+1, +1, -2), Sześcian(-1, +2, -1), Sześcian(-2, +1, +1 ), Kostka(-1, -1, +2), Kostka(+1, -2, +1) ] funkcja kostka_diagonalna_neighbor(hex, kierunek): return kostka_add(hex, przekątne)
Tak jak poprzednio, możemy przekonwertować te współrzędne na współrzędne osiowe, usuwając jedną z trzech współrzędnych, lub przekonwertować je na współrzędne przesunięcia, najpierw obliczając wyniki.


Odległości

Współrzędne sześcienne

W sześciennym układzie współrzędnych każdy sześciokąt jest sześcianem w przestrzeni trójwymiarowej. Sąsiednie sześciokąty są oddalone od siebie o 1 w siatce sześciokątów, ale o 2 od siebie w siatce sześcianów. Ułatwia to obliczanie odległości. W siatce kwadratów odległości Manhattanu wynoszą abs(dx) + abs(dy). W siatce sześcianów odległości Manhattanu wynoszą abs(dx) + abs(dy) + abs(dz) . Odległość w siatce sześciokątnej jest równa połowie z nich:

Funkcja odległość_kostki(a, b): powrót (abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)) / 2
Odpowiednikiem tego zapisu byłoby stwierdzenie, że jedna z trzech współrzędnych musi być sumą dwóch pozostałych, a następnie przyjęcie tego jako odległości. Możesz wybrać formę halvingu lub formę wartości maksymalnej poniżej, ale dają one ten sam wynik:

Funkcja odległość_kostki(a, b): return max(abs(a.x - b.x), abs(a.y - b.y), abs(a.z - b.z))
Na rysunku wartości maksymalne są zaznaczone kolorem. Należy również zauważyć, że każdy kolor reprezentuje jeden z sześciu kierunków „ukośnych”.

GIF-y


Współrzędne osiowe

W układzie osiowym trzecia współrzędna jest wyrażona pośrednio. Zamieńmy wartość osiową na sześcienną, aby obliczyć odległość:

Funkcja hex_distance(a, b): var ac = hex_to_cube(a) var bc = hex_to_cube(b) return odległość_kostki(ac, bc)
Jeśli w twoim przypadku kompilator inline (inline) hex_to_cube i kostki_distance wygeneruje taki kod:

Funkcja 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
Istnieje wiele różnych sposobów zapisywania odległości między sześciokątami we współrzędnych osiowych, ale niezależnie od metody zapisu odległość między sześciokątami w układzie osiowym jest pobierana z odległości Manhattanu w układzie sześciennym. Na przykład opisaną „różnicę różnic” uzyskuje się zapisując a.q + a.r - b.q - b.r jako a.q - b.q + a.r - b.r i używając postaci wartości maksymalnej zamiast formy dwudzielności odległość_sześcianu . Wszystkie są podobne, jeśli widzisz połączenie ze współrzędnymi sześciennymi.

Przesunięcie współrzędnych

Podobnie jak w przypadku współrzędnych osiowych, przekształcamy współrzędne przesunięcia na współrzędne sześcienne, a następnie wykorzystujemy odległość sześcienną.

Funkcja offset_distance(a, b): var ac = offset_to_cube(a) var bc = offset_to_cube(b) return odległość_kostki(ac, bc)
Użyjemy tego samego wzorca dla wielu algorytmów: przekonwertuj sześciokąty na sześciany, uruchom sześcienną wersję algorytmu i przekonwertuj wyniki sześcienne na współrzędne sześciokątne (współrzędne osiowe lub przesunięcia).

Rysowanie linii

Jak narysować linię od jednego sześciokąta do drugiego? Do rysowania linii używam interpolacji liniowej. Linia jest próbkowana równomiernie w N+1 punktach i obliczane jest, w których sześciokątach znajdują się te próbki.

GIF-y


  1. Najpierw obliczamy N, które będzie odległością w sześciokątach między punktami końcowymi.
  2. Następnie równomiernie próbkujemy N+1 punktów pomiędzy punktami A i B. Korzystając z interpolacji liniowej ustalamy, że dla wartości i od 0 do N włączając je, każdy punkt będzie miał wartość A + (B - A) * 1,0/N * I . Na rysunku te punkty kontrolne pokazano na niebiesko. Wynikiem są współrzędne zmiennoprzecinkowe.
  3. Przekonwertujmy każdy punkt kontrolny (float) z powrotem na sześciokąty (int). Algorytm nazywa się kostka_okrągła (patrz poniżej).
Złóż wszystko razem, aby narysować linię od A do B:

Funkcja lerp(a, b, t): // dla float zwróć a + (b - a) * t funkcja Cube_lerp(a, b, t): // dla sześciokątów zwróć Cube(lerp(a.x, b.x, t), lerp(a.y, b.y, t), lerp(a.z, b.z, t)) funkcja kostka_linedraw(a, b): var N = odległość_kostki(a, b) var wyniki = dla każdego 0 ≤ i ≤ N: wyniki.append( kostka_okrągła(cube_lerp(a, b, 1.0/N * i))) zwraca wyniki
Uwagi:

  • Zdarzają się przypadki, gdy kostka_lerp zwraca punkt znajdujący się dokładnie na krawędzi pomiędzy dwoma sześciokątami. Następnie kostka_okrągła przesuwa go w tym czy innym kierunku. Linie wyglądają lepiej, jeśli są przesunięte w jednym kierunku. Można tego dokonać dodając sześciokątną kostkę „epsilon” (1e-6, 1e-6, -2e-6) do jednego lub obu punktów końcowych przed rozpoczęciem pętli. Spowoduje to „przesunięcie” linii w jednym kierunku, tak aby nie uderzała w krawędzie.
  • Algorytm linii DDA w siatkach kwadratowych przyrównuje N do maksymalnej odległości wzdłuż każdej z osi. To samo robimy w przestrzeni sześciennej, która jest podobna do odległości w siatce sześciokątnej.
  • Funkcja Cube_lerp powinna zwrócić kostkę ze współrzędnymi zmiennoprzecinkowymi. Jeśli programujesz w języku o typie statycznym, nie będziesz mógł używać typu Cube. Zamiast tego możesz zdefiniować typ FloatCube lub wstawić funkcję do kodu rysowania linii, jeśli nie chcesz definiować innego typu.
  • Możesz zoptymalizować kod, wstawiając kostkę_lerp, a następnie obliczyć B.x-A.x, B.x-A.y i 1.0/N poza pętlą. Mnożenie można przekształcić w wielokrotne sumowanie. Rezultatem będzie coś w rodzaju algorytmu linii DDA.
  • Do rysowania linii używam współrzędnych osiowych lub sześciennych, ale jeśli chcesz pracować ze współrzędnymi przesuniętymi, sprawdź .
  • Istnieje wiele opcji rysowania linii. Czasami wymagane jest „przemalowanie”. Wysłano mi kod do rysowania superkrytych linii w sześciokątach, ale jeszcze się nim nie zainteresowałem.

Zakres ruchu

Zakres współrzędnych

Biorąc pod uwagę środek sześciokąta i zakres N, które sześciokąty znajdują się w odległości N kroków od niego?

Możemy wykonać odwrotność wzoru na odległość między sześciokątami odległość = max(abs(dx), abs(dy), abs(dz)) . Aby znaleźć wszystkie sześciokąty w N, potrzebujemy max(abs(dx), abs(dy), abs(dz)) ≤ N . Oznacza to, że potrzebne są wszystkie trzy wartości: abs(dx) ≤ N i abs(dy) ≤ N i abs(dz) ≤ N . Usuwając wartość bezwzględną, otrzymujemy -N ≤ dx ≤ N i -N ≤ dy ≤ N i -N ≤ dz ≤ N . W kodzie będzie to zagnieżdżona pętla:

Var wyniki = dla każdego -N ≤ dx ≤ N: dla każdego -N ≤ dy ≤ N: dla każdego -N ≤ dz ≤ N: jeśli dx + dy + dz = 0:results.append(cube_add(center, Cube(dx , dy, dz)))
Ten cykl będzie skuteczny, ale będzie dość nieskuteczny. Ze wszystkich wartości dz, przez które przechodzimy, tylko jedna faktycznie spełnia warunek kostki dx + dy + dz = 0. Zamiast tego bezpośrednio obliczymy wartość dz spełniającą warunek:

Var wyniki = dla każdego -N ≤ dx ≤ N: dla każdego max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N): var dz = -dx-dy wyniki.append(cube_add( środek, Kostka(dx, dy, dz)))
Cykl ten przebiega tylko wzdłuż wymaganych współrzędnych. Na rysunku każdy zakres to para linii. Każda linia jest nierównością. Bierzemy wszystkie sześciokąty spełniające sześć nierówności.

GIF-y


Nakładające się zakresy

Jeśli chcesz znaleźć sześciokąty znajdujące się w wielu zakresach, możesz przeciąć zakresy przed wygenerowaniem listy sześciokątów.

Można podejść do tego problemu z punktu widzenia algebry lub geometrii. Algebraicznie każdy region wyraża się jako warunki nierówności w postaci -N ≤ dx ≤ N i musimy znaleźć przecięcie tych warunków. Geometrycznie każdy region jest sześcianem w przestrzeni 3D i przetniemy dwa sześciany w przestrzeni 3D, aby otrzymać prostopadłościan w przestrzeni 3D. Następnie rzutujemy to z powrotem na płaszczyznę x + y + z = 0, aby otrzymać sześciokąty. Rozwiążę to zadanie algebraicznie.

Najpierw przepisujemy warunek -N ≤ dx ≤ N w bardziej ogólnej postaci x min ≤ x ≤ x max i przyjmujemy, że x min = środek.x - N i x max = środek.x + N . Zróbmy to samo dla y i z, uzyskując ogólną postać kodu z poprzedniej sekcji:

Var wyniki = dla każdego xmin ≤ x ≤ xmax: dla każdego max(ymin, -x-zmax) ≤ y ≤ min(ymax, -x-zmin): var z = -x-y wyniki.append(Cube(x, y, z))
Przecięcie dwóch zakresów a ≤ x ≤ b i c ≤ x ≤ d wynosi max(a, c) ≤ x ≤ min(b, d) . Ponieważ pole sześciokątów wyraża się jako zakresy powyżej x, y, z, możemy przeciąć każdy z zakresów x, y, z osobno, a następnie użyć zagnieżdżonej pętli do wygenerowania listy sześciokątów w przecięciu. Dla jednego obszaru sześciokątów bierzemy x min = H.x - N i x max = H.x + N , podobnie dla y i z . Dla przecięcia dwóch obszarów sześciokąta bierzemy x min = max(H1.x - N, H2.x - N) i x max = min(H1.x + N, H2.x + N), podobnie dla y i z. Ten sam wzór działa w przypadku przecięcia trzech lub więcej obszarów.

GIF-y


Przeszkody

Jeśli występują przeszkody, najprostszym sposobem jest wypełnienie z ograniczeniem odległości (przeszukiwanie w pierwszej kolejności). Na poniższym rysunku ograniczamy się do czterech ruchów. W kodzie fringes[k] to tablica wszystkich sześciokątów, do których można dotrzeć w k krokach. Za każdym razem, gdy przechodzimy przez pętlę główną, rozwijamy poziom k-1 o poziom k.

Funkcja kostka_reachable(start, ruch): var odwiedzona = set() dodaj początek odwiedzonych var fringes = fringes.append() dla każdego 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

Zakręty

Biorąc pod uwagę wektor sześciokątny (różnica między dwoma sześciokątami), być może będziemy musieli go obrócić tak, aby wskazywał drugi sześciokąt. Łatwo to zrobić w przypadku współrzędnych sześciennych, jeśli trzymasz się obrotu o 1/6 koła.

Obrót o 60° w prawo przesuwa każdą współrzędną o jedną pozycję w prawo:

[ x, y, z] do [-z, -x, -y]
Obrót o 60° w lewo przesuwa każdą współrzędną o jedną pozycję w lewo:

[ x, y, z] do [-y, -z, -x]



„Po zabawie” [w oryginalnym artykule] ze schematem widać, że każdy obrót wynosi 60° zmiany znaki i fizycznie „obraca” współrzędne. Po obrocie o 120° znaki znów stają się takie same. Obrót o 180° zmienia znaki, ale współrzędne wracają do pierwotnej pozycji.

Oto pełna sekwencja obrotu pozycji P wokół pozycji środkowej C, w wyniku której powstaje nowa pozycja R:

  1. Konwertuj pozycje P i C na współrzędne sześcienne.
  2. Obliczanie wektora poprzez odjęcie środka: P_from_C = P - C = Cube(P.x - C.x, P.y - C.y, P.z - C.z) .
  3. Obróć wektor P_from_C jak opisano powyżej i przypisz końcowemu wektorowi oznaczenie R_from_C .
  4. Konwersja wektora z powrotem do pozycji poprzez dodanie środka: 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. Konwertuje pozycję sześcienną R z powrotem na żądany układ współrzędnych.
Etapów transformacji jest kilka, ale każdy z nich jest dość prosty. Można skrócić niektóre z tych kroków, definiując obrót bezpośrednio we współrzędnych osiowych, ale wektory szesnastkowe nie działają ze współrzędnymi przesunięcia i nie wiem, jak skrócić kroki dla współrzędnych przesunięcia. Zobacz także dyskusję na temat wymiany stosów, aby poznać inne sposoby obliczania rotacji.

Pierścionki

Prosty pierścionek

Aby dowiedzieć się, czy dany sześciokąt należy do pierścienia o danym promieniu, należy obliczyć odległość od środka tego sześciokąta i sprawdzić, czy jest ona równa promieniowi. Aby uzyskać listę wszystkich takich sześciokątów, musisz wykonać promienie kroków od środka, a następnie podążać za obróconymi wektorami wzdłuż ścieżki wzdłuż pierścienia.

Funkcja kostka_ring(środek, promień): varresults = # ten kod nie działa dla promienia == 0; rozumiesz dlaczego? var kostka = kostka_add(środek, skala_kostki(kierunek_kostki(4), promień)) dla każdego 0 ≤ i< 6: for each 0 ≤ j < radius: results.append(cube) cube = cube_neighbor(cube, i) return results
W tym kodzie sześcian zaczyna się od pierścienia, pokazanego dużą strzałką biegnącą od środka do rogu diagramu. Na początek wybrałem kąt 4, ponieważ odpowiada on ścieżce, w której poruszają się moje liczby. Możesz potrzebować innego kąta początkowego. Na każdym etapie wewnętrznej pętli sześcian porusza się o jeden sześciokąt wokół pierścienia. Po 6 * krokach w promieniu kończy się tam, gdzie zaczął.


Pierścienie spiralne

Przechodząc przez pierścienie po spirali, możemy wypełnić wewnętrzne części pierścieni:

Funkcja kostka_spirala(środek, promień): var wyniki = dla każdego 1 ≤ k ≤ promień: wyniki = wyniki + kostka_pierścień(środek, k) zwracają wyniki



Pole dużego sześciokąta to suma wszystkich okręgów plus 1 dla środka. Użyj tego wzoru do obliczenia powierzchni.

Przemierzanie w ten sposób sześciokątów można również wykorzystać do obliczenia zakresu ruchu (patrz wyżej).

Obszar widoczności

Co jest widoczne z danego miejsca w danej odległości i nie jest blokowane przez przeszkody? Najprostszym sposobem ustalenia tego jest narysowanie linii do każdego sześciokąta w danym zakresie. Jeśli linia nie styka się ze ścianami, zobaczysz sześciokąt. Najedź myszką na sześciokąty [na schemacie w oryginalnym artykule], aby zobaczyć, jak linie są rysowane do tych sześciokątów i ścian, z którymi te linie się stykają.

Algorytm ten może być powolny na dużych obszarach, ale jest łatwy do wdrożenia, dlatego polecam zacząć od niego.

GIF-y



Istnieje wiele różnych definicji widoczności. Czy chcesz zobaczyć środek innego sześciokąta od środka pierwotnego? Czy chcesz zobaczyć jakąkolwiek część innego sześciokąta ze środka pierwotnego? Może jakakolwiek część innego sześciokąta z dowolnego punktu początkowego? Przeszkody zasłaniające widok są mniejsze niż pełny sześciokąt? Zakres to koncepcja trudniejsza i bardziej zróżnicowana, niż się wydaje na pierwszy rzut oka. Zacznijmy od najprostszego algorytmu, ale spodziewaj się, że na pewno poprawnie obliczy odpowiedź w Twoim projekcie. Zdarzają się nawet przypadki, gdy prosty algorytm daje nielogiczne wyniki.

W przyszłości chcę rozbudować ten poradnik. Ja mam



Losowe artykuły

W górę