Construa um quadrado de 6 usando um compasso. Como construir um hexágono regular. O círculo circunscrito e a possibilidade de construção

O tema dos polígonos é abordado no currículo escolar, mas eles não dão a devida atenção a ele. Enquanto isso, é interessante, e isso é especialmente verdadeiro para um hexágono ou hexágono regular - afinal, muitos objetos naturais têm essa forma. Estes incluem favos de mel e muito mais. Esta forma é muito bem aplicada na prática.

Definição e construção

Um hexágono regular é uma figura plana que tem seis lados iguais em comprimento e o mesmo número de ângulos iguais.

Se nos lembrarmos da fórmula para a soma dos ângulos de um polígono

Acontece que nesta figura é igual a 720 °. Bem, como todos os ângulos da figura são iguais, é fácil calcular que cada um deles é igual a 120°.

Desenhar um hexágono é muito simples, você só precisa de um compasso e uma régua.

As instruções passo a passo ficarão assim:

Se desejar, você pode fazer sem uma linha desenhando cinco círculos de raio igual.

A figura assim obtida será um hexágono regular, e isso pode ser provado a seguir.

As propriedades são simples e interessantes

Para entender as propriedades de um hexágono regular, faz sentido dividi-lo em seis triângulos:

Isso ajudará no futuro a exibir com mais clareza suas propriedades, sendo as principais:

  1. diâmetro do círculo circunscrito;
  2. diâmetro do círculo inscrito;
  3. quadrado;
  4. perímetro.

O círculo circunscrito e a possibilidade de construção

É possível descrever um círculo em torno de um hexágono e, além disso, apenas um. Como esta figura está correta, você pode fazer isso de forma simples: desenhe uma bissetriz de dois ângulos adjacentes internos. Eles se cruzam no ponto O, e junto com o lado entre eles formam um triângulo.

Os ângulos entre o lado do hexágono e as bissetrizes serão de 60° cada, então podemos dizer com certeza que um triângulo, por exemplo, AOB, é isósceles. E como o terceiro ângulo também será igual a 60 °, também é equilátero. Segue-se que os segmentos OA e OB são iguais, o que significa que eles podem servir como o raio do círculo.

Depois disso, você pode ir para o próximo lado e também desenhar uma bissetriz do ângulo no ponto C. Acontecerá outro triângulo equilátero, e o lado AB será comum a dois ao mesmo tempo, e OS será o próximo raio pelo qual o mesmo círculo passará. Haverá seis desses triângulos no total e eles terão um vértice comum no ponto O. Acontece que será possível descrever o círculo, e é apenas um, e seu raio é igual ao lado do hexágono :

É por isso que é possível construir esta figura com a ajuda de um compasso e uma régua.

Bem, a área deste círculo será padrão:

Círculo inscrito

O centro do círculo circunscrito coincide com o centro do inscrito. Para verificar isso, podemos traçar perpendiculares do ponto O aos lados do hexágono. Eles serão as alturas desses triângulos que compõem o hexágono. E em um triângulo isósceles, a altura é a mediana em relação ao lado em que repousa. Assim, essa altura nada mais é do que a bissetriz perpendicular, que é o raio do círculo inscrito.

A altura de um triângulo equilátero é calculada simplesmente:

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

E como R=a e r=h, verifica-se que

r=R(√3)/2.

Assim, o círculo inscrito passa pelos centros dos lados de um hexágono regular.

Sua área será:

S=3πa²/4,

ou seja, três quartos do descrito.

Perímetro e área

Tudo fica claro com o perímetro, esta é a soma dos comprimentos dos lados:

P=6a, ou P=6R

Mas a área será igual à soma de todos os seis triângulos nos quais o hexágono pode ser dividido. Como a área de um triângulo é calculada como metade do produto da base pela altura, então:

S \u003d 6 (a / 2) (a (√3) / 2) \u003d 6a² (√3) / 4 \u003d 3a² (√3) / 2 ou

S=3R²(√3)/2

Quem quiser calcular essa área pelo raio do círculo inscrito pode fazer assim:

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

Construções divertidas

Um triângulo pode ser inscrito em um hexágono, cujos lados conectarão os vértices através de um:

Haverá dois deles no total, e sua imposição um ao outro dará a Estrela de David. Cada um desses triângulos é equilátero. Isso é fácil de verificar. Se você olhar para o lado AC, então ele pertence a dois triângulos ao mesmo tempo - BAC e AEC. Se no primeiro deles AB \u003d BC, e o ângulo entre eles for de 120 °, então cada um dos restantes será de 30 °. A partir disso, podemos tirar conclusões lógicas:

  1. A altura de ABC a partir do vértice B será igual à metade do lado do hexágono, pois sen30°=1/2. Aqueles que desejam verificar isso podem ser aconselhados a recalcular de acordo com o teorema de Pitágoras, ele se encaixa perfeitamente aqui.
  2. O lado AC será igual a dois raios do círculo inscrito, que é novamente calculado usando o mesmo teorema. Ou seja, AC=2(a(√3)/2)=a(√3).
  3. Os triângulos ABC, CDE e AEF são iguais em dois lados e o ângulo entre eles e, portanto, a igualdade dos lados AC, CE e EA segue.

Intersectando-se entre si, os triângulos formam um novo hexágono, também regular. É fácil provar:

Assim, a figura encontra os sinais de um hexágono regular - tem seis lados e ângulos iguais. Da igualdade dos triângulos nos vértices é fácil deduzir o comprimento do lado do novo hexágono:

d=à(√3)/3

Também será o raio do círculo descrito em torno dele. O raio do inscrito será metade do lado do hexágono grande, o que foi comprovado ao considerar o triângulo ABC. Sua altura é exatamente a metade do lado, portanto, a segunda metade é o raio do círculo inscrito no pequeno hexágono:

r₂=à/2

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

Acontece que a área do hexágono dentro da estrela de David é três vezes menor que a do grande em que a estrela está inscrita.

Da teoria à prática

As propriedades do hexágono são usadas ativamente tanto na natureza quanto em vários campos da atividade humana. Em primeiro lugar, isso se aplica a parafusos e porcas - os chapéus do primeiro e do segundo nada mais são do que um hexágono regular, se você não levar em conta os chanfros. O tamanho das chaves corresponde ao diâmetro do círculo inscrito - ou seja, a distância entre as faces opostas.

Encontrou sua aplicação e telhas hexagonais. É muito menos comum que um quadrangular, mas é mais conveniente colocá-lo: três ladrilhos se encontram em um ponto, não quatro. As composições podem ser muito interessantes:

Lajes de concreto também são produzidas.

A prevalência do hexágono na natureza é explicada de forma simples. Assim, é mais fácil encaixar círculos e bolas firmemente em um plano se eles tiverem o mesmo diâmetro. Por causa disso, os favos de mel têm esse formato.

Construção de um hexágono regular inscrito em um círculo. Construção de um pentágono regular dado o seu lado. Mova a agulha da bússola para o ponto de interseção do arco recém-desenhado com o círculo. Esta construção pode ser feita usando um esquadro e um compasso. Um hexágono regular pode ser construído usando um quadrado T e um quadrado de 30X60°. Construa os vértices dos vértices de um hexágono regular.


Construção de um triângulo equilátero inscrito em um círculo. Os vértices de tal triângulo podem ser construídos usando um compasso e um esquadro com ângulos de 30 e 60 °, ou apenas um compasso. Para construir o lado 2-3, coloque o esquadro T na posição mostrada pelas linhas tracejadas e desenhe uma linha reta passando pelo ponto 2, que definirá o terceiro vértice do triângulo.

Método 1 de 3: Desenhe um hexágono perfeito com um compasso

Marcamos o ponto 1 no círculo e o tomamos como um dos vértices do pentágono. Seja dado um círculo de diâmetro D; você precisa inscrever um heptágono regular nele (Fig. 65). Divida o diâmetro vertical do círculo em sete partes iguais. A partir do ponto 7 com raio igual ao diâmetro do círculo D, descrevemos o arco até cruzar com a continuação do diâmetro horizontal no ponto F. O ponto F é chamado de pólo do polígono.

É na capacidade de construir bissetrizes de ângulos e bissetrizes perpendiculares de segmentos que se baseia a técnica de construção de polígonos regulares

A primeira coluna desta tabela contém o número de lados de um polígono regular inscrito e a segunda coluna contém os coeficientes. O comprimento de um lado de um determinado polígono é obtido multiplicando o raio de um determinado círculo por um fator correspondente ao número de lados desse polígono.

O tópico deste tutorial em vídeo é "Construindo polígonos regulares". Também daremos mais uma vez a definição de um polígono regular, representaremos graficamente, após o que mais uma vez nos certificaremos de que os centros dos círculos inscritos e circunscritos em torno de tal figura coincidirão. Um círculo sempre pode ser inscrito neste polígono, e um círculo sempre pode ser circunscrito em torno dele. Nas aulas anteriores, descobrimos que o papel básico para descrever as propriedades dos polígonos é desempenhado pelas bissetrizes de seus ângulos e pelas mediatrizes de seus lados.

4. Obtemos o triângulo regular desejado ABC. Problema resolvido. 3. Tendo colocado uma perna do compasso em um ponto arbitrário A1 no círculo, com a ajuda da segunda perna marcamos o ponto A2 no mesmo círculo e o conectamos com o ponto A1. Obtemos o primeiro lado do hexágono. 3. Usando as bissetrizes perpendiculares aos lados do polígono, abaixados do ponto O, dividimos todos os seus lados e todos os arcos do círculo encerrado entre seus vértices adjacentes ao meio.

Construções geométricas são uma das partes importantes do aprendizado. A agulha deve perfurar a linha desenhada. Quanto mais precisamente a bússola for definida, mais precisa será a construção. Desenhe outro arco que cruze o círculo. Conecte consistentemente todos os seis pontos de interseção dos arcos com o círculo originalmente desenhado. Nesse caso, o hexágono pode estar errado.

Para obter os vértices / - // - /// dos pontos IV, V e VI, desenhamos linhas horizontais até a interseção com o círculo

Conectamos os vértices encontrados em série entre si. O heptágono pode ser construído desenhando raios do pólo F e através de divisões ímpares do diâmetro vertical. Os centros de ambos os círculos coincidem (ponto O na Fig. 1). A figura também mostra os raios dos círculos circunscrito (R) e inscrito (r).

A construção de um hexágono baseia-se no fato de que seu lado é igual ao raio do círculo circunscrito. Nesta lição, veremos maneiras de construir polígonos regulares usando um compasso e uma régua. O segundo método é baseado no fato de que, se você construir um hexágono regular inscrito em um círculo e conectar seus vértices por meio de um, obterá um triângulo equilátero. O método acima é adequado para construir polígonos regulares com qualquer número de lados.

Construção de um hexágono regular inscrito em um círculo. A construção de um hexágono baseia-se no fato de que seu lado é igual ao raio do círculo circunscrito. Portanto, para construir, basta dividir o círculo em seis partes iguais e conectar os pontos encontrados entre si (Fig. 60, a).

Um hexágono regular pode ser construído usando um quadrado T e um quadrado de 30X60°. Para realizar esta construção, tomamos o diâmetro horizontal do círculo como a bissetriz dos ângulos 1 e 4 (Fig. 60, b), construímos os lados 1-6, 4-3, 4-5 e 7-2, após o que desenhe os lados 5-6 e 3-2.

Construção de um triângulo equilátero inscrito em um círculo. Os vértices de tal triângulo podem ser construídos usando um compasso e um esquadro com ângulos de 30 e 60 °, ou apenas um compasso.

Considere duas maneiras de construir um triângulo equilátero inscrito em um círculo.

primeira via(Fig. 61, a) baseia-se no fato de que todos os três ângulos do triângulo 7, 2, 3 contêm cada um 60 °, e a linha vertical traçada através do ponto 7 é a altura e a bissetriz do ângulo 1. Desde o ângulo 0-1-2 é igual a 30°, então para encontrar o lado

1-2, basta construir um ângulo de 30° no ponto 1 e lado 0-1. Para fazer isso, defina o quadrado T e o quadrado conforme mostrado na figura, desenhe uma linha 1-2, que será um dos lados do triângulo desejado. Para construir o lado 2-3, coloque o esquadro T na posição mostrada pelas linhas tracejadas e desenhe uma linha reta passando pelo ponto 2, que definirá o terceiro vértice do triângulo.

segunda via baseia-se no fato de que, se você construir um hexágono regular inscrito em um círculo e, em seguida, conectar seus vértices através de um, obterá um triângulo equilátero.

Para construir um triângulo (Fig. 61, b), marcamos um ponto de vértice 1 no diâmetro e desenhamos uma linha diametral 1-4. Além disso, do ponto 4 com raio igual a D / 2, descrevemos o arco até que ele se cruze com o círculo nos pontos 3 e 2. Os pontos resultantes serão outros dois vértices do triângulo desejado.

Construção de um quadrado inscrito em um círculo. Esta construção pode ser feita usando um esquadro e um compasso.

O primeiro método baseia-se no fato de que as diagonais do quadrado se cruzam no centro do círculo circunscrito e são inclinadas em relação aos seus eixos em um ângulo de 45°. Com base nisso, instalamos um esquadro em T e um esquadro com ângulos de 45° conforme mostra a Fig. 62, a, e marque os pontos 1 e 3. Além disso, através desses pontos, desenhamos os lados horizontais do quadrado 4-1 e 3-2 com a ajuda de um quadrado T. Em seguida, usando um esquadro em T ao longo da perna do quadrado, desenhamos os lados verticais do quadrado 1-2 e 4-3.

O segundo método é baseado no fato de que os vértices do quadrado bisseccionam os arcos do círculo encerrados entre as extremidades do diâmetro (Fig. 62, b). Marcamos os pontos A, B e C nas extremidades de dois diâmetros mutuamente perpendiculares e, a partir deles, com um raio y, descrevemos os arcos até que se cruzem.

Além disso, através dos pontos de interseção dos arcos, desenhamos linhas auxiliares, marcadas na figura com linhas contínuas. Seus pontos de interseção com o círculo definirão os vértices 1 e 3; 4 e 2. Os vértices do quadrado desejado obtido dessa maneira são conectados em série entre si.

Construção de um pentágono regular inscrito em um círculo.

Para inscrever um pentágono regular em um círculo (Fig. 63), fazemos as seguintes construções.

Marcamos o ponto 1 no círculo e o tomamos como um dos vértices do pentágono. Divida o segmento AO ao meio. Para fazer isso, com o raio AO do ponto A, descrevemos o arco até a interseção com o círculo nos pontos M e B. Conectando esses pontos com uma linha reta, obtemos o ponto K, que conectamos ao ponto 1. Com um raio igual ao segmento A7, descrevemos o arco do ponto K até a interseção com a linha diametral AO ​​no ponto H. Conectando o ponto 1 ao ponto H, obtemos o lado do pentágono. Então, com uma abertura do compasso igual ao segmento 1H, descrevendo o arco do vértice 1 até a interseção com o círculo, encontramos os vértices 2 e 5. Tendo feito entalhes dos vértices 2 e 5 com a mesma abertura do compasso, obtemos o restante vértices 3 e 4. Conectamos os pontos encontrados sequencialmente entre si.

Construção de um pentágono regular dado o seu lado.

Para construir um pentágono regular ao longo de seu lado dado (Fig. 64), dividimos o segmento AB em seis partes iguais. Dos pontos A e B com raio AB, descrevemos arcos, cuja interseção dará o ponto K. Através deste ponto e da divisão 3 na linha AB, desenhamos uma linha vertical.

Obtemos o ponto 1-vértice do pentágono. Então, com um raio igual a AB, do ponto 1 descrevemos o arco até a interseção com os arcos previamente traçados dos pontos A e B. Os pontos de interseção dos arcos determinam os vértices do pentágono 2 e 5. Conectamos o encontrado vértices em série entre si.

Construção de um heptágono regular inscrito em um círculo.

Seja dado um círculo de diâmetro D; você precisa inscrever um heptágono regular nele (Fig. 65). Divida o diâmetro vertical do círculo em sete partes iguais. Do ponto 7 com raio igual ao diâmetro do círculo D, descrevemos o arco até cruzar com a continuação do diâmetro horizontal no ponto F. O ponto F é chamado de pólo do polígono. Tomando o ponto VII como um dos vértices do heptágono, traçamos raios do pólo F através de divisões pares do diâmetro vertical, cuja interseção com o círculo determinará os vértices VI, V e IV do heptágono. Para obter os vértices / - // - /// dos pontos IV, V e VI, desenhamos linhas horizontais até que se cruzem com o círculo. Conectamos os vértices encontrados em série entre si. O heptágono pode ser construído desenhando raios do pólo F e através de divisões ímpares do diâmetro vertical.

O método acima é adequado para construir polígonos regulares com qualquer número de lados.

A divisão de um círculo em qualquer número de partes iguais também pode ser feita usando os dados da Tabela. 2, que mostra os coeficientes que permitem determinar as dimensões dos lados dos polígonos regulares inscritos.

Construções geométricas são uma das partes principais do aprendizado. Eles formam o pensamento espacial e lógico e também permitem que você entenda a validade geométrica primitiva e natural. As construções são feitas em um plano usando um compasso e uma régua. Essas ferramentas permitem construir um grande número de formas geométricas. Ao mesmo tempo, muitas figuras que parecem bastante difíceis são construídas usando as regras mais simples. Digamos, como construir um verdadeiro hexágono, é permitido descrever cada um em poucas palavras.

você vai precisar

  • Compasso, régua, lápis, folha de papel.

Instrução

1. Desenhar um círculo. Defina alguma distância entre as pernas da bússola. Essa distância será o raio do círculo. Escolha um raio de forma que desenhar um círculo seja bastante confortável. O círculo deve caber inteiramente na folha de papel. Uma distância muito grande ou muito pequena entre as pernas do compasso pode levar à sua alteração durante o desenho. A distância ideal será aquela em que o ângulo entre as pernas da bússola é de 15 a 30 graus.

2. Construa os vértices dos vértices de um hexágono regular. Defina a perna da bússola, na qual a agulha é fixada, em qualquer ponto do círculo. A agulha deve perfurar a linha desenhada. Quanto mais correto for o compasso, mais correta será a construção. Desenhe um arco de um círculo para que ele cruze o círculo desenhado anteriormente. Mova a agulha da bússola para o ponto de interseção do arco recém-desenhado com o círculo. Desenhe outro arco que cruze o círculo. Mova a agulha da bússola novamente para o ponto de interseção do arco e do círculo e desenhe o arco novamente. Repita esta ação mais três vezes, movendo-se na mesma direção ao redor do círculo. Cada um deve ter seis arcos e seis pontos de interseção.

3. Construir um hexágono positivo. Combine passo a passo todos os seis pontos de interseção dos arcos com o círculo originalmente desenhado. Conecte os pontos com linhas retas desenhadas com régua e lápis. Após as ações realizadas, será obtido um verdadeiro hexágono inscrito em um círculo.

hexágono Considera-se que um polígono tem seis ângulos e seis lados. Os polígonos são convexos e côncavos. Em um hexágono convexo, todos os ângulos internos são obtusos; em um côncavo, um ou mais ângulos são agudos. O hexágono é bastante fácil de construir. Isso é feito em algumas etapas.

você vai precisar

  • Lápis, folha de papel, régua

Instrução

1. Uma folha de papel é tomada e 6 pontos são marcados aproximadamente como mostrado na Fig. 1.

2. Mais tarde, depois de marcados os pontos, pega-se uma régua, um lápis e com a ajuda deles passo a passo, um após o outro, ligam-se os pontos como se vê na Fig. 2.

Vídeos relacionados

Observação!
A soma de todos os ângulos internos de um hexágono é 720 graus.

Hexágonoé um polígono, aquele que tem seis cantos. Para desenhar um hexágono arbitrário, você precisa fazer cada 2 ações.

você vai precisar

  • Lápis, régua, folha de papel.

Instrução

1. Você precisa pegar um lápis na mão e marcar 6 pontos arbitrários na folha. No futuro, esses pontos desempenharão o papel de cantos do hexágono. (Figura 1)

2. Pegue uma régua e desenhe 6 segmentos nesses pontos, que seriam conectados entre si nos pontos traçados anteriormente (Fig. 2)

Vídeos relacionados

Observação!
Um tipo especial de hexágono é o hexágono positivo. É chamado assim porque todos os seus lados e ângulos são iguais entre si. É possível descrever ou inscrever um círculo em torno de tal hexágono. Vale ressaltar que nos pontos obtidos ao tocar o círculo inscrito e os lados do hexágono, os lados do hexágono positivo são divididos ao meio.

Conselho util
Na natureza, os hexágonos positivos são muito populares. Por exemplo, todo o favo de mel tem uma forma hexagonal positiva. Ou a rede cristalina do grafeno (modificação do carbono) também tem a forma de um hexágono positivo.

Como aumentar um ou outro cantoé uma grande questão. Mas para alguns ângulos, a tarefa é simplificada de forma invisível. Um desses ângulos é canto a 30 graus. É igual a? / 6, ou seja, o número 30 é um divisor de 180. Além disso, seu seno é conhecido. Isso ajuda na sua construção.

você vai precisar

  • transferidor, esquadro, compasso, régua

Instrução

1. Para começar, considere uma configuração particularmente primitiva quando você tem um transferidor em suas mãos. Então, uma linha reta em um ângulo de 30 graus em relação a esta pode ser facilmente adiada com suporte para ela.

2. Além do transferidor, existem canto cantos, um dos ângulos dos quais é igual a 30 graus. Então outro canto canto o ângulo será igual a 60 graus, ou seja, você precisa de um visual menor canto para construir a linha necessária.

3. Agora vamos passar para maneiras não triviais de construir um ângulo de 30 graus. Como você sabe, o seno de um ângulo de 30 graus é 1/2. Para construí-lo, precisamos construir em linha reta canto trio canto nik. Talvez possamos construir duas linhas perpendiculares. Mas a tangente de 30 graus é um número irracional, então só podemos calcular a razão entre as pernas aproximadamente (somente se não houver calculadora) e, portanto, construir canto cerca de 30 graus.

4. Neste caso, também é possível fazer uma construção exata. Vamos novamente levantar duas linhas perpendiculares, nas quais as pernas estarão localizadas diretamente canto três canto nika. Separemos uma perna reta BC de algum comprimento com o apoio de um compasso (B é uma reta canto). Depois disso, aumentaremos o comprimento entre as pernas do compasso em 2 vezes, o que é elementar. Desenhando um círculo centrado no ponto C com um raio desse comprimento, encontramos o ponto de interseção do círculo com outra linha reta. Este ponto será o ponto A reto canto três canto ABC, e canto A será igual a 30 graus.

5. Ereto canto em 30 graus é permitido e com o apoio do círculo, aplicando o que é igual a?/6. Vamos construir um círculo com raio OB. Consideremos na teoria da canto círculo, onde OA = OB = R é o raio do círculo, onde canto OAB = 30 graus. Seja OE a altura desse triângulo isósceles canto nika e, conseqüentemente, sua bissetriz e mediana. Então canto AOE = 15 graus, e pela fórmula do meio ângulo, sin(15o) = (sqrt(3)-1)/(2*sqrt(2)).Portanto, AE = R*sin(15o). Otsel, AB = 2AE = 2R*sin(15o). Construindo um círculo de raio BA centrado no ponto B, encontramos o ponto de intersecção A deste círculo com o inicial. O ângulo AOB será de 30 graus.

6. Se pudermos determinar o comprimento dos arcos de alguma forma, então, deixando de lado o arco de comprimento ?*R/6, também obtemos canto a 30 graus.

Observação!
Deve ser lembrado que no parágrafo 5 podemos apenas aproximar um ângulo, porque números irracionais aparecerão nos cálculos.

hexágono chamado de caso especial de polígono - uma figura formada pela maioria dos pontos em um plano limitado por uma polilinha fechada. Um hexágono positivo (hexágono), por sua vez, também é um caso especial - é um polígono com seis lados iguais e ângulos iguais. Esta figura é significativa porque o comprimento de todos os seus lados é igual ao raio do círculo descrito em torno da figura.

você vai precisar

  • - bússola;
  • - governante;
  • - lápis;
  • - papel.

Instrução

1. Selecione o comprimento do lado do hexágono. Pegue um compasso e ajuste a distância entre a ponta da agulha, localizada em uma de suas pernas, e a ponta do estilete, localizada na outra perna, igual ao comprimento do lado da figura que está sendo desenhada. Para fazer isso, você pode usar uma régua ou preferir uma distância aleatória se esse momento não for significativo. Fixe as pernas da bússola com um parafuso, se possível.

2. Desenhe um círculo com um compasso. A distância selecionada entre as pernas será o raio do círculo.

3. Divida o círculo com pontos em seis partes iguais. Esses pontos serão os vértices dos cantos do hexágono e, consequentemente, as extremidades dos segmentos que representam seus lados.

4. Defina a perna da bússola com a agulha para um ponto arbitrário localizado na linha do círculo delineado. A agulha deve perfurar corretamente a linha. A precisão das construções depende diretamente da precisão da instalação da bússola. Desenhe um arco com uma bússola de forma que ele cruze em 2 pontos o círculo desenhado primeiro.

5. Mova a perna do compasso com a agulha para um dos pontos de interseção do arco desenhado com o círculo original. Desenhe outro arco que também cruze o círculo em 2 pontos (um deles coincidirá com o ponto da localização anterior da agulha da bússola).

6. Da mesma forma, reorganize a agulha da bússola e desenhe arcos mais quatro vezes. Mova a perna da bússola com a agulha em uma direção ao redor da circunferência (invariavelmente no sentido horário ou anti-horário). Como resultado, devem ser identificados seis pontos de interseção dos arcos com o círculo inicialmente construído.

7. Desenhe um hexágono positivo. Passo a passo em pares, combine os seis pontos obtidos na etapa anterior com segmentos. Desenhe segmentos de linha com um lápis e uma régua. O resultado será um verdadeiro hexágono. Posteriormente, é permitida a execução da construção para apagar os elementos auxiliares (arcos e círculos).

Observação!
Faz sentido escolher tal distância entre as pernas da bússola, de modo que o ângulo entre elas seja igual a 15-30 graus, pelo contrário, ao construir construções, essa distância pode facilmente se extraviar.

Ao construir ou desenvolver planos de projeto de casa, muitas vezes é necessário construir canto, igual ao existente. Amostras e habilidades de geometria escolar vêm para apoiar.

Instrução

1. Um ângulo é formado por duas linhas retas que partem do mesmo ponto. Este ponto será chamado de vértice do canto e as linhas serão os lados do canto.

2. Use três letras para designar os cantos: uma no topo, duas nas laterais. são chamados canto, começando com a letra que fica de um lado, depois chamam a letra que está no topo e depois a letra do outro lado. Use outros métodos para marcar os cantos se estiver mais confortável do lado oposto. Ocasionalmente, apenas uma letra é chamada, que está no topo. E é permitido designar ângulos com letras gregas, digamos, α, β, γ.

3. Há situações em que você precisa desenhar canto de modo que seja igual ao ângulo dado. Se não houver probabilidade de usar um transferidor ao construir um desenho, é permitido fazer apenas com uma régua e um compasso. Possivelmente, na linha reta indicada no desenho pelas letras MN, é necessário construir canto no ponto K, de modo que seja igual ao ângulo B. Ou seja, a partir do ponto K você precisa traçar uma linha reta formando com a linha MN canto, aquele que será igual ao ângulo B.

4. Primeiro, marque um ponto em toda a lateral desse canto, digamos, os pontos A e C, depois una os pontos C e A com uma linha reta. Obter tre canto Nik ABC.

5. Agora construa na linha MN os mesmos três canto de modo que seu vértice B esteja na linha do ponto K. Use a regra para construir um triângulo canto nika em três lados. Separe o segmento KL do ponto K. Deve ser igual ao segmento BC. Obtenha o ponto L.

6. A partir do ponto K, desenhe um círculo com raio igual ao segmento BA. De L desenhe um círculo com raio CA. Combine o ponto resultante (P) da interseção de 2 círculos com K. Obtenha um tri canto nick KPL, aquele que será igual a tre canto Niku ABC. Então você consegue canto K. Será igual ao ângulo B. Para tornar esta construção mais confortável e rápida, separe segmentos iguais do vértice B, usando uma solução de compasso, sem mover as pernas, descreva o círculo com o mesmo raio do ponto K.

Vídeos relacionados

Observação!
Evite a metamorfose acidental da distância entre as pernas da bússola. Nesse caso, o hexágono pode estar errado.

Conselho util
Faz sentido fazer construções com a ajuda de um compasso com um estilete perfeitamente afiado. Portanto, as construções serão especialmente precisas.

Grades de hexágonos (grades hexagonais) são usadas em alguns jogos, mas não são tão simples e comuns quanto as grades de retângulos. Venho coletando recursos sobre grades hexadecimais há quase 20 anos e escrevi este guia para as abordagens mais elegantes implementadas no código mais simples. O artigo faz uso frequente dos manuais de Charles Fu e Clark Verbrugge. Descreverei as diferentes maneiras de criar grades hexagonais, seu relacionamento, bem como os algoritmos mais comuns. Muitas partes deste artigo são interativas: selecionar um tipo de grade altera os diagramas, códigos e textos correspondentes. (Nota per.: isso se aplica apenas ao original, aconselho que estudem. Na tradução, todas as informações do original são preservadas, mas sem interatividade.).

Os exemplos de código no artigo são escritos em pseudocódigo, portanto, são mais fáceis de ler e entender para escrever sua própria implementação.

Geometria

Hexágonos são polígonos hexagonais. Hexágonos regulares têm todos os lados (faces) do mesmo comprimento. Só trabalharemos com hexágonos regulares. Normalmente, as grades hexagonais usam orientações horizontais (topo agudo) e verticais (topo plano).


Hexágonos de topo plano (esquerda) e pontiagudo (direita)

Os hexágonos têm 6 faces. Cada face é compartilhada por dois hexágonos. Hexágonos têm 6 pontos de canto. Cada ponto de canto é compartilhado por três hexágonos. Você pode ler mais sobre centros, arestas e pontos de canto em meu artigo sobre partes de malha (quadrados, hexágonos e triângulos).

cantos

Em um hexágono regular, os ângulos internos medem 120°. Existem seis "cunhas", cada uma das quais é um triângulo equilátero com ângulos internos de 60°. ponto de canto eué (60° * i) + 30°, unidades de tamanho do centro. Em código:

Função 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) )
Para preencher um hexágono, você precisa obter os vértices do polígono de hex_corner(…, 0) a hex_corner(…, 5) . Para desenhar o contorno do hexágono, você precisa usar esses vértices e, em seguida, desenhar a linha novamente em hex_corner(…, 0) .

A diferença entre as duas orientações é que x e y são trocados, o que faz com que os ângulos mudem: os hexágonos de topo plano têm ângulos de 0°, 60°, 120°, 180°, 240°, 300° e os hexágonos de topo pontiagudo têm 30°, 90°, 150°, 210°, 270°, 330°.


Cantos hexagonais com topo plano e afiado

Tamanho e localização

Agora queremos organizar vários hexágonos juntos. Na orientação paisagem, a altura do hexágono é height = size * 2 . A distância vertical entre hexágonos adjacentes é vert = altura * 3/4.

A largura do hexágono é width = sqrt(3)/2 * height . Distância horizontal entre hexágonos adjacentes horiz = largura .

Alguns jogos usam pixel art para os hexágonos, o que não corresponde exatamente aos hexágonos corretos. As fórmulas de ângulo e posição descritas nesta seção não corresponderão às dimensões de tais hexágonos. O restante do artigo que descreve os algoritmos de grade hexagonal se aplica mesmo se os hexágonos estiverem ligeiramente esticados ou compactados.



Sistemas coordenados

Vamos começar a montar os hexágonos em uma grade. No caso de grades de quadrados, há apenas uma maneira óbvia de montar. Para hexágonos, existem muitas abordagens. Eu recomendo usar coordenadas cúbicas como representação primária. Coordenadas axiais ou coordenadas de deslocamento devem ser usadas para armazenar mapas e exibir coordenadas para o usuário.

Coordenadas de deslocamento

A abordagem mais comum é compensar cada coluna ou linha sucessiva. As colunas são indicadas por col ou q . As linhas são indicadas por linha ou r . Você pode deslocar colunas/linhas ímpares ou pares, de modo que os hexágonos horizontal e vertical tenham duas opções cada.


Arranjo horizontal "ímpar-r"


Arranjo horizontal "par-r"


Arranjo vertical "odd-q"


Arranjo vertical "even-q"

Coordenadas cúbicas

Outra maneira de olhar para grades de hexágonos é ver nelas três eixos principais, não dois, como em grades de quadrados. Eles mostram simetria elegante.

Pegue uma grade de cubos e recortar plano diagonal em x + y + z = 0 . Essa é uma ideia estranha, mas nos ajudará a simplificar os algoritmos da grade hexagonal. Em particular, poderemos usar operações padrão de coordenadas cartesianas: soma e subtração de coordenadas, multiplicação e divisão por um valor escalar e também distâncias.

Observe os três eixos principais na grade de cubos e sua relação com os seis diagonal direções da grade de hexágonos. Os eixos diagonais da grade correspondem à direção principal da grade de hexágonos.


hexágonos


Cuba

Como já temos algoritmos para grades de quadrados e cubos, o uso de coordenadas cúbicas nos permite adaptar esses algoritmos para grades de hexágonos. Eu estarei usando este sistema para a maioria dos algoritmos do artigo. Para usar algoritmos com um sistema de coordenadas diferente, vou transformar as coordenadas cúbicas, executar o algoritmo e transformá-las de volta.

Aprenda como as coordenadas cúbicas funcionam para uma grade de hexágonos. Ao selecionar hexágonos, as coordenadas cúbicas correspondentes aos três eixos são destacadas.

  1. Cada direção da grade de cubos corresponde a linhas em uma grade de hexágonos. Tente selecionar um hexágono com z igual a 0, 1, 2, 3 para ver a conexão. A linha está marcada em azul. Tente o mesmo para x (verde) e y (roxo).
  2. Cada direção da grade hexagonal é uma combinação de duas direções da grade cúbica. Por exemplo, o "norte" da grade hexagonal fica entre +y e -z , então cada passo para "norte" aumenta y em 1 e diminui z em 1.
Coordenadas cúbicas são uma escolha razoável para o sistema de coordenadas de grade hexagonal. A condição é x + y + z = 0 , portanto deve ser preservada nos algoritmos. A condição também garante que sempre haverá uma coordenada canônica para cada hexágono.

Existem muitos sistemas de coordenadas diferentes para cubos e hexágonos. Em alguns deles, a condição difere de x + y + z = 0 . Mostrei apenas um dos muitos sistemas. Você também pode criar coordenadas cúbicas com x-y , y-z , z-x , que terão seu próprio conjunto de propriedades interessantes, mas não as cobrirei aqui.

Mas você pode argumentar que não deseja armazenar 3 números para coordenadas porque não sabe como armazenar um mapa como esse.

Coordenadas axiais

O sistema de coordenadas axiais, às vezes chamado de "trapezoidal", é construído com base em duas ou três coordenadas do sistema de coordenadas cúbicas. Como temos a condição x + y + z = 0 , a terceira coordenada não é necessária. As coordenadas axiais são úteis para armazenar mapas e exibir as coordenadas para o usuário. Assim como nas coordenadas cúbicas, você pode usar as operações padrão de soma, subtração, multiplicação e divisão de coordenadas cartesianas com elas.

Existem muitos sistemas de coordenadas cúbicas e muitos axiais. Neste guia, não cobrirei todas as combinações. Vou escolher duas variáveis, q (coluna) er (linha). Nos circuitos deste artigo, q corresponde a x e r corresponde a z , mas esse mapeamento é arbitrário porque você pode girar e girar os circuitos para obter diferentes mapeamentos.

A vantagem deste sistema sobre as grades de deslocamento é a maior clareza dos algoritmos. A desvantagem do sistema é que armazenar um mapa retangular é um pouco estranho; consulte a seção sobre como salvar mapas. Alguns algoritmos são ainda mais claros em coordenadas cúbicas, mas como temos a condição x + y + z = 0 , podemos calcular a terceira coordenada implícita e usá-la nesses algoritmos. Em meus projetos, eu chamo os eixos q , r , s , então a condição se parece com q + r + s = 0 , e posso calcular s = -q - r quando necessário.

eixos

Coordenadas de deslocamento são a primeira coisa em que a maioria das pessoas pensa porque são iguais às coordenadas cartesianas padrão usadas para grades quadradas. Infelizmente, um dos dois eixos tem que ir contra a corrente, e isso complica as coisas como resultado. Os sistemas cúbicos e axiais vão além e têm algoritmos mais simples, mas o armazenamento de mapas é um pouco mais complexo. Existe outro sistema chamado "intercalado" ou "duplo", mas não vamos considerá-lo aqui; alguns acham mais fácil de trabalhar do que cúbicos ou axiais.


Coordenadas de deslocamento, cúbicas e axiais

Eixoé a direção na qual a coordenada correspondente é incrementada. A perpendicular ao eixo é a linha na qual a coordenada permanece constante. Os diagramas de grade acima mostram linhas perpendiculares.

Transformação de coordenadas

É provável que você use coordenadas axiais ou de deslocamento em seu projeto, mas muitos algoritmos são mais facilmente expressos em coordenadas cúbicas. Portanto, precisamos ser capazes de converter coordenadas entre sistemas.

As coordenadas axiais estão intimamente relacionadas às coordenadas cúbicas, então a conversão é simples:

# converte coordenadas cúbicas em axiais q = x r = z # converte coordenadas axiais em cúbicas x = q z = r y = -x-z
No código, essas duas funções podem ser escritas da seguinte maneira:

Function cube_to_hex(h): # axial var q = h.x var r = h.z return Hex(q, r) function hex_to_cube(h): # cube var x = h.q var z = h.r var y = -x-z return Cube(x, y ,z)
As coordenadas de deslocamento são um pouco mais complicadas:

hexágonos vizinhos

Dado um hexágono, quais são os seis hexágonos próximos a ele? Como você pode esperar, a resposta é mais fácil em coordenadas cúbicas, bastante simples em coordenadas axiais e um pouco complicada em coordenadas de deslocamento. Você também pode precisar calcular seis hexágonos "diagonais".

Coordenadas cúbicas

Mover um espaço em coordenadas hexadecimais altera uma das três coordenadas cúbicas em +1 e a outra em -1 (a soma deve permanecer 0). Três coordenadas possíveis podem mudar em +1 e as duas restantes podem mudar em -1. Isso nos dá seis mudanças possíveis. Cada um corresponde a uma das direções do hexágono. A maneira mais simples e rápida é pré-calcular as alterações e colocá-las na tabela Cube(dx, dy, dz) de coordenadas cúbicas em tempo de compilação:

Var direções = [ Cubo(+1, -1, 0), Cubo(+1, 0, -1), Cubo(0, +1, -1), Cubo(-1, +1, 0), Cubo( -1, 0, +1), Cube(0, -1, +1) ] function cube_direction(direction): retorna direções function cube_neighbor(hex, direction): return cube_add(hex, cube_direction(direction))

Coordenadas axiais

Como antes, usamos o sistema cúbico para começar. Vamos pegar a tabela Cube(dx, dy, dz) e convertê-la na tabela Hex(dq, dr):

Var direções = [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0, +1) ] função hex_direction(direção): retornar direções função hex_neighbor(hex, direção): var dir = hex_direction(direção) return Hex(hex.q + dir.q, hex.r + dir.r)

Coordenadas de deslocamento

Nas coordenadas axiais, fazemos alterações dependendo de onde estamos na grade. Se estivermos em uma coluna/linha de deslocamento, a regra é diferente do caso de uma coluna/linha sem deslocamento.

Como antes, criamos uma tabela de números para adicionar a col e row . No entanto, desta vez teremos dois arrays, um para colunas/linhas ímpares e outro para as pares. Observe (1,1) no mapa de grade acima e observe como as colunas e as linhas mudam à medida que você se move em cada uma das seis direções. Agora vamos repetir o processo para (2,2) . Tabelas e códigos serão diferentes para cada um dos quatro tipos de grades de deslocamento, aqui está o código correspondente para cada tipo de grade.

ímpar-r
var direções = [ [ 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) ] ] função offset_neighbor(hex, direção): var paridade = hex.row & 1 var dir = direções return Hex(hex.col + dir.col, hex.row + dir.row)


par-r
var direções = [ [ 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) ] ] função offset_neighbor(hex, direção): var paridade = hex.row & 1 var dir = direções return Hex(hex.col + dir.col, hex.row + dir.row)


Grade para linhas pares (EVEN) e ímpares (ODD)

ímpar-q
var direções = [ [ 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) ] ] função offset_neighbor(hex, direção): var paridade = hex.col & 1 var dir = direções return Hex(hex.col + dir.col, hex.row + dir.row)


par-q
var direções = [ [ 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) ] ] função offset_neighbor(hex, direção): var paridade = hex.col & 1 var dir = direções return Hex(hex.col + dir.col, hex.row + dir.row)


Grade para colunas pares (EVEN) e ímpares (ODD)

diagonais

Mover-se no espaço "diagonal" em coordenadas hexagonais altera uma das três coordenadas cúbicas em ±2 e as outras duas em ∓1 (a soma deve permanecer 0).

Var diagonais = [ Cubo(+2, -1, -1), Cubo(+1, +1, -2), Cubo(-1, +2, -1), Cubo(-2, +1, +1 ), Cube(-1, -1, +2), Cube(+1, -2, +1) ] função cube_diagonal_neighbor(hex, direção): return cube_add(hex, diagonais)
Como antes, podemos converter essas coordenadas em coordenadas axiais descartando uma das três coordenadas ou converter em coordenadas de deslocamento pré-computando os resultados.


distâncias

Coordenadas cúbicas

No sistema de coordenadas cúbicas, cada hexágono é um cubo no espaço 3D. Os hexágonos vizinhos estão separados por 1 na grade hexagonal, mas 2 separados na grade do cubo. Isso simplifica o cálculo de distâncias. Em uma grade de quadrados, as distâncias de Manhattan são abs(dx) + abs(dy). Em uma grade de cubos, as distâncias de Manhattan são abs(dx) + abs(dy) + abs(dz). A distância na grade de hexágonos é igual à metade deles:

Função cube_distance(a, b): return (abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)) / 2
O equivalente a esta notação seria dizer que uma das três coordenadas deve ser a soma das outras duas, e então obter isso como uma distância. Você pode escolher a forma de bisseção ou a forma de valor máximo abaixo, mas elas dão o mesmo resultado:

Função cube_distance(a, b): return max(abs(a.x - b.x), abs(a.y - b.y), abs(a.z - b.z))
Na figura, os valores máximos estão destacados em cores. Observe também que cada cor representa uma das seis direções "diagonais".

gif


Coordenadas axiais

No sistema axial, a terceira coordenada é expressa implicitamente. Vamos converter de axial para cúbico para calcular a distância:

Função hex_distance(a, b): var ac = hex_to_cube(a) var bc = hex_to_cube(b) return cube_distance(ac, bc)
Se o compilador no seu caso incorporar (inline) hex_to_cube e cube_distance , ele gerará um código como este:

Função 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
Existem muitas maneiras diferentes de escrever as distâncias entre hexágonos em coordenadas axiais, mas independentemente de como você escreve a distância entre hexágonos no sistema axial é derivada da distância de Manhattan no sistema cúbico. Por exemplo, a "diferença de diferenças" descrita é obtida escrevendo a.q + a.r - b.q - b.r como a.q - b.q + a.r - b.r e usando a forma de valor máximo em vez da forma de bisseção cube_distance . Todos eles são semelhantes se você ver a conexão com coordenadas cúbicas.

Coordenadas de deslocamento

Assim como nas coordenadas axiais, convertemos as coordenadas de deslocamento em coordenadas cúbicas e, em seguida, usamos a distância cúbica.

Função offset_distance(a, b): var ac = offset_to_cube(a) var bc = offset_to_cube(b) return cube_distance(ac, bc)
Usaremos o mesmo padrão para muitos algoritmos: converter de hexágonos em cubos, executar a versão cúbica do algoritmo e converter os resultados em cubos em coordenadas hexagonais (coordenadas axiais ou de deslocamento).

Desenho de linha

Como desenhar uma linha de um hexágono para outro? Estou usando interpolação linear para desenhar linhas. A linha é amostrada uniformemente em N+1 pontos e é calculado em quais hexágonos essas amostras estão localizadas.

gif


  1. Primeiro calculamos N , que será a distância em hexágonos entre os pontos finais.
  2. Em seguida, amostramos uniformemente N+1 pontos entre os pontos A e B. Usando interpolação linear, determinamos que para i valores de 0 a N , incluindo eles, cada ponto será A + (B - A) * 1,0/N * eu . Na figura, esses pontos de controle são mostrados em azul. O resultado são coordenadas de ponto flutuante.
  3. Converta cada ponto de controle (float) de volta para hexágonos (int). O algoritmo é chamado cube_round (veja abaixo).
Conectando tudo para traçar uma linha de A a B:

Function lerp(a, b, t): // para floats return a + (b - a) * t function cube_lerp(a, b, t): // para hexágonos return Cube(lerp(a.x, b.x, t), lerp(a.y, b.y, t), lerp(a.z, b.z, t)) função cube_linedraw(a, b): var N = cube_distance(a, b) var results = for each 0 ≤ i ≤ N: results.append( cube_round(cube_lerp(a, b, 1.0/N * i))) retorna resultados
Notas:

  • Há momentos em que cube_lerp retorna um ponto exatamente na borda entre dois hexágonos. Em seguida, cube_round o desloca para um lado ou para o outro. As linhas ficam melhores se forem deslocadas em uma direção. Isso pode ser feito adicionando um cubo hexadecimal "épsilon" (1e-6, 1e-6, -2e-6) a um ou ambos os pontos finais antes de iniciar o loop. Isso "deslocará" a linha em uma direção para que ela não atinja os limites da borda.
  • O algoritmo DDA-line em grades de quadrados iguala N à distância máxima ao longo de cada um dos eixos. Fazemos o mesmo no espaço cúbico, que é análogo à distância em uma grade de hexágonos.
  • A função cube_lerp deve retornar um cubo com coordenadas flutuantes. Se você estiver programando em uma linguagem de tipagem estática, não poderá usar o tipo Cube. Em vez disso, você pode definir um tipo FloatCube ou inline a função (inline) em seu código de desenho de linha se não quiser definir outro tipo.
  • Você pode otimizar o código inlining (inline) cube_lerp e, em seguida, calcular B.x-A.x , B.x-A.y e 1.0/N fora do loop. A multiplicação pode ser convertida em soma repetida. O resultado é algo como um algoritmo de linha DDA.
  • Eu uso coordenadas axiais ou cúbicas para desenhar linhas, mas se você quiser trabalhar com coordenadas de deslocamento, confira .
  • Existem muitas opções para desenhar linhas. Às vezes, "revestimento" é necessário. Recebi o código para desenhar linhas sobrepostas em hexágonos, mas ainda não o examinei.

faixa de viagem

Faixa de coordenadas

Dado o centro de um hexágono e o alcance N, quais hexágonos estão a N passos dele?

Podemos trabalhar de trás para frente a partir da fórmula de distância hexagonal distance = max(abs(dx), abs(dy), abs(dz)) . Para encontrar todos os hexágonos dentro de N , precisamos de max(abs(dx), abs(dy), abs(dz)) ≤ N . Isso significa que todos os três valores são necessários: abs(dx) ≤ N e abs(dy) ≤ N e abs(dz) ≤ N . Remover o valor absoluto dá -N ≤ dx ≤ N e -N ≤ dy ≤ N e -N ≤ dz ≤ N . No código, isso será um loop aninhado:

Var results = para cada -N ≤ dx ≤ N: para cada -N ≤ dy ≤ N: para cada -N ≤ dz ≤ N: se dx + dy + dz = 0: results.append(cube_add(center, Cube(dx , dy, dz)))
Esse loop funcionará, mas será bastante ineficiente. De todos os valores de dz que iteramos no loop, apenas um realmente satisfaz a condição de cubos dx + dy + dz = 0 . Em vez disso, calcularemos diretamente o valor de dz que satisfaz a condição:

var results = para cada -N ≤ dx ≤ N: para cada max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N): var dz = -dx-dy results.append(cube_add( centro, Cubo(dx, dy, dz)))
Este loop passa apenas pelas coordenadas necessárias. Na figura, cada intervalo é um par de linhas. Cada linha é uma desigualdade. Tomamos todos os hexágonos que satisfazem seis desigualdades.

gif


Intervalos sobrepostos

Se precisar encontrar hexágonos que estão em vários intervalos, você pode percorrê-los antes de gerar uma lista de hexágonos.

Pode-se abordar este problema do ponto de vista da álgebra ou da geometria. Algebricamente, cada área é expressa como condições de desigualdade da forma -N ≤ dx ≤ N , e precisamos encontrar a interseção dessas condições. Geometricamente, cada área é um cubo no espaço 3D, e vamos cruzar dois cubos no espaço 3D para obter um cuboide no espaço 3D. Em seguida, projetamos de volta no plano x + y + z = 0 para obter os hexágonos. Vou resolver este problema algebricamente.

Primeiro, reescrevemos a condição -N ≤ dx ≤ N na forma mais geral x min ≤ x ≤ x max , e tomamos x min = center.x - N e x max = center.x + N . Vamos fazer o mesmo para y e z , resultando em uma visão geral do código da seção anterior:

Var results = para cada xmin ≤ x ≤ xmax: para cada max(ymin, -x-zmax) ≤ y ≤ min(ymax, -x-zmin): var z = -x-y results.append(Cube(x, y, z))
A interseção de dois intervalos a ≤ x ≤ b e c ≤ x ≤ d é max(a, c) ≤ x ≤ min(b, d) . Como a área dos hexágonos é expressa como intervalos sobre x , y , z , podemos interceptar individualmente cada um dos intervalos x , y , z e, em seguida, usar um loop aninhado para gerar uma lista de hexágonos na interseção. Para uma área de hexágonos, tomamos x min = H.x - N e x max = H.x + N , da mesma forma para y e z . Para a interseção de duas áreas hexagonais, tomamos x min = max(H1.x - N, H2.x - N) e x max = min(H1.x + N, H2.x + N), da mesma forma para y e z . O mesmo padrão funciona para a interseção de três ou mais regiões.

gif


Obstáculos

Na presença de obstáculos, é mais fácil preencher com uma restrição de distância (busca em largura). Na figura abaixo, nos limitamos a quatro movimentos. No código, franjas[k] é uma matriz de todos os hexágonos que podem ser alcançados em k etapas. Em cada passagem pelo loop principal, expandimos o nível k-1 pelo nível k .

Função cube_reachable(início, movimento): var visitado = set() adiciona início ao visitado var franjas = franjas.append() para cada 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

voltas

Para um determinado vetor hexágono (a diferença entre dois hexágonos), podemos precisar girá-lo para apontar para outro hexágono. Isso é fácil de fazer com coordenadas cúbicas se você mantiver a rotação de 1/6.

Girar 60° para a direita desloca cada coordenada uma posição para a direita:

[x, y, z] a [-z, -x, -y]
Girar 60° para a esquerda desloca cada coordenada uma posição para a esquerda:

[x, y, z] a [-y, -z, -x]



"Brincando" [no artigo original] com o diagrama, você pode ver que cada volta em 60 ° mudanças sinais e "girar" fisicamente as coordenadas. Após uma rotação de 120°, os sinais são os mesmos novamente. Uma rotação de 180° inverte os sinais, mas as coordenadas são giradas para sua posição original.

Aqui está a sequência completa de rotação da posição P em torno da posição central C, resultando em uma nova posição R:

  1. Converta as posições P e C em coordenadas cúbicas.
  2. Calculando um vetor subtraindo o centro: P_from_C = P - C = Cube(P.x - C.x, P.y - C.y, P.z - C.z) .
  3. Girando o vetor P_from_C conforme descrito acima e atribuindo ao vetor resultante a designação R_from_C .
  4. Convertendo um vetor de volta à posição adicionando um centro: 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. Convertendo a posição cúbica R de volta para o sistema de coordenadas desejado.
Existem vários estágios de transformações, mas cada um deles é bastante simples. É possível encurtar alguns desses passos definindo a rotação diretamente em coordenadas axiais, mas os vetores hexagonais não funcionam com coordenadas de deslocamento e não sei como encurtar os passos para coordenadas de deslocamento. Veja também a discussão sobre outras formas de calcular a rotação no stackexchange.

argolas

anel simples

Para saber se um determinado hexágono pertence a um anel com um determinado raio de raio, você precisa calcular a distância desse hexágono ao centro e descobrir se é igual ao raio. Para obter uma lista de todos esses hexágonos, você precisa dar passos de raio a partir do centro e, em seguida, seguir os vetores girados ao longo do caminho ao longo do anel.

Função cube_ring(center, radius): var results = # este código não funciona para radius == 0; você entende por quê? var cube = cube_add(center, cube_scale(cube_direction(4), radius)) para cada 0 ≤ i< 6: for each 0 ≤ j < radius: results.append(cube) cube = cube_neighbor(cube, i) return results
Nesse código, o cubo começa no anel, mostrado como uma grande seta do centro para o canto do diagrama. Escolhi o ângulo 4 para começar porque corresponde ao caminho que meus números de direção percorrem. Você pode precisar de um ângulo inicial diferente. Em cada estágio do loop interno, o cubo se move um hexágono ao redor do anel. Após 6 * passos de raio, ele termina onde começou.


anéis espirais

Percorrendo os anéis em espiral, podemos preencher o interior dos anéis:

Função cube_spiral(center, radius): var results = for each 1 ≤ k ≤ radius: results = results + cube_ring(center, k) return results



A área do grande hexágono é igual à soma de todos os círculos mais 1 para o centro. Use esta fórmula para calcular a área.

Atravessar hexágonos dessa maneira também pode ser usado para calcular a amplitude de movimento (veja acima).

Área de visibilidade

O que é visível de uma determinada posição a uma determinada distância e não está bloqueado por obstáculos? A maneira mais simples de determinar isso é traçar uma linha para cada hexágono dentro do intervalo especificado. Se a linha não encontrar paredes, você verá um hexágono. Mova o mouse sobre os hexágonos [no diagrama do artigo original] para ver as linhas sendo desenhadas para esses hexágonos e as paredes que as linhas encontram.

Esse algoritmo pode ser lento em grandes áreas, mas é fácil de implementar, então recomendo começar com ele.

gif



Existem muitas definições diferentes de visibilidade. Você quer ver o centro de outro hexágono a partir do centro do inicial? Você quer ver qualquer parte de outro hexágono a partir do centro do inicial? Talvez qualquer parte de outro hexágono a partir de qualquer ponto de partida? As obstruções são menores que um hexágono completo? O escopo é um conceito mais complicado e variado do que aparenta. Vamos começar com o algoritmo mais simples, mas espere que ele calcule a resposta corretamente em seu projeto. Existem até casos em que um algoritmo simples fornece resultados ilógicos.

Eu quero expandir este guia ainda mais. Eu tenho



Artigos aleatórios

Acima