Nauczmy się rysować sześciokątny pryzmat w różnych pozycjach.

Poznaj różne sposoby budowania sześciokąta foremnego, wykonaj rysunki sześciokątów, sprawdź poprawność ich konstrukcji. Na podstawie sześciokątów zbuduj sześciokątne pryzmaty.

Rozważmy sześciokątny pryzmat na ryc. 3.52 i jego rzuty prostopadłe na ryc. 3.53. U podstawy sześciokątnego graniastosłupa (sześcianu) znajdują się foremne sześciokąty, boki są identycznymi prostokątami. Aby poprawnie przedstawić sześciokąt w perspektywie, musisz najpierw nauczyć się poprawnie przedstawiać jego podstawę w perspektywie (ryc. 3.54). W sześciokącie na ryc. 3,55 szczyty są ponumerowane od jednego do sześciu. Jeśli połączysz punkty 1 i 3, 4 i 6 liniami pionowymi, zauważysz, że te linie wraz z punktem środka okręgu dzielą średnicę 5 - 2 na cztery równe segmenty (te segmenty są oznaczone łukami ). Przeciwległe boki sześciokąta są równoległe do siebie, a linia prosta przechodząca przez jego środek i łącząca dwa wierzchołki (na przykład boki 6 - 1 i 4 - 3 są równoległe do linii 5 - 2). Te obserwacje pomogą Ci zbudować sześciokąt w perspektywie, a także sprawdzić poprawność tej konstrukcji. Istnieją dwa sposoby skonstruowania sześciokąta foremnego z reprezentacji: w oparciu o opisane koło i w oparciu o kwadrat.

Na podstawie ograniczonego koła. Rozważ ryc. 3.56. Wszystkie wierzchołki sześciokąta foremnego należą do koła opisanego, którego promień jest równy bokowi sześciokąta.


Sześciokąt poziomy. Narysuj poziomą elipsę dowolnego otworu, czyli zakreślony okrąg w perspektywie. Teraz musisz znaleźć na nim sześć punktów, które są wierzchołkami sześciokąta. Narysuj dowolną średnicę danego okręgu przez jego środek (rys. 3.57). Skrajne punkty średnicy - 5 i 2, leżące na elipsie, to wierzchołki sześciokąta. Aby znaleźć pozostałe wierzchołki, należy podzielić tę średnicę na cztery identyczne segmenty. Średnica jest już podzielona przez środek okręgu na dwa promienie, pozostaje podzielić każdy promień na pół. Na rysunku perspektywicznym wszystkie cztery segmenty kurczą się równomiernie w miarę oddalania się od widza (ryc. 3.58). Teraz przeciągnij punkty środkowe promieni - punkty A i B - linie proste prostopadłe do linii prostej 5 - 2. Możesz znaleźć ich kierunek za pomocą stycznych do elipsy w punktach 5 i 2 (ryc. 3.59). Te styczne będą prostopadłe do średnicy 5 - 2, a linie poprowadzone przez punkty A i B równoległe do tych stycznych będą również prostopadłe do prostej 5 - 2. Oznacz punkty uzyskane na przecięciu tych linii elipsą jako 1, 3, 4, 6 (ryc. 3.60). Połącz wszystkie sześć wierzchołków liniami prostymi (ryc. 3.61).

Sprawdź poprawność swojej konstrukcji na różne sposoby. Jeśli konstrukcja jest prawidłowa, to linie łączące przeciwległe wierzchołki sześciokąta przecinają się w środku koła (ryc. 3.62), a przeciwległe boki sześciokąta są równoległe do odpowiednich średnic (ryc. 3.63). Inną metodę weryfikacji pokazano na ryc. 3.64.

Sześciokąt pionowy. W takim sześciokącie linie łączące punkty 7 i 3, b i 4 oraz styczne do okręgu opisanego w punktach 5 i 2 mają kierunek pionowy i zachowują go na rysunku perspektywicznym. Tak więc rysując dwie pionowe styczne do elipsy, znajdujemy punkty 5 i 2 (punkty dotykowe). Połącz je linią prostą, a następnie podziel uzyskaną średnicę 5 - 2 na 4 równe segmenty, biorąc pod uwagę ich nacięcia perspektywiczne (ryc. 3.65). Narysuj pionowe linie przez punkty A i B, a na ich przecięciu z elipsą znajdź punkty 1,3,6l4. Następnie kolejno połącz punkty 1 - 6 liniami prostymi (ryc. 3.66). Sprawdź poprawność konstrukcji sześciokąta w taki sam sposób jak w poprzednim przykładzie.

Opisany sposób konstruowania sześciokąta pozwala uzyskać tę figurę na podstawie koła, które łatwiej zobrazować perspektywicznie niż kwadrat o danych proporcjach. Dlatego ta metoda konstruowania sześciokąta wydaje się najdokładniejsza i najbardziej uniwersalna. Metoda konstrukcji oparta na kwadracie ułatwia narysowanie sześciokąta, gdy na figurze jest już sześcian, czyli gdy określone są proporcje kwadratu i kierunek jego boków.

Oparta na kwadracie. Rozważ ryc. 3.67. Sześciokąt wpisany w kwadrat w kierunku poziomym 5 - 2 jest równy bokowi kwadratu, aw pionie mniejszy od jego długości.

Sześciokąt pionowy. Narysuj pionowy kwadrat w perspektywie. Narysuj prostą linię przez przecięcie przekątnych, równolegle do jej poziomych boków. Podziel powstały segment 5 - 2 na cztery równe części i narysuj pionowe linie przez punkty A i B (ryc. 3.68). Linie ograniczające sześciokąt od góry i od dołu nie pokrywają się z bokami kwadratu. Narysuj je w pewnej odległości (1114 a) od poziomych boków kwadratu i równolegle do nich. Łącząc znalezione w ten sposób punkty 1 i 3 z punktem 2, a punkty 6 i 4 z punktem 5, otrzymujemy sześciokąt (rys. 3.69).

Sześciokąt poziomy jest zbudowany w tej samej kolejności (ryc. 3.70 i 3.71).

Ta metoda konstrukcji jest odpowiednia tylko dla sześciokątów z wystarczającym otworem. Jeśli otwór sześciokąta jest nieznaczny, lepiej zastosować metodę opartą na okręgu opisanym. Aby sprawdzić sześciokąt zbudowany przez kwadrat, możesz skorzystać z już znanych Ci metod.

Ponadto jest jeszcze jeden - do opisania okręgu wokół powstałego sześciokąta (na twojej figurze - elipsa). Wszystkie wierzchołki sześciokąta muszą należeć do tej elipsy.

Po opanowaniu umiejętności rysowania sześciokąta swobodnie przejdziesz do rysowania sześciokątnego pryzmatu. Przyjrzyj się uważnie diagramowi na ryc. 3.72, a także schematy budowy graniastosłupów sześciokątnych na podstawie okręgu opisanego (ryc. 3.73; 3.74 i 3.75) oraz na podstawie kwadratu (ryc. 3.76; 3.77 i 3.78). Narysuj pionowe i poziome sześciokąty na różne sposoby. Na rysunku pionowego sześciokąta długie boki ścian bocznych będą pionowymi liniami równoległymi do siebie, a sześciokąt podstawowy będzie tym bardziej otwarty, im dalej od linii horyzontu. Na rysunku sześciokąta poziomego, dłuższe boki ścian bocznych zbiegają się w znikającym punkcie na horyzoncie, a otwór sześciokąta podstawowego będzie tym większy, im dalej od obserwatora. Przedstawiając sześciokąt, upewnij się również, że równoległe powierzchnie obu podstaw zbiegają się w perspektywie (ryc. 3.79; 3.80).

Konstrukcja z sześcioboku foremnego wpisanego w okrąg. Konstrukcja pięciokąta foremnego z jego boku. Przesuń igłę kompasu do punktu przecięcia właśnie narysowanego łuku z okręgiem. Tę konstrukcję można wykonać za pomocą kwadratu i cyrkla. Sześciokąt foremny można zbudować za pomocą kwadratu T i kwadratu 30X60°. Skonstruuj punkty wierzchołków rogów sześciokąta foremnego.


Konstrukcja trójkąta równobocznego wpisanego w okrąg. Wierzchołki takiego trójkąta można zbudować za pomocą cyrkla i kwadratu o kątach 30 i 60 ° lub tylko jednego cyrkla. Aby zbudować bok 2-3, ustaw T-kwadrat w pozycji pokazanej przez linie przerywane i narysuj linię prostą przez punkt 2, który zdefiniuje trzeci wierzchołek trójkąta.

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

Na okręgu zaznaczamy punkt 1 i przyjmujemy go jako jeden z wierzchołków pięciokąta. Niech zostanie podany okrąg o średnicy D; musisz wpisać w niego regularny siedmiokąt (ryc. 65). Podziel pionową średnicę koła na siedem równych części. Od punktu 7 o promieniu równym średnicy okręgu D opisujemy łuk, aż przetnie się z kontynuacją poziomej średnicy w punkcie F. Punkt F nazywamy biegunem wielokąta.

To właśnie na umiejętności budowania dwusiecznych kątowych i dwusiecznych prostopadłych segmentów opiera się technika konstruowania wielokątów foremnych

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

Tematem tego samouczka wideo jest „Budowanie regularne wielokąty”. Ponownie podamy również definicję wielokąta foremnego, zobrazujemy go graficznie, po czym jeszcze raz upewnimy się, że środki wpisanych i opisanych okręgów wokół takiej figury będą się pokrywać. W ten wielokąt zawsze można wpisać okrąg, a okrąg wokół niego. Na poprzednich lekcjach dowiedzieliśmy się, że podstawową rolę w opisie właściwości wielokąta odgrywają dwusieczne jego kątów oraz dwusieczne prostopadłe do jego boków.

4. Otrzymaliśmy pożądany trójkąt regularny ABC. Problem rozwiązany. 3. Po umieszczeniu jednej nogi kompasu w dowolnym punkcie A1 na okręgu, drugą nogą zaznaczamy punkt A2 na tym samym okręgu i łączymy go z punktem A1. Otrzymujemy pierwszą stronę sześciokąta. 3. Używając dwusiecznych prostopadłych do boków wielokąta, obniżonych od punktu O, dzielimy na pół wszystkie jego boki i wszystkie łuki koła zamkniętego między sąsiednimi wierzchołkami.

Konstrukcje geometryczne są jedną z ważnych części nauki. Igła powinna przebić narysowaną linię. Im dokładniej ustawiony jest kompas, 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 pierwotnie narysowanym okręgiem. W takim przypadku sześciokąt może okazać się błędny.

Aby uzyskać wierzchołki / - // - /// z punktów IV, V i VI rysujemy poziome linie na przecięciu z okręgiem

Łączymy znalezione wierzchołki szeregowo ze sobą. Siedmiokąt można skonstruować, ciągnąc promienie z bieguna F i przez 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 opisanego (R) i wpisanego (r).

Konstrukcja sześciokąta polega na tym, że jego bok jest równy promieniowi opisanego okręgu. W tej lekcji przyjrzymy się sposobom konstruowania regularnych wielokątów za pomocą cyrkla 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.

Siatki sześciokątów (siatki sześciokątne) są używane w niektórych grach, ale nie są tak proste i powszechne jak siatki prostokątów. Od prawie 20 lat zbieram zasoby dotyczące siatek szesnastkowych i napisałem ten przewodnik po najbardziej eleganckich podejściach zaimplementowanych w najprostszym kodzie. Artykuł często korzysta z podręczników Charlesa Fu i Clarka Verbrugge. Opiszę różne sposoby tworzenia siatek sześciokątnych, ich relacje, a także najczęstsze algorytmy. Wiele części tego artykułu jest interaktywnych: wybranie typu siatki zmienia odpowiednie diagramy, kod i teksty. (Uwaga na: dotyczy to tylko oryginału, radzę go przestudiować. W tłumaczeniu wszystkie informacje z oryginału są 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 sześciokątne wielokąty. Sześciokąty foremne mają wszystkie boki (ściany) tej samej długości. Będziemy pracować tylko z regularnymi sześciokątami. Zazwyczaj siatki sześciokątne używają orientacji poziomej (ostra góra) i pionowa (płaska góra).


Płaskie (po lewej) i ostre (po prawej) sześciokąty z wierzchołkiem

Sześciokąty mają 6 twarzy. Każda twarz jest podzielona przez dwa sześciokąty. Sześciokąty mają 6 punktów narożnych. Każdy punkt narożny jest dzielony przez trzy sześciokąty. Możesz przeczytać więcej o środkach, krawędziach i punktach narożnych w moim artykule o częściach siatki (kwadraty, sześciokąty i trójkąty).

rogi

W foremnym 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 równym 60°. punkt narożny i wynosi (60° * i) + 30° , jednostki wielkości od środka . W kodzie:

Funkcja 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) )
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, co powoduje zmianę kątów: płaskie sześciokąty górne mają kąty 0°, 60°, 120°, 180°, 240°, 300°, a ostre górne sześciokąty mają kąty 0°, 60°, 120°, 180°, 240°, 300° 30°, 90°, 150°, 210°, 270°, 330°.


Narożniki sześciokątne z płaskim i ostrym blatem

Rozmiar i lokalizacja

Teraz chcemy ułożyć razem kilka sześciokątów. W orientacji poziomej wysokość sześciokąta to wysokość = rozmiar * 2 . Odległość w pionie między sąsiednimi sześciokątami to vert = wysokość * 3/4 ​​​​.

Szerokość sześciokąta to szerokość = sqrt(3)/2 * wysokość . Odległość w poziomie między sąsiednimi sześciokątami horiz = szerokość .

Niektóre gry używają grafiki pikselowej dla sześciokątów, które nie pasują dokładnie do właściwych sześciokątów. Opisane w tej sekcji formuły kąta i położenia 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 jeśli sześciokąty są lekko rozciągnięte lub skompresowane.



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. Współrzędne osiowe lub współrzędne przesunięcia powinny być używane do przechowywania map i wyświetlania współrzędnych użytkownikowi.

Przesunięte współrzędne

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


Układ poziomy „nieparzyste-r”


Układ poziomy „parzyste-r”


Układ pionowy „nieparzyste-q”


Układ pionowy „parzyste-q”

Współrzędne sześcienne

Innym sposobem patrzenia na siatki sześciokątów jest widzenie w nich trzy główne osie, nie dwa, jak w siatkach kwadratów. Wykazują elegancką symetrię.

Weź siatkę kostek i odetnij płaszczyzna przekątna w 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 korzystać ze standardowych operacji na współrzędnych kartezjańskich: sumowania i odejmowania współrzędnych, mnożenia i dzielenia przez wartość skalarną, a także odległości.

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


Sześciokąty


Kuba

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

Dowiedz się, jak współrzędne sześcienne działają dla siatki sześciokątów. Podczas wybierania sześciokątów, współrzędne sześcienne odpowiadające trzem osiom są podświetlone.

  1. Każdy kierunek siatki kostek 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 to samo dla x (zielony) i y (fioletowy).
  2. Każdy kierunek siatki sześciokąta jest kombinacją dwóch kierunków siatki sześcianu. Na przykład „północ” siatki sześciokątnej leży między +y i -z , więc każdy krok do „północ” zwiększa y o 1 i zmniejsza z o 1.
Współrzędne sześcienne są rozsądnym wyborem dla 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 współrzędna kanoniczna.

Istnieje wiele różnych układów współrzędnych sześcianów i sześciokątów. W niektórych z nich warunek różni się od x + y + z = 0 . Z wielu systemów pokazałem tylko jeden. Możesz również utworzyć współrzędne sześcienne za pomocą x-y , y-z , z-x , które będą miały swój własny zestaw interesujących właściwości, ale nie będę ich tutaj omawiał.

Ale możesz argumentować, że nie chcesz przechowywać 3 liczb dla współrzędnych, ponieważ nie wiesz, jak przechowywać taką mapę.

Współrzędne osiowe

Układ współrzędnych osiowych, czasami nazywany „trapezoidalnym”, budowany jest na podstawie 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żesz użyć z nimi standardowych operacji sumowania, 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 omówię wszystkich kombinacji. Wybiorę dwie zmienne, q (kolumna) i r (wiersz). W obwodach w tym artykule q odpowiada x, a r odpowiada z , ale to mapowanie jest arbitralne, ponieważ można obracać i obracać obwody, aby uzyskać różne mapowania.

Zaletą tego systemu nad siatkami przemieszczeniowymi jest większa przejrzystość algorytmów. Wadą systemu jest to, że przechowywanie prostokątnej mapy jest trochę dziwne; zobacz sekcję dotyczącą zapisywania map. Niektóre algorytmy są nawet jaśniejsze we współrzędnych sześciennych, ale ponieważ mamy warunek x + y + z = 0 , możemy obliczyć trzecią współrzędną domniemaną i użyć jej w tych algorytmach. W moich projektach nazywam osie q , r , s , więc warunek wygląda tak 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 do siatek kwadratowych. Niestety, jedna z dwóch osi musi iść pod prąd, co w rezultacie komplikuje sprawę. Systemy Cubic i Axial idą o krok dalej i mają prostsze algorytmy, ale przechowywanie map jest nieco bardziej złożone. Istnieje inny system zwany „przeplatanym” lub „podwójnym”, ale nie będziemy go tutaj rozważać; niektórzy uważają, że łatwiej jest z nimi pracować niż sześciennymi lub osiowymi.


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

to kierunek, w którym zwiększana jest odpowiednia współrzędna. Prostopadła do osi to linia, na której współrzędna pozostaje stała. Powyższe diagramy siatki pokazują prostopadłe linie.

Transformacja współrzędnych

Jest prawdopodobne, że w swoim projekcie użyjesz współrzędnych osiowych lub przesuniętych, ale wiele algorytmów łatwiej jest wyrazić we współrzędnych sześciennych. Dlatego musimy być w stanie konwertować współrzędne 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 cube_to_hex(h): # osiowa var q = hx var r = hz return Funkcja Hex(q, r) hex_to_cube(h): # cube var x = hq var z = hr var y = -xz return Cube(x, y ,z)
Współrzędne przesunięcia są nieco bardziej skomplikowane:

Sąsiadujące sześciokąty

Biorąc pod uwagę jeden sześciokąt, jakie sześć sześciokątów znajduje się obok niego? Jak można się spodziewać, odpowiedź jest najłatwiejsza we współrzędnych sześciennych, dość prosta we współrzędnych osiowych i nieco trudna we współrzędnych przesuniętych. 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 zmienia jedną z trzech współrzędnych sześciennych o +1, a drugą o -1 (suma musi pozostać 0). Trzy możliwe współrzędne mogą się zmienić o +1, a pozostałe dwie o -1. Daje nam to sześć możliwych zmian. Każdy odpowiada jednemu z kierunków sześciokąta. Najprostszy i najszybsza droga- wstępnie oblicz zmiany i umieść je w tabeli Cube(dx, dy, dz) współrzędnych sześciennych w czasie kompilacji:

Kierunki Var = [ Kostka(+1, -1, 0), Kostka(+1, 0, -1), Kostka(0, +1, -1), Kostka(-1, +1, 0), Kostka( -1, 0, +1), Cube(0, -1, +1) ] function cube_direction(direction): funkcja zwracania kierunków cube_neighbor(hex, direction): return cube_add(hex, cube_direction(kierunek))

Współrzędne osiowe

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

Kierunki Var = [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0, +1) ] funkcja hex_direction(direction): funkcja zwrotu kierunków hex_neighbor(hex, direction): var dir = hex_direction(direction) return Hex(hex.q + dir.q, hex.r + dir.r)

Przesunięte współrzędne

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

Tak jak poprzednio, tworzymy tabelę liczb do dodania do col i row . Jednak tym razem będziemy mieć dwie tablice, jedną dla nieparzystych kolumn/wierszy i jedną dla parzystych. Spójrz na (1,1) na powyższej mapie siatki i zauważ, jak zmieniają się kolory i wiersze, gdy poruszasz się w każdym z sześciu kierunków. Teraz powtórzmy proces (2,2) . Tabele i kod będą inne dla każdego z cztery rodzaje siatki przemieszczeniowe, dla każdego rodzaju siatki zapewniamy odpowiedni kod.

nieparzysty r
var kierunki = [ [ 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 parity = hex.row & 1 var dir = kierunki return Hex(hex.col + dir.col, hex.row + dir.row)


Parzyste-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) ] ] function offset_neighbor(hex, direction): var parity = hex.row & 1 var dir = kierunki return Hex(hex.col + dir.col, hex.row + dir.row)


Siatka dla parzystych (PARZYSTYCH) i nieparzystych (NIEPARZYSTYCH) rzędów

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) ] ] function offset_neighbor(hex, direction): var parity = hex.col & 1 var dir = kierunki return Hex(hex.col + dir.col, hex.row + dir.row)


Parzyste-q
var kierunki = [ [ 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) ] ] function offset_neighbor(hex, direction): var parity = hex.col & 1 var dir = kierunki return Hex(hex.col + dir.col, hex.row + dir.row)


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

Przekątne

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

Przekątne Var = [ Kostka(+2, -1, -1), Kostka(+1, +1, -2), Kostka(-1, +2, -1), Kostka(-2, +1, +1 ), Cube(-1, -1, +2), Cube(+1, -2, +1) ] funkcja cube_diagonal_neighbor(hex, kierunek): return cube_add(hex, przekątne)
Tak jak poprzednio, możemy przekonwertować te współrzędne na współrzędne osiowe, upuszczając jedną z trzech współrzędnych, lub przekonwertować na współrzędne przesunięte, wstępnie 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 3D. Sąsiednie sześciokąty są oddalone o 1 w siatce sześciokątów, ale o 2 w siatce sześcianów. Dzięki temu obliczanie odległości jest proste. W siatce kwadratów odległości Manhattan to abs(dx) + abs(dy) . W siatce sześcianów odległości Manhattan to abs(dx) + abs(dy) + abs(dz) . Odległość w siatce sześciokątów jest równa połowie z nich:

Funkcja cube_distance(a, b): return (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ą pozostałych dwóch, a następnie otrzymamy ją jako odległość. Możesz wybrać formę przecięcia lub formę maksymalnej wartości poniżej, ale dają ten sam wynik:

Funkcja cube_distance(a, b): zwraca max(abs(a.x - b.x), abs(a.y - b.y), abs(a.z - b.z))
Na rysunku maksymalne wartości są wyróżnione kolorem. Zauważ również, że każdy kolor reprezentuje jeden z sześciu kierunków „po przekątnej”.

gif


Współrzędne osiowe

W układzie osiowym trzecia współrzędna jest wyrażona niejawnie. Przeliczmy z osiowego na sześcienny, aby obliczyć odległość:

Funkcja hex_distance(a, b): var ac = hex_to_cube(a) var bc = hex_to_cube(b) return cube_distance(ac, bc)
Jeśli kompilator w twoim przypadku osadza (inline) hex_to_cube i cube_distance , to wygeneruje kod w następujący sposób:

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 tego, jak piszesz odległość między sześciokątami w układzie osiowym jest pochodną odległości Manhattanu w układzie sześciennym. Na przykład opisana "różnica różnic" jest uzyskiwana poprzez zapisanie a.q + a.r - b.q - b.r jako a.q - b.q + a.r - b.r i użycie formy wartości maksymalnej zamiast formy dwudzielnej sześcian_odległość . Wszystkie są podobne, jeśli widzisz połączenie ze współrzędnymi sześciennymi.

Przesunięte współrzędne

Podobnie jak w przypadku współrzędnych osiowych, konwertujemy współrzędne przesunięcia na współrzędne sześcienne, a następnie używamy odległości sześciennej.

Funkcja offset_distance(a, b): var ac = offset_to_cube(a) var bc = offset_to_cube(b) return cube_distance(ac, bc)
Użyjemy tego samego wzorca dla wielu algorytmów: przekonwertuj z sześciokątów 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ęte).

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 punktach N+1 i obliczana jest, w których sześciokątach te próbki się znajdują.

gif


  1. Najpierw obliczamy N , która 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. Stosując interpolację liniową określamy, że dla i wartości 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 są pokazane na niebiesko. Wynikiem są współrzędne zmiennoprzecinkowe.
  3. Przekształć każdy punkt kontrolny (zmiennoprzecinkowy) z powrotem na sześciokąty (int). Algorytm nazywa się cube_round (patrz poniżej).
Łącząc wszystko razem, aby narysować linię od A do B:

Funkcja lerp(a, b, t): // dla elementów pływających return a + (b - a) * t function cube_lerp(a, b, t): // dla sześciokątów return Cube(lerp(ax, bx, t), lerp(ay, by, t), lerp(az, bz, t)) function cube_linedraw(a, b): var N = cube_distance(a, b) var results = dla każdego 0 ≤ i ≤ N: results.append( cube_round(cube_lerp(a, b, 1.0/N * i))) zwraca wyniki
Uwagi:

  • Czasami cube_lerp zwraca punkt dokładnie na krawędzi między dwoma sześciokątami. Następnie cube_round przesuwa go w jedną lub drugą stronę. Linie wyglądają lepiej, jeśli są przesunięte w jednym kierunku. Można to zrobić, dodając szesnastkową kostkę „epsilon” (1e-6, 1e-6, -2e-6) do jednego lub obu punktów końcowych przed rozpoczęciem pętli. To „przesunie” linię w jednym kierunku, aby nie dotknęła granic krawędzi.
  • Algorytm linii DDA w siatkach kwadratów przyrównuje N do maksymalnej odległości wzdłuż każdej z osi. To samo robimy w przestrzeni sześciennej, analogicznie do odległości w siatce sześciokątów.
  • Funkcja cube_lerp powinna zwrócić kostkę ze współrzędnymi zmiennoprzecinkowymi. Jeśli programujesz w języku statycznie pisanym, nie będziesz mógł używać typu Cube. Możesz zamiast tego zdefiniować typ FloatCube lub wbudować funkcję (inline) w kodzie do rysowania linii, jeśli nie chcesz definiować jeszcze innego typu.
  • Możesz zoptymalizować kod, wstawiając (wbudowany) cube_lerp, a następnie obliczając B.x-A.x , B.x-A.y i 1.0/N poza pętlą. Mnożenie można przekształcić w powtarzane sumowanie. Rezultatem jest coś w rodzaju algorytmu DDA-line.
  • Do rysowania linii używam współrzędnych osiowych lub sześciennych, ale jeśli chcesz pracować z przesuniętymi współrzędnymi, sprawdź .
  • Istnieje wiele opcji rysowania linii. Czasami wymagane jest „przemalowanie”. Dostałem kod do rysowania przemalowanych linii w sześciokątach, ale jeszcze do niego nie zaglądałem.

zasięg podróży

Zakres współrzędnych

Mając środek sześciokąta i zasięg N, które sześciokąty znajdują się w N kroków od niego?

Możemy pracować wstecz od wzoru na odległość sześciokąta distance = max(abs(dx), abs(dy), abs(dz)) . Aby znaleźć wszystkie sześciokąty w obrębie N , potrzebujemy max(abs(dx), abs(dy), abs(dz)) ≤ N . Oznacza to, że potrzebne są wszystkie trzy wartości: abs(dx) ≤ N oraz abs(dy) ≤ N i abs(dz) ≤ N . Usunięcie wartości bezwzględnej daje -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: if dx + dy + dz = 0: results.append(cube_add(center, Cube(dx , dy, dz)))
Ta pętla będzie działać, ale będzie raczej nieefektywna. Ze wszystkich wartości dz, po których iterujemy w pętli, tylko jedna faktycznie spełnia warunek sześcianów dx + dy + dz = 0 . Zamiast tego obliczymy bezpośrednio wartość dz, która spełnia 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 results.append(cube_add( środek, sześcian (dx, dy, dz)))
Ta pętla przechodzi tylko przez wymagane współrzędne. Na rysunku każdy zakres to para linii. Każda linia to nierówność. Bierzemy wszystkie sześciokąty, które spełniają sześć nierówności.

gif


Nakładające się zakresy

Jeśli potrzebujesz znaleźć sześciokąty, które znajdują się w wielu zakresach, możesz przejrzeć zakresy przed wygenerowaniem listy sześciokątów.

Do tego problemu można podejść z punktu widzenia algebry lub geometrii. Algebraicznie każdy obszar jest wyrażony jako warunki nierówności postaci -N ≤ dx ≤ N i musimy znaleźć punkt przecięcia tych warunków. Geometrycznie każdy obszar jest sześcianem w przestrzeni 3D i przetniemy dwa sześciany w przestrzeni 3D, aby uzyskać prostopadłościan w przestrzeni 3D. Następnie rzutujemy go z powrotem na płaszczyznę x + y + z = 0, aby uzyskać sześciokąty. Rozwiążę ten problem algebraicznie.

Najpierw przepisujemy warunek -N ≤ dx ≤ N w more ogólna forma x min ≤ x ≤ x max i weź x min = center.x - N i x max = center.x + N . Zróbmy to samo dla y i z , co daje ogólny widok 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 = -xy wyników append(Cube(x, y, z))
Przecięcie dwóch zakresów a ≤ x ≤ b i c ≤ x ≤ d to max(a, c) ≤ x ≤ min(b, d). Ponieważ powierzchnia sześciokątów jest wyrażona jako zakresy nad x , y , z , możemy indywidualnie przeciąć każdy z zakresów x , y , z, a następnie użyć zagnieżdżonej pętli do wygenerowania listy sześciokątów na przecięciu. Dla jednego obszaru sześciokątów przyjmujemy x min = H.x - N i x max = H.x + N , podobnie dla y i z . Dla przecięcia dwóch sześciokątów przyjmujemy 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 na przecięciu trzech lub więcej regionów.

gif


Przeszkody

W przypadku przeszkód najłatwiej jest wypełnić ograniczeniem odległości (przeszukiwanie wszerz). 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 kroków. Przy każdym przejściu przez pętlę główną rozszerzamy poziom k-1 o poziom k .

Funkcja cube_reachable(start, movement): var odwiedzone = set() dodaj start do 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

skręty

Dla danego wektora sześciokąta (różnica między dwoma sześciokątami) może być konieczne obrócenie go, aby wskazywał inny sześciokąt. Łatwo to zrobić ze współrzędnymi sześciennymi, jeśli trzymasz się 1/6 obrotu.

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]



„Grając” [w oryginalnym artykule] z diagramem, widać, że każdy obrót o 60 ° zmiany znaki i fizycznie „obróć” współrzędne. Po obrocie o 120° znaki są znowu takie same. Obrót o 180° odwraca znaki, ale współrzędne są obracane do ich pierwotnej pozycji.

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

  1. Konwertuj pozycje P i C na współrzędne sześcienne.
  2. Obliczanie wektora przez odjęcie środka: P_from_C = P - C = Cube(P.x - C.x, P.y - C.y, P.z - C.z) .
  3. Obracanie wektora P_from_C jak opisano powyżej i przypisywanie wynikowemu wektorowi oznaczenia R_from_C .
  4. Konwersja wektora z powrotem do pozycji przez 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. Konwersja pozycji sześciennej R z powrotem do żądanego układu współrzędnych.
Istnieje kilka etapów transformacji, ale każdy z nich jest dość prosty. Możliwe jest skrócenie niektórych z tych kroków, definiując obrót bezpośrednio we współrzędnych osiowych, ale wektory sześciokątne nie działają z przesuniętymi współrzędnymi i nie wiem, jak skrócić kroki dla przesuniętych współrzędnych. Zobacz także dyskusję na temat innych sposobów obliczania rotacji na stosie wymiany.

Pierścionki

prosty pierścień

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

Funkcja cube_ring(center, radius): var results = # ten kod nie działa dla promienia == 0; rozumiesz dlaczego? var cube = cube_add(center, cube_scale(cube_direction(4), radius)) dla każdego 0 ≤ i< 6: for each 0 ≤ j < radius: results.append(cube) cube = cube_neighbor(cube, i) return results
W tym kodzie kostka zaczyna się od pierścienia, pokazanego jako duża strzałka od środka do rogu diagramu. Na początek wybrałem kąt 4, ponieważ odpowiada on ścieżce, którą pokonują moje numery kierunkowe. Możesz potrzebować innego kąta początkowego. Na każdym etapie wewnętrznej pętli sześcian przesuwa się o jeden sześciokąt wokół pierścienia. Po 6 * krokach promienia kończy tam, gdzie zaczął.


spiralne pierścienie

Przechodząc przez pierścienie w spiralny wzór, możemy wypełnić wnętrze pierścieni:

Funkcja cube_spiral(center, radius): var results = dla każdego 1 ≤ k ≤ radius: results = results + cube_ring(center, k) zwracać wyniki



Powierzchnia dużego sześciokąta jest równa sumie wszystkich kół plus 1 dla środka. Użyj tego wzoru, aby obliczyć powierzchnię.

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

Obszar widoczności

Co jest widoczne z danej pozycji z określonej odległości i nie jest blokowane przez przeszkody? Najprostszy sposób zdefiniuj - narysuj linię do każdego sześciokąta w podanym zakresie. Jeśli linia nie styka się ze ścianami, widzisz sześciokąt. Przesuń kursor myszy nad sześciokąty [na schemacie w oryginalnym artykule], aby zobaczyć linie rysowane do tych sześciokątów i ścian, które stykają się z liniami.

Ten algorytm może działać wolno na dużych obszarach, ale jest łatwy do wdrożenia, więc polecam zacząć od niego.

gif



Jest wiele różne definicje widoczność. Czy chcesz zobaczyć środek innego sześciokąta od środka pierwszego? Czy chcesz zobaczyć jakąkolwiek część innego sześciokąta od środka pierwszego? Może jakaś część innego sześciokąta z dowolnego punktu wyjścia? Czy przeszkody są mniejsze niż pełny sześciokąt? Scope to trudniejsza i bardziej zróżnicowana koncepcja niż na pierwszy rzut oka. Zacznijmy od najprostszego algorytmu, ale spodziewaj się, że poprawnie obliczy odpowiedź w Twoim projekcie. Zdarzają się nawet przypadki, w których prosty algorytm daje nielogiczne wyniki.

Chcę jeszcze bardziej rozwinąć ten przewodnik. Ja mam

Czy w pobliżu jest ołówek? Spójrz na jego sekcję - jest to sześciokąt foremny lub, jak to się nazywa, sześciokąt. Przekrój orzecha, pole sześciokątnych szachów, niektóre złożone cząsteczki węgla (na przykład grafit), płatek śniegu, plaster miodu i inne przedmioty również mają ten kształt. Niedawno odkryto gigantyczny sześciokąt foremny. Czy nie wydaje się dziwne, że natura tak często używa struktur o tym szczególnym kształcie do swoich kreacji? Przyjrzyjmy się bliżej.

Sześciokąt foremny to wielokąt o sześciu równych bokach i równych kątach. Z kursu szkolnego wiemy, że posiada następujące właściwości:

  • Długość jego boków odpowiada promieniowi opisanego okręgu. Ze wszystkich, tylko sześciokąt foremny ma tę właściwość.
  • Kąty są sobie równe, a wielkość każdego z nich wynosi 120 °.
  • Obwód sześciokąta można określić wzorem Р=6*R, jeśli znany jest promień okręgu opisanego wokół niego, lub Р=4*√(3)*r, jeśli okrąg jest w nim wpisany. R i r są promieniami okręgów opisanych i wpisanych.
  • Pole zajmowane przez sześciokąt foremny określa się w następujący sposób: S=(3*√(3)*R 2)/2. Jeśli promień jest nieznany, zastępujemy go długością jednego z boków – jak wiadomo, odpowiada on długości promienia okręgu opisanego.

Sześciokąt foremny ma jedną ciekawą cechę, dzięki której stał się tak rozpowszechniony w przyrodzie - jest w stanie wypełnić dowolną powierzchnię samolotu bez zakładek i przerw. Istnieje nawet tak zwany lemat Pal, zgodnie z którym sześciokąt foremny o boku równym 1/√(3) jest oponą uniwersalną, czyli może objąć dowolny zestaw o średnicy jednej jednostki.

Rozważmy teraz konstrukcję foremnego sześciokąta. Istnieje kilka sposobów, z których najłatwiejszy polega na użyciu cyrkla, ołówka i linijki. Najpierw za pomocą kompasu narysujemy dowolny okrąg, a następnie na tym okręgu zaznaczamy punkt w dowolnym miejscu. Nie zmieniając rozwiązania kompasu, kładziemy w tym miejscu czubek, zaznaczamy kolejne nacięcie na kole, kontynuujemy w ten sposób, aż otrzymamy wszystkie 6 punktów. Teraz pozostaje tylko połączyć je ze sobą prostymi segmentami, a pożądana postać się okaże.

W praktyce zdarza się, że trzeba narysować duży sześciokąt. Na przykład na dwupoziomowym suficie z płyt gipsowo-kartonowych, wokół punktu mocowania centralnego żyrandola, na dolnym poziomie należy zainstalować sześć małych lamp. Bardzo, bardzo trudno będzie znaleźć kompas tej wielkości. Jak postępować w takim przypadku? Jak narysować duże koło? Bardzo prosta. Musisz wziąć mocną nić o pożądanej długości i zawiązać jeden z jej końców naprzeciwko ołówka. Teraz pozostaje tylko znaleźć pomocnika, który w odpowiednim miejscu dociśnie drugi koniec nici do sufitu. Oczywiście w tym przypadku możliwe są drobne błędy, ale jest mało prawdopodobne, aby w ogóle były zauważalne dla osoby postronnej.

Zawartość:

Sześciokąt foremny, zwany także sześciokątem idealnym, ma sześć równych boków i sześć równych kątów. Możesz narysować sześciokąt za pomocą taśmy mierniczej i kątomierza, szorstki sześciokąt z okrągłym przedmiotem i linijką lub jeszcze bardziej szorstki sześciokąt za pomocą ołówka i odrobiny intuicji. Jeśli chcesz wiedzieć, jak narysować sześciokąt na różne sposoby, po prostu czytaj dalej.

Kroki

1 Narysuj idealny sześciokąt za pomocą kompasu

  1. 1 Narysuj okrąg za pomocą kompasu. Włóż ołówek do kompasu. Rozwiń kompas do żądanej szerokości promienia swojego okręgu. Promień może wynosić od kilku do kilkudziesięciu centymetrów. Następnie połóż kompas ołówkiem na papierze i narysuj okrąg.
    • Czasami łatwiej jest narysować najpierw połowę koła, a potem drugą połowę.
  2. 2 Przesuń igłę kompasu do krawędzi okręgu. Umieść go na górze koła. Nie zmieniaj kąta i pozycji kompasu.
  3. 3 Zrób mały ślad ołówkiem na krawędzi koła. Spraw, aby było wyraźne, ale nie za ciemne, ponieważ później je wymażesz. Pamiętaj o zapisaniu kąta ustawionego dla kompasu.
  4. 4 Przesuń igłę kompasu do właśnie wykonanego znaku. Ustaw igłę prosto na znaku.
  5. 5 Zrób kolejny znak ołówkiem na krawędzi koła. W ten sposób zrobisz drugi znak w pewnej odległości od pierwszego znaku. Poruszaj się w jednym kierunku.
  6. 6 W ten sam sposób zrób jeszcze cztery znaki. Musisz wrócić do pierwotnego znaku. Jeśli nie, to najprawdopodobniej zmienił się kąt, pod jakim trzymałeś kompas i robiłeś znaki. Być może stało się tak dlatego, że zbyt mocno go ścisnąłeś lub wręcz przeciwnie, trochę go poluzowałeś.
  7. 7 Połącz znaki linijką. Sześć miejsc, w których twoje znaki przecinają się z krawędzią koła, to sześć wierzchołków sześciokąta. Za pomocą linijki i ołówka narysuj proste linie łączące sąsiednie znaki.
  8. 8 Usuń zarówno okrąg, jak i znaki na krawędziach okręgu oraz wszelkie inne znaki, które zrobiłeś. Po wymazaniu wszystkich linii pomocniczych idealny sześciokąt powinien być gotowy.

2 Narysuj szorstki sześciokąt z okrągłym przedmiotem i linijką

  1. 1 Zakreśl krawędź szkła ołówkiem. W ten sposób narysujesz okrąg. Bardzo ważne jest rysowanie ołówkiem, ponieważ później będziesz musiał wymazać wszystkie linie pomocnicze. Możesz także zakreślić szklankę do góry nogami, słoik lub cokolwiek innego, co ma okrągłą podstawę.
  2. 2 Narysuj poziome linie przez środek okręgu. Możesz użyć linijki, książki, czegokolwiek z prostą krawędzią. Jeśli masz linijkę, możesz zaznaczyć środek, obliczając pionową długość koła i dzieląc ją na pół.
  3. 3 Narysuj „X” nad półkolem, dzieląc je na sześć równych części. Ponieważ już narysowałeś linię przez środek okręgu, X musi być szerszy niż wysoki, aby części były równe. Wyobraź sobie, że dzielisz pizzę na sześć części.
  4. 4 Z każdej sekcji zrób trójkąty. Aby to zrobić, użyj linijki, aby narysować prostą linię pod zakrzywioną częścią każdej sekcji, łącząc ją z pozostałymi dwiema liniami, tworząc trójkąt. Zrób to z pozostałymi pięcioma sekcjami. Pomyśl o tym jak o zrobieniu skórki wokół kawałków pizzy.
  5. 5 Usuń wszystkie linie pomocnicze. Linie prowadzące obejmują twój okrąg, trzy linie dzielące twój okrąg na sekcje i wszelkie inne znaki, które zrobiłeś po drodze.

3 Narysuj szorstki sześciokąt jednym ołówkiem

  1. 1 Narysuj poziomą linię. Aby narysować linię prostą bez linijki, po prostu narysuj punkt początkowy i końcowy linii poziomej. Następnie umieść ołówek w punkcie początkowym i przeciągnij linię do końca. Długość tej linii może wynosić tylko kilka centymetrów.
  2. 2 Narysuj dwie ukośne linie od końców linii poziomej. Linia ukośna po lewej stronie powinna być skierowana na zewnątrz w taki sam sposób, jak linia ukośna po prawej stronie. Możesz sobie wyobrazić, że te linie tworzą kąt 120 stopni w stosunku do linii poziomej.
  3. 3 Narysuj jeszcze dwie poziome linie wychodzące z pierwszych poziomych linii narysowanych do wewnątrz. W ten sposób powstanie lustrzane odbicie dwóch pierwszych ukośnych linii. Dolna lewa linia powinna być odbiciem górnej lewej linii, a dolna prawa linia powinna być odbiciem górnej prawej linii. Podczas gdy górne poziome linie powinny być skierowane na zewnątrz, dolne linie powinny być skierowane do wewnątrz w podstawie.
  4. 4 Narysuj kolejną poziomą linię, łącząc dwie dolne linie ukośne. W ten sposób narysujesz podstawę dla swojego sześciokąta. Idealnie linia ta powinna być równoległa do górnej linii poziomej. Tutaj zakończyłeś swój sześciokąt.
  • Ołówek i cyrkle powinny być ostre, aby zminimalizować błędy wynikające ze zbyt szerokich znaków.
  • Używając metody kompasu, jeśli połączysz każdy znak zamiast wszystkich sześciu, otrzymasz trójkąt równoboczny.

Ostrzeżenia

  • Kompas jest dość ostrym przedmiotem, bądź z nim bardzo ostrożny.

Zasada działania

  • Każda metoda pomoże narysować sześciokąt utworzony przez sześć trójkątów równobocznych o promieniu równym długości wszystkich boków. Sześć narysowanych promieni ma tę samą długość, a wszystkie linie tworzące sześciokąt mają tę samą długość, ponieważ szerokość kompasu się nie zmieniła. Ponieważ sześć trójkątów jest równobocznych, kąty między ich wierzchołkami wynoszą 60 stopni.

Czego będziesz potrzebować

  • Papier
  • Ołówek
  • Linijka
  • Para kompasów
  • Coś, co można umieścić pod papierem, aby igła kompasu nie wyślizgnęła się.
  • gumka do mazania

blisko