Построете квадрат 6 с помощта на компас. Как да построим правилен шестоъгълник. Описаната окръжност и възможност за застрояване

Темата за многоъгълниците е застъпена в училищната програма, но не й се обръща достатъчно внимание. Междувременно е интересно и това е особено вярно за правилния шестоъгълник или шестоъгълник - в крайна сметка много природни обекти имат тази форма. Те включват пчелни пити и др. Тази форма се прилага много добре в практиката.

Определение и конструкция

Правилният шестоъгълник е плоска фигура, която има шест страни с еднаква дължина и същия брой равни ъгли.

Ако си припомним формулата за сумата от ъглите на многоъгълник

се оказва, че в тази цифра е равна на 720 °. Е, тъй като всички ъгли на фигурата са равни, лесно е да се изчисли, че всеки от тях е равен на 120 °.

Начертаването на шестоъгълник е много просто, всичко, от което се нуждаете, е пергел и линийка.

Инструкцията стъпка по стъпка ще изглежда така:

Ако желаете, можете да направите без линия, като начертаете пет кръга с еднакъв радиус.

Така получената фигура ще бъде правилен шестоъгълник и това може да се докаже по-долу.

Имотите са прости и интересни

За да разберете свойствата на правилния шестоъгълник, има смисъл да го разделите на шест триъгълника:

Това ще помогне в бъдеще за по-ясно показване на неговите свойства, основните от които са:

  1. диаметър на описаната окръжност;
  2. диаметър на вписаната окръжност;
  3. квадрат;
  4. периметър.

Описаната окръжност и възможност за застрояване

Възможно е да се опише кръг около шестоъгълник и освен това само един. Тъй като тази фигура е правилна, можете да го направите съвсем просто: начертайте ъглополовяща от два съседни ъгъла вътре. Те се пресичат в точка О и заедно със страната между тях образуват триъгълник.

Ъглите между страната на шестоъгълника и ъглополовящите ще бъдат 60° всеки, така че определено можем да кажем, че триъгълник, например AOB, е равнобедрен. И тъй като третият ъгъл също ще бъде равен на 60 °, той също е равностранен. От това следва, че отсечките OA и OB са равни, което означава, че могат да служат за радиус на окръжността.

След това можете да отидете на следващата страна и да начертаете ъглополовяща от ъгъла в точка С. Ще се получи друг равностранен триъгълник, а страната AB ще бъде обща за две наведнъж, а OS ще бъде следващият радиус, през който преминава същата окръжност. Ще има общо шест такива триъгълника и те ще имат общ връх в точка О. Оказва се, че ще бъде възможно да се опише кръгът, а той е само един и радиусът му е равен на страната на шестоъгълника :

Ето защо е възможно да се изгради тази фигура с помощта на пергел и линийка.

Е, площта на този кръг ще бъде стандартна:

Вписан кръг

Центърът на описаната окръжност съвпада с центъра на вписаната. За да проверим това, можем да начертаем перпендикуляри от точка O към страните на шестоъгълника. Те ще бъдат височините на онези триъгълници, които съставят шестоъгълника. А в равнобедрен триъгълник височината е медианата по отношение на страната, на която лежи. Така тази височина не е нищо друго освен перпендикулярна ъглополовяща, която е радиусът на вписаната окръжност.

Височината на равностранен триъгълник се изчислява просто:

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

И тъй като R=a и r=h, се оказва, че

r=R(√3)/2.

Така вписаната окръжност минава през центровете на страните на правилен шестоъгълник.

Площта му ще бъде:

S=3πa²/4,

тоест три четвърти от описаното.

Периметър и площ

Всичко е ясно с периметъра, това е сумата от дължините на страните:

Р=6а, или P=6R

Но площта ще бъде равна на сумата от всичките шест триъгълника, на които може да бъде разделен шестоъгълникът. Тъй като площта на триъгълник се изчислява като половината от произведението на основата и височината, тогава:

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

S=3R²(√3)/2

Тези, които желаят да изчислят тази площ през радиуса на вписаната окръжност, могат да направят така:

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

Занимателни конструкции

Триъгълник може да бъде вписан в шестоъгълник, чиито страни ще свързват върховете през едно:

Те ще бъдат общо две, а налагането им едно върху друго ще даде звездата на Давид. Всеки от тези триъгълници е равностранен. Това е лесно да се провери. Ако погледнете страната AC, тогава тя принадлежи на два триъгълника наведнъж - BAC и AEC. Ако в първия от тях AB \u003d BC, а ъгълът между тях е 120 °, тогава всеки от останалите ще бъде 30 °. От това можем да направим логични изводи:

  1. Височината на ABC от върха B ще бъде равна на половината от страната на шестоъгълника, тъй като sin30°=1/2. Тези, които желаят да проверят това, могат да бъдат посъветвани да преизчислят според теоремата на Питагор, тя пасва идеално тук.
  2. Страната AC ще бъде равна на два радиуса на вписаната окръжност, което отново се изчислява с помощта на същата теорема. Тоест AC=2(a(√3)/2)=a(√3).
  3. Триъгълниците ABC, CDE и AEF са равни по двете страни и ъгъла между тях и оттук следва равенството на страните AC, CE и EA.

Пресичайки се един с друг, триъгълниците образуват нов шестоъгълник, който също е правилен. Лесно се доказва:

Така фигурата отговаря на признаците на правилен шестоъгълник - има шест равни страни и ъгли. От равенството на триъгълниците във върховете е лесно да се изведе дължината на страната на новия шестоъгълник:

d=а(√3)/3

Това ще бъде и радиусът на описаната около него окръжност. Радиусът на вписания ще бъде половината от страната на големия шестоъгълник, което беше доказано при разглеждането на триъгълника ABC. Височината му е точно половината от страната, следователно втората половина е радиусът на окръжността, вписана в малкия шестоъгълник:

r₂=а/2

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

Оказва се, че площта на шестоъгълника вътре в звездата на Давид е три пъти по-малка от тази на големия, в който е вписана звездата.

От теория към практика

Свойствата на шестоъгълника се използват много активно както в природата, така и в различни области на човешката дейност. На първо място, това се отнася за болтовете и гайките - шапките на първия и втория не са нищо повече от правилен шестоъгълник, ако не вземете предвид фаските. Размерът на гаечните ключове съответства на диаметъра на вписания кръг - т.е. разстоянието между противоположните страни.

Намери своето приложение и шестоъгълни плочки. Той е много по-рядко срещан от четириъгълния, но е по-удобно да го поставите: три плочки се събират в една точка, а не четири. Композициите могат да бъдат много интересни:

Произвеждат се и бетонови тротоарни плочи.

Разпространението на шестоъгълника в природата се обяснява просто. По този начин е най-лесно да монтирате кръгове и топки плътно върху равнина, ако имат еднакъв диаметър. Поради това пчелните пити имат такава форма.

Построяване на правилен шестоъгълник, вписан в окръжност. Построяване на правилен петоъгълник по дадена страна. Преместете иглата на компаса до пресечната точка на току-що начертаната дъга с кръга. Тази конструкция може да се направи с помощта на квадрат и компас. Правилен шестоъгълник може да бъде конструиран с помощта на Т-квадрат и квадрат 30X60°. Построете точките на върха на ъглите на правилен шестоъгълник.


Построяване на равностранен триъгълник, вписан в окръжност. Върховете на такъв триъгълник могат да бъдат конструирани с помощта на компас и квадрат с ъгли от 30 и 60 ° или само с един компас. За да изградите страна 2-3, поставете Т-квадрата на позицията, показана от пунктираните линии, и начертайте права линия през точка 2, която ще определи третия връх на триъгълника.

Метод 1 от 3: Начертайте перфектен шестоъгълник с компас

Отбелязваме точка 1 на кръга и я приемаме за един от върховете на петоъгълника. Нека е даден кръг с диаметър D; трябва да впишете в него правилен седмоъгълник (фиг. 65). Разделете вертикалния диаметър на кръга на седем равни части. От точка 7 с радиус, равен на диаметъра на окръжността D, описваме дъгата до пресичането й с продължението на хоризонталния диаметър в точка F. Точка F се нарича полюс на многоъгълника.

Техниката за конструиране на правилни многоъгълници се основава на способността за изграждане на ъглополовящи и перпендикулярни ъглополовящи на сегменти

Първата колона на тази таблица съдържа броя на страните на правилен вписан многоъгълник, а втората колона съдържа коефициентите. Дължината на страна на даден многоъгълник се получава чрез умножаване на радиуса на дадена окръжност по коефициент, съответстващ на броя на страните на този многоъгълник.

Темата на този видео урок е "Построяване на правилни многоъгълници". Също така отново ще дадем дефиницията на правилен многоъгълник, ще го изобразим графично, след което отново ще се уверим, че центровете на вписаните и описаните кръгове около такава фигура ще съвпадат. Винаги може да се впише окръжност в този многоъгълник и винаги може да се напише окръжност около него. В хода на предишните уроци разбрахме, че основната роля за описване на свойствата на многоъгълниците играят ъглополовящите на неговите ъгли и перпендикулярните ъглополовящи към страните му.

4. Получихме желания правилен триъгълник ABC. Проблема решен. 3. След като поставим единия крак на компаса в произволна точка A1 на кръга, с помощта на втория крак маркираме точка A2 на същия кръг и го свързваме с точка A1. Получаваме първата страна на шестоъгълника. 3. Използвайки перпендикулярните ъглополовящи към страните на многоъгълника, спуснати от точката О, разделяме наполовина всички негови страни и всички дъги на окръжността, затворени между съседните му върхове.

Геометричните конструкции са една от важните части на обучението. Иглата трябва да пробие начертаната линия. Колкото по-точно е настроен компасът, толкова по-точна ще бъде конструкцията. Начертайте друга дъга, която пресича кръга. Свържете последователно всичките шест точки на пресичане на дъгите с първоначално начертания кръг. В този случай шестоъгълникът може да се окаже грешен.

За да получим върхове / - // - /// от точки IV, V и VI, начертаваме хоризонтални линии до пресечната точка с кръга

Свързваме намерените върхове последователно един с друг. Седмоъгълникът може да бъде конструиран чрез изчертаване на лъчи от полюса F и през нечетни деления на вертикалния диаметър. Центровете на двете окръжности съвпадат (точка O на фиг. 1). Фигурата също така показва радиусите на описаната (R) и вписаната (r) окръжност.

Конструкцията на шестоъгълник се основава на факта, че неговата страна е равна на радиуса на описаната окръжност. В този урок ще разгледаме начини за конструиране на правилни многоъгълници с помощта на пергел и линийка. Вторият метод се основава на факта, че ако изградите правилен шестоъгълник, вписан в кръг, и след това свържете върховете му през един, ще получите равностранен триъгълник. Горният метод е подходящ за конструиране на правилни многоъгълници с произволен брой страни.

Построяване на правилен шестоъгълник, вписан в окръжност.Конструкцията на шестоъгълник се основава на факта, че неговата страна е равна на радиуса на описаната окръжност. Следователно, за да се изгради, е достатъчно да се раздели кръгът на шест равни части и да се свържат намерените точки една с друга (фиг. 60, а).

Правилен шестоъгълник може да бъде конструиран с помощта на Т-квадрат и квадрат 30X60°. За да изпълним тази конструкция, ние вземаме хоризонталния диаметър на кръга като ъглополовяща на ъгли 1 и 4 (фиг. 60, b), изграждаме страни 1-6, 4-3, 4-5 и 7-2, след което ние начертайте страни 5-6 и 3-2.

Построяване на равностранен триъгълник, вписан в окръжност. Върховете на такъв триъгълник могат да бъдат конструирани с помощта на компас и квадрат с ъгли от 30 и 60 ° или само с един компас.

Обмислете два начина за построяване на равностранен триъгълник, вписан в окръжност.

Първи начин(Фиг. 61, а) се основава на факта, че всеки от трите ъгъла на триъгълника 7, 2, 3 съдържа 60 °, а вертикалната линия, прекарана през точка 7, е както височината, така и ъглополовящата на ъгъл 1. Тъй като ъгълът 0-1- 2 е равен на 30°, след което да се намери страната

1-2, достатъчно е да се изгради ъгъл от 30 ° в точка 1 и страна 0-1. За да направите това, задайте Т-квадрат и квадрат, както е показано на фигурата, начертайте линия 1-2, която ще бъде една от страните на желания триъгълник. За да изградите страна 2-3, поставете Т-квадрата на позицията, показана от пунктираните линии, и начертайте права линия през точка 2, която ще определи третия връх на триъгълника.

Втори начинсе основава на факта, че ако построите правилен шестоъгълник, вписан в кръг, и след това свържете върховете му през един, ще получите равностранен триъгълник.

За да построим триъгълник (фиг. 61, b), маркираме връхна точка 1 върху диаметъра и начертаваме диаметрална линия 1-4. Освен това, от точка 4 с радиус, равен на D / 2, описваме дъгата, докато се пресече с кръга в точки 3 и 2. Получените точки ще бъдат два други върха на желания триъгълник.

Построяване на квадрат, вписан в окръжност. Тази конструкция може да се направи с помощта на квадрат и компас.

Първият метод се основава на факта, че диагоналите на квадрата се пресичат в центъра на описаната окръжност и са наклонени към осите му под ъгъл 45°. Въз основа на това инсталираме Т-квадрат и квадрат с ъгли от 45 °, както е показано на фиг. 62, а, и маркирайте точки 1 и 3. По-нататък през тези точки изчертаваме хоризонталните страни на квадрата 4-1 и 3-2 с помощта на Т-квадрат. След това, използвайки Т-квадрат по крака на квадрата, начертаваме вертикалните страни на квадрата 1-2 и 4-3.

Вторият метод се основава на факта, че върховете на квадрата разполовяват дъгите на кръга, затворени между краищата на диаметъра (фиг. 62, b). Отбелязваме точки A, B и C в краищата на два взаимно перпендикулярни диаметъра и от тях с радиус y описваме дъгите до пресичането им.

Освен това, през точките на пресичане на дъгите, изчертаваме спомагателни линии, маркирани на фигурата с плътни линии. Техните точки на пресичане с окръжността ще определят върховете 1 и 3; 4 и 2. Получените по този начин върхове на желания квадрат се свързват последователно помежду си.

Построяване на правилен петоъгълник, вписан в окръжност.

За да впишем правилен петоъгълник в кръг (фиг. 63), правим следните конструкции.

Отбелязваме точка 1 на кръга и я приемаме за един от върховете на петоъгълника. Разделете сегмента AO наполовина. За целта с радиуса AO от точка A описваме дъгата до пресечната точка с окръжността в точки M и B. Свързвайки тези точки с права линия, получаваме точката K, която след това свързваме с точка 1. С радиус, равен на сегмента A7, ние описваме дъгата от точка K до пресечната точка с диаметралната линия AO ​​в точка H. Свързвайки точка 1 с точка H, получаваме страната на петоъгълника. След това, с отвор на компас, равен на сегмента 1H, описващ дъгата от връх 1 до пресечната точка с окръжността, намираме върхове 2 и 5. След като направим прорези от върхове 2 и 5 със същия отвор на компас, получаваме останалите върхове 3 и 4. Свързваме намерените точки последователно една с друга.

Построяване на правилен петоъгълник по дадена страна.

За да построим правилен петоъгълник по дадената му страна (фиг. 64), разделяме отсечката AB на шест равни части. От точки A и B с радиус AB описваме дъги, чието пресичане ще даде точка K. През тази точка и деление 3 на правата AB прекарваме вертикална права.

Получаваме точка 1-връх на петоъгълника. След това, с радиус, равен на AB, от точка 1 описваме дъгата до пресечната точка с дъгите, предварително изтеглени от точките A и B. Пресечните точки на дъгите определят върховете на петоъгълника 2 и 5. Свързваме намерените върхове в серия един с друг.

Построяване на правилен седмоъгълник, вписан в окръжност.

Нека е даден кръг с диаметър D; трябва да впишете в него правилен седмоъгълник (фиг. 65). Разделете вертикалния диаметър на кръга на седем равни части. От точка 7 с радиус, равен на диаметъра на окръжността D, описваме дъгата до пресичането й с продължението на хоризонталния диаметър в точка F. Точка F се нарича полюс на многоъгълника. Като вземем точка VII като един от върховете на седмоъгълника, изчертаваме лъчи от полюса F през равномерни деления на вертикалния диаметър, чието пресичане с окръжността ще определи върховете VI, V и IV на седмоъгълника. За да получим върхове / - // - /// от точки IV, V и VI, рисуваме хоризонтални линии до пресичането им с окръжността. Свързваме намерените върхове последователно един с друг. Седмоъгълникът може да бъде конструиран чрез изчертаване на лъчи от полюса F и през нечетни деления на вертикалния диаметър.

Горният метод е подходящ за конструиране на правилни многоъгълници с произволен брой страни.

Разделянето на кръг на произволен брой равни части може да се извърши и с помощта на данните в табл. 2, където са показани коефициентите, които позволяват да се определят размерите на страните на правилни вписани многоъгълници.

Геометричните конструкции са една от основните части на обучението. Те формират пространствено и логическо мислене, а също така ви позволяват да разберете примитивната и естествена геометрична валидност. Конструкциите се правят на равнина с помощта на пергел и линийка. Тези инструменти ви позволяват да изграждате голям брой геометрични фигури. В същото време много фигури, които изглеждат доста трудни, се изграждат по най-простите правила. Да речем, как да се изгради истински шестоъгълник, е позволено да се опише всеки с няколко думи.

Ще имаш нужда

  • Компаси, линийка, молив, лист хартия.

Инструкция

1. Начертайте кръг. Поставете известно разстояние между краката на компаса. Това разстояние ще бъде радиусът на кръга. Изберете радиус по такъв начин, че рисуването на кръг да е доста удобно. Кръгът трябва да пасне изцяло върху листа хартия. Твърде голямото или твърде малкото разстояние между краката на компаса може да доведе до промяната му по време на рисуване. Оптималното разстояние ще бъде, при което ъгълът между краката на компаса е 15-30 градуса.

2. Построете точките на върха на ъглите на правилен шестоъгълник. Поставете крака на компаса, в който е фиксирана иглата, в която и да е точка от кръга. Иглата трябва да пробие начертаната линия. Колкото по-правилно е настроен компасът, толкова по-правилна ще бъде конструкцията. Начертайте дъга от кръг, така че да пресича предварително начертания кръг. Преместете иглата на компаса до пресечната точка на току-що начертаната дъга с кръга. Начертайте друга дъга, която пресича кръга. Преместете иглата на компаса отново до пресечната точка на дъгата и кръга и начертайте дъгата отново. Повторете това действие още три пъти, движейки се в същата посока около кръга. Всеки трябва да получи шест дъги и шест пресечни точки.

3. Построете положителен шестоъгълник. Поетапно комбинирайте всичките шест точки на пресичане на дъгите с първоначално начертания кръг. Свържете точките с прави линии, начертани с линийка и молив. След извършените действия ще се получи истински шестоъгълник, вписан в кръг.

шестоъгълникСчита се, че многоъгълникът има шест ъгъла и шест страни. Многоъгълниците са както изпъкнали, така и вдлъбнати. В изпъкналия шестоъгълник всички вътрешни ъгли са тъпи; във вдлъбнатия един или повече ъгли са остри. Шестоъгълникът е доста лесен за конструиране. Това става в няколко стъпки.

Ще имаш нужда

  • Молив, лист хартия, владетел

Инструкция

1. Взима се лист хартия и върху него се отбелязват 6 точки приблизително, както е показано на фиг. 1.

2. По-късно, след като точките са маркирани, се вземат линийка, молив и с тяхна помощ стъпаловидно една след друга се свързват точките, както изглежда на фиг. 2.

Подобни видеа

Забележка!
Сумата от всички вътрешни ъгли на шестоъгълник е 720 градуса.

Шестоъгълнике многоъгълник, който има шест ъгъла. За да начертаете произволен шестоъгълник, трябва да направите всеки 2 действия.

Ще имаш нужда

  • Молив, линийка, лист хартия.

Инструкция

1. Трябва да вземете молив в ръката си и да маркирате 6 произволни точки на листа. В бъдеще тези точки ще играят ролята на ъгли в шестоъгълника. (Фиг. 1)

2. Вземете линийка и начертайте 6 сегмента в тези точки, които ще бъдат свързани помежду си в предварително начертаните точки (фиг. 2)

Подобни видеа

Забележка!
Специален тип шестоъгълник е положителният шестоъгълник. Нарича се така, защото всичките му страни и ъгли са равни помежду си. Възможно е да се опише или впише кръг около такъв шестоъгълник. Струва си да се отбележи, че в точките, които се получават чрез докосване на вписания кръг и страните на шестоъгълника, страните на положителния шестоъгълник се разделят наполовина.

Полезен съвет
В природата положителните шестоъгълници са много популярни. Например, цялата пчелна пита има положителна шестоъгълна форма. Или кристалната решетка на графена (модификация на въглерод) също има формата на положителен шестоъгълник.

Как да отгледаме едното или другото ъгъле голям въпрос. Но за някои ъгли задачата е невидимо опростена. Един от тези ъгли е ъгълна 30 градуса. Равно е на?/6, тоест числото 30 е делител на 180. Освен това синусът му е известен. Това помага при изграждането му.

Ще имаш нужда

  • транспортир, квадрат, пергел, линийка

Инструкция

1. Като начало, помислете за особено примитивна настройка, когато имате транспортир в ръцете си. Тогава права линия под ъгъл от 30 градуса спрямо тази може лесно да бъде отложена с опора за нея.

2. В допълнение към транспортира има ъгълъгли, единият от които е равен на 30 градуса. После още един ъгъл ъгълъгълът ще бъде равен на 60 градуса, т.е. имате нужда от визуално по-малък ъгълза изграждане на необходимата линия.

3. Сега нека да преминем към нетривиални начини за изграждане на ъгъл от 30 градуса. Както знаете, синусът на ъгъл от 30 градуса е 1/2. За да го изградим, трябва да изградим прави ъгълта три ъгълник. Може би можем да построим две перпендикулярни прави. Но тангенсът от 30 градуса е ирационално число, така че можем да изчислим съотношението между краката само приблизително (само ако няма калкулатор) и следователно да изградим ъгълоколо 30 градуса.

4. В този случай също е възможно да се направи точна конструкция. Отново ще повдигнем две перпендикулярни линии, върху които краката ще бъдат разположени директно ъгълтре ъгълника. Нека отделим един прав крак BC с някаква дължина с опора на компас (B е права ъгъл). След това ще увеличим дължината между краката на компаса 2 пъти, което е елементарно. Начертавайки окръжност с център в точка C с радиус с тази дължина, намираме пресечната точка на окръжността с друга права линия. Тази точка ще бъде права точка А ъгълтре ъгъл ABC и ъгълА ще бъде равно на 30 градуса.

5. Изправени ъгълв 30 градуса е разрешено и с опора на кръга, прилагайки на какво е равен?/6. Нека построим окръжност с радиус OB. Нека разгледаме в теорията на ъгълокръжност, където OA = OB = R е радиусът на окръжността, където ъгъл OAB = 30 градуса. Нека OE е височината на този равнобедрен триъгълник ъгъл nika и, следователно, нейната ъглополовяща и медиана. Тогава ъгъл AOE = 15 градуса и по формулата за половин ъгъл sin(15o) = (sqrt(3)-1)/(2*sqrt(2)). Следователно AE = R*sin(15o). Отцел, AB = 2AE = 2R*sin(15o). Изграждайки окръжност с радиус BA с център точка B, намираме пресечната точка A на тази окръжност с началната. Ъгъл AOB ще бъде 30 градуса.

6. Ако можем да определим дължината на дъгите по някакъв начин, тогава, отделяйки дъгата с дължина ?*R/6, също получаваме ъгълна 30 градуса.

Забележка!
Трябва да се помни, че в параграф 5 можем само приблизително да определим ъгъл, тъй като в изчисленията ще се появят ирационални числа.

шестоъгълникнаречен специален случай на многоъгълник - фигура, образувана от повечето точки в равнина, ограничена от затворена полилиния. Положителният шестоъгълник (шестоъгълник) от своя страна също е частен случай - той е многоъгълник с шест равни страни и равни ъгли. Тази фигура е важна с това, че дължината на всичките й страни е равна на радиуса на окръжността, описана около фигурата.

Ще имаш нужда

  • - компас;
  • - владетел;
  • - молив;
  • - хартия.

Инструкция

1. Изберете дължината на страната на шестоъгълника. Вземете компас и задайте разстоянието между края на иглата, разположен на единия му крак, и края на стилуса, разположен на другия крак, равно на дължината на страната на рисуваната фигура. За да направите това, можете да използвате владетел или да предпочетете произволно разстояние, ако този момент не е важен. Фиксирайте краката на компаса с винт, ако е възможно.

2. Начертайте кръг с компас. Избраното разстояние между краката ще бъде радиусът на кръга.

3. Разделете кръга с точки на шест равни части. Тези точки ще бъдат върховете на ъглите на шестоъгълника и съответно краищата на сегментите, представляващи неговите страни.

4. Поставете крака на компаса с иглата в произволна точка, разположена на линията на очертания кръг. Иглата трябва правилно да пробие линията. Точността на конструкциите зависи пряко от точността на монтажа на компаса. Начертайте дъга с компас, така че да пресича в 2 точки първо начертаната окръжност.

5. Преместете крака на компаса с иглата до една от пресечните точки на начертаната дъга с оригиналния кръг. Начертайте друга дъга, която също пресича кръга в 2 точки (една от тях ще съвпадне с точката на предишното местоположение на стрелката на компаса).

6. По същия начин пренаредете иглата на компаса и начертайте дъги още четири пъти. Преместете крака на компаса с иглата в една посока около обиколката (неизменно по или обратно на часовниковата стрелка). В резултат на това трябва да се идентифицират шест точки на пресичане на дъгите с първоначално построената окръжност.

7. Начертайте положителен шестоъгълник. Постепенно по двойки комбинирайте шестте точки, получени в предишната стъпка, със сегменти. Начертайте линейни сегменти с молив и линийка. Резултатът ще бъде истински шестоъгълник. По-късно изпълнението на конструкцията е позволено да изтрие помощните елементи (дъги и кръгове).

Забележка!
Има смисъл да изберете такова разстояние между краката на компаса, така че ъгълът между тях да е равен на 15-30 градуса, напротив, при изграждането на конструкции това разстояние лесно може да се заблуди.

Когато се изграждат или разработват планове за проектиране на дома, често е необходимо да се построи ъгъл, равен на съществуващия. Мострите и училищните умения по геометрия идват в подкрепа.

Инструкция

1. Ъгълът се образува от две прави линии, излизащи от една и съща точка. Тази точка ще се нарича връх на ъгъла, а линиите ще бъдат страните на ъгъла.

2. Използвайте три букви, за да обозначите ъглите: една в горната част, две отстрани. са наречени ъгъл, започвайки с буквата, която стои от едната страна, след това наричат ​​буквата, стояща отгоре, и след това буквата от другата страна. Използвайте други методи за маркиране на ъгли, ако ви е по-удобно отсреща. Понякога се извиква само една буква, която е най-отгоре. И е позволено да обозначавате ъгли с гръцки букви, да речем, α, β, γ.

3. Има ситуации, когато трябва да рисувате ъгълтака че да е равен на дадения ъгъл. Ако няма вероятност да се използва транспортир при конструирането на чертеж, е позволено да се прави само с линийка и компас. Възможно, на правата линия, посочена на чертежа с буквите MN, е необходимо да се изгради ъгълв точка K, така че да е равна на ъгъл B. Тоест от точка K трябва да начертаете права линия, образуваща с линията MN ъгъл, този, който ще бъде равен на ъгъл B.

4. Първо маркирайте точка от цялата страна на този ъгъл, да речем, точките A и C, след това обединете точките C и A с права линия. Вземете тре ъгъл nik ABC.

5. Сега постройте на правата MN същите три ъгълтака че неговият връх B да е на правата в точка K. Използвайте правилото за построяване на триъгълник ъгълника от три страни. Отделете сегмента KL от точка K. Тя трябва да е равна на сегмента BC. Вземете точка L.

6. От точка K начертайте окръжност с радиус, равен на сегмента BA. От L начертайте окръжност с радиус CA. Комбинирайте получената точка (P) от пресечната точка на 2 кръга с K. Вземете три ъгълник KPL, този, който ще бъде равен на tre ъгъл niku ABC. Така че получавате ъгъл K. Той ще бъде равен на ъгъл B. За да направите тази конструкция по-удобна и по-бърза, отделете равни сегменти от върха B, като използвате едно компасно решение, без да местите краката, опишете кръга със същия радиус от точка K.

Подобни видеа

Забележка!
Избягвайте случайна метаморфоза на разстоянието между краката на компаса. В този случай шестоъгълникът може да се окаже грешен.

Полезен съвет
Има смисъл да се правят конструкции с помощта на компас с идеално заточен стилус. Така че конструкциите ще бъдат особено точни.

Решетки от шестоъгълници (шестоъгълни решетки) се използват в някои игри, но те не са толкова прости и често срещани като решетките от правоъгълници. Събирам ресурси за шестнадесетични мрежи вече почти 20 години и написах това ръководство за най-елегантните подходи, внедрени в най-простия код. В статията често се използват ръководствата на Чарлз Фу и Кларк Вербрюге. Ще опиша различните начини за създаване на шестоъгълни мрежи, тяхната връзка, както и най-често срещаните алгоритми. Много части от тази статия са интерактивни: избирането на тип мрежа променя съответните диаграми, код и текстове. (Забележка за .: това се отнася само за оригинала, съветвам ви да го проучите. В превода цялата информация на оригинала е запазена, но без интерактивност.).

Примерите за код в статията са написани с псевдокод, така че са по-лесни за четене и разбиране, за да напишете своя собствена реализация.

Геометрия

Шестоъгълниците са шестоъгълни многоъгълници. Правилните шестоъгълници имат всички страни (лица) с еднаква дължина. Ще работим само с правилни шестоъгълници. Обикновено шестоъгълните мрежи използват хоризонтална (остър връх) и вертикална (плосък връх) ориентации.


Шестоъгълници с плосък (вляво) и остър (вдясно) връх

Шестоъгълниците имат 6 лица. Всяко лице е споделено от два шестоъгълника. Шестоъгълниците имат 6 ъглови точки. Всяка ъглова точка се споделя от три шестоъгълника. Можете да прочетете повече за центрове, ръбове и ъглови точки в моята статия за мрежестите части (квадрати, шестоъгълници и триъгълници).

ъгли

В правилния шестоъгълник вътрешните ъгли са 120°. Има шест "клина", всеки от които е равностранен триъгълник с вътрешни ъгли от 60°. ъглова точка азе (60° * i) + 30°, единици за размер от центъра. В код:

Функция 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) )
За да запълните шестоъгълник, трябва да получите върховете на многоъгълника от hex_corner(…, 0) до hex_corner(…, 5) . За да начертаете очертанията на шестоъгълника, трябва да използвате тези върхове и след това да начертаете линията отново в hex_corner(…, 0) .

Разликата между двете ориентации е, че x и y се разменят, което води до промяна на ъглите: шестоъгълниците с плоски върхове имат ъгли от 0°, 60°, 120°, 180°, 240°, 300°, а шестоъгълниците с остри върхове имат 30°, 90°, 150°, 210°, 270°, 330°.


Шестоъгълни ъгли с плосък и остър връх

Размер и местоположение

Сега искаме да подредим няколко шестоъгълника заедно. В пейзажна ориентация височината на шестоъгълника е височина = размер * 2 . Вертикалното разстояние между съседните шестоъгълници е vert = височина * 3/4 ​​​​.

Ширината на шестоъгълника е ширина = sqrt(3)/2 * височина. Хоризонтално разстояние между съседни шестоъгълници horiz = ширина.

Някои игри използват пикселно изкуство за шестоъгълниците, което не съвпада точно с правилните шестоъгълници. Формулите за ъгъл и позиция, описани в този раздел, няма да съответстват на размерите на такива шестоъгълници. Останалата част от статията, описваща алгоритмите на шестоъгълната мрежа, се прилага дори ако шестоъгълниците са леко разтегнати или компресирани.



Координатни системи

Нека започнем да сглобяваме шестоъгълниците в решетка. В случай на решетки от квадрати има само един очевиден начин за сглобяване. За шестоъгълниците има много подходи. Препоръчвам да използвате кубични координати като основно представяне. Аксиалните координати или офсетните координати трябва да се използват за съхраняване на карти и показване на координати на потребителя.

Координати на отместване

Най-често срещаният подход е да компенсирате всяка следваща колона или ред. Колоните се означават с col или q. Редовете се означават с ред или r. Можете да компенсирате нечетни или четни колони/редове, така че хоризонталните и вертикалните шестоъгълници да имат по две опции.


Хоризонтално подреждане "нечетно-п"


Хоризонтално разположение "even-r"


Вертикално подреждане "odd-q"


Вертикално разположение "even-q"

Кубични координати

Друг начин да разгледате решетките от шестоъгълници е да видите в тях триглавни оси, не две, като в мрежи от квадрати. Те показват елегантна симетрия.

Вземете решетка от кубчета и отрязвамдиагонална равнина при x + y + z = 0 . Това е странна идея, но ще ни помогне да опростим алгоритмите на шестоъгълната мрежа. По-специално ще можем да използваме стандартни операции от декартови координати: сумиране и изваждане на координати, умножение и деление на скаларна стойност, а също и разстояния.

Обърнете внимание на трите основни оси на решетката от кубове и връзката им с шестте диагоналпосоки на мрежата от шестоъгълници. Диагоналните оси на мрежата съответстват на основната посока на мрежата от шестоъгълници.


Шестоъгълници


Куба

Тъй като вече имаме алгоритми за мрежи от квадрати и кубове, използването на кубични координати ни позволява да адаптираме тези алгоритми към мрежи от шестоъгълници. Ще използвам тази система за повечето от алгоритмите на статията. За да използвам алгоритми с различна координатна система, ще трансформирам кубичните координати, ще стартирам алгоритъма и след това ще ги трансформирам обратно.

Научете как работят кубичните координати за мрежа от шестоъгълници. При избора на шестоъгълници се маркират кубични координати, съответстващи на трите оси.

  1. Всяка посока на решетката от кубчета съответства на линиивърху решетка от шестоъгълници. Опитайте да изберете шестоъгълник с z равно на 0, 1, 2, 3, за да видите връзката. Линията е маркирана в синьо. Опитайте същото за x (зелено) и y (лилаво).
  2. Всяка посока на шестоъгълна решетка е комбинация от две посоки на решетка на куб. Например "северът" на шестоъгълната мрежа се намира между +y и -z, така че всяка стъпка към "север" увеличава y с 1 и намалява z с 1.
Кубичните координати са разумен избор за координатната система на шестоъгълната мрежа. Условието е x + y + z = 0, така че трябва да се запази в алгоритмите. Условието също така гарантира, че винаги ще има канонична координата за всеки шестоъгълник.

Има много различни координатни системи за кубове и шестоъгълници. В някои от тях условието се различава от x + y + z = 0 . Показах само една от многото системи. Можете също да създадете кубични координати с x-y, y-z, z-x, които ще имат свой собствен набор от интересни свойства, но няма да ги разглеждам тук.

Но може да възразите, че не искате да съхранявате 3 числа за координати, защото не знаете как да съхранявате такава карта.

Аксиални координати

Аксиалната координатна система, понякога наричана "трапецовидна", се изгражда на базата на две или три координати от кубичната координатна система. Тъй като имаме условието x + y + z = 0, третата координата не е необходима. Аксиалните координати са полезни за съхраняване на карти и показване на координати на потребителя. Както при кубичните координати, с тях можете да използвате стандартните операции за сумиране, изваждане, умножение и деление на декартови координати.

Има много кубични координатни системи и много аксиални. В това ръководство няма да разгледам всички комбинации. Ще избера две променливи, q (колона) и r (ред). Във веригите в тази статия q съответства на x и r съответства на z, но това съпоставяне е произволно, защото можете да завъртате и завъртате веригите, за да получите различни съпоставяния.

Предимството на тази система пред решетките с преместване е по-голямата яснота на алгоритмите. Недостатъкът на системата е, че съхраняването на правоъгълна карта е малко странно; вижте раздела за запазване на карти. Някои алгоритми са дори по-ясни в кубични координати, но тъй като имаме условието x + y + z = 0, можем да изчислим третата подразбираща се координата и да я използваме в тези алгоритми. В моите проекти наричам осите q, r, s, така че условието изглежда като q + r + s = 0 и мога да изчисля s = -q - r, когато е необходимо.

брадви

Координатите на изместване са първото нещо, за което повечето хора се сещат, защото те са същите като стандартните декартови координати, използвани за квадратни мрежи. За съжаление една от двете оси трябва да върви срещу зърното и това усложнява нещата като резултат. Кубичните и аксиалните системи правят допълнителни усилия и имат по-прости алгоритми, но съхранението на карти е малко по-сложно. Съществува друга система, наречена "преплетена" или "двойна", но ние няма да я разглеждаме тук; някои смятат, че е по-лесно да се работи, отколкото с кубичен или аксиален.


Изместени координати, кубични и аксиални

осе посоката, в която се увеличава съответната координата. Перпендикулярът на оста е линията, на която координатата остава постоянна. Мрежовите диаграми по-горе показват перпендикулярни линии.

Координатна трансформация

Вероятно ще използвате аксиални или изместени координати във вашия проект, но много алгоритми се изразяват по-лесно в кубични координати. Следователно трябва да можем да преобразуваме координатите между системите.

Аксиалните координати са тясно свързани с кубичните координати, така че преобразуването е просто:

# конвертиране на кубични в аксиални координати q = x r = z # конвертиране на аксиални в кубични координати x = q z = r y = -x-z
В код тези две функции могат да бъдат записани по следния начин:

Функция cube_to_hex(h): # axial var q = h.x var r = h.z return Hex(q, r) функция hex_to_cube(h): # cube var x = h.q var z = h.r var y = -x-z return Cube(x, y) ,z)
Координатите на отместването са доста по-сложни:

Съседни шестоъгълници

Даден е един шестоъгълник, какви шест шестоъгълника са до него? Както може да очаквате, отговорът е най-лесен в кубични координати, сравнително прост в аксиални координати и малко труден в офсетни координати. Може също да се наложи да изчислите шест "диагонални" шестоъгълника.

Кубични координати

Преместването на едно място в шестнадесетични координати променя една от трите кубични координати с +1, а другата с -1 (сумата трябва да остане 0). Три възможни координати могат да се променят с +1, а останалите две могат да се променят с -1. Това ни дава шест възможни промени. Всеки съответства на една от посоките на шестоъгълника. Най-простият и бърз начин е да изчислите предварително промените и да ги поставите в таблицата Cube(dx, dy, dz) с кубични координати по време на компилиране:

Променливи посоки = [ Cube(+1, -1, 0), Cube(+1, 0, -1), Cube(0, +1, -1), Cube(-1, +1, 0), Cube( -1, 0, +1), Cube(0, -1, +1) ] функция cube_direction(посока): упътвания за връщане функция cube_neighbor(hex, посока): връщане cube_add(hex, cube_direction(посока))

Аксиални координати

Както преди, използваме кубичната система за начало. Нека вземем таблицата Cube(dx, dy, dz) и я преобразуваме в таблицата Hex(dq, dr):

Променливи посоки = [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0, +1) ] функция hex_direction(посока): упътвания за връщане функция hex_neighbor(hex, посока): var dir = hex_direction(посока) return Hex(hex.q + dir.q, hex.r + dir.r)

Координати на отместване

В аксиалните координати правим промени в зависимост от това къде се намираме в мрежата. Ако сме в отместена колона/ред, тогава правилото е различно от случая на колона/ред без отместване.

Както преди, създаваме таблица с числа, които да добавим към col и row. Този път обаче ще имаме два масива, един за нечетни колони/редове и един за четни. Погледнете (1,1) в решетъчната карта по-горе и забележете как се променят колоната и редът, докато се движите във всяка от шестте посоки. Сега нека повторим процеса за (2,2) . Таблиците и кодът ще бъдат различни за всеки от четирите типа решетки за изместване, тук е съответният код за всеки тип решетка.

нечетно-r
var directions = [ [ 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) ] ] функция offset_neighbor(hex, direction): var parity = hex.row & 1 var dir = directions return Hex(hex.col + dir.col, hex.row + dir.row)


Дори-р
var directions = [ [ 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)] ] функция offset_neighbor(hex, direction): var parity = hex.row & 1 var dir = directions return Hex(hex.col + dir.col, hex.row + dir.row)


Решетка за четни (EVEN) и нечетни (ODD) редове

нечетно Q
var directions = [ [ 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)]] функция offset_neighbor(hex, direction): var parity = hex.col & 1 var dir = directions return Hex(hex.col + dir.col, hex.row + dir.row)


Четно-q
var directions = [ [ 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)]] функция offset_neighbor(hex, direction): var parity = hex.col & 1 var dir = directions return Hex(hex.col + dir.col, hex.row + dir.row)


Решетка за четни (EVEN) и нечетни (ODD) колони

Диагонали

Преместването в "диагонално" пространство в шестоъгълни координати променя една от трите кубични координати с ±2, а другите две с ∓1 (сумата трябва да остане 0).

Var diagonals = [ Cube(+2, -1, -1), Cube(+1, +1, -2), Cube(-1, +2, -1), Cube(-2, +1, +1) ), Cube(-1, -1, +2), Cube(+1, -2, +1) ] функция cube_diagonal_neighbor(hex, посока): връщане cube_add(hex, диагонали)
Както преди, можем да преобразуваме тези координати в аксиални координати, като изпуснем една от трите координати, или да преобразуваме в отместени координати, като предварително изчислим резултатите.


Разстояния

Кубични координати

В кубичната координатна система всеки шестоъгълник е куб в 3D пространството. Съседните шестоъгълници са на 1 разстояние един от друг в шестоъгълната мрежа, но на 2 един от друг в кубичната мрежа. Това прави изчисляването на разстоянията лесно. В мрежа от квадрати разстоянията на Манхатън са abs(dx) + abs(dy) . В решетка от кубове разстоянията на Манхатън са abs(dx) + abs(dy) + abs(dz) . Разстоянието в мрежата от шестоъгълници е равно на половината от тях:

Функция cube_distance(a, b): връщане (abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)) / 2
Еквивалентът на тази нотация би бил да се каже, че една от трите координати трябва да е сумата от другите две и след това да се получи това като разстояние. Можете да изберете формата за разполовяване или формата за максимална стойност по-долу, но те дават същия резултат:

Функция cube_distance(a, b): връща max(abs(a.x - b.x), abs(a.y - b.y), abs(a.z - b.z))
На фигурата максималните стойности са маркирани в цвят. Забележете също, че всеки цвят представлява една от шестте "диагонални" посоки.

gif


Аксиални координати

В аксиалната система третата координата се изразява имплицитно. Нека преобразуваме от аксиално в кубично, за да изчислим разстоянието:

Функция hex_distance(a, b): var ac = hex_to_cube(a) var bc = hex_to_cube(b) return cube_distance(ac, bc)
Ако компилаторът във вашия случай вгражда (вградени) hex_to_cube и cube_distance, тогава той ще генерира код по следния начин:

Функция hex_distance(a, b): връщане (abs(a.q - b.q) + abs(a.q + a.r - b.q - b.r) + abs(a.r - b.r)) / 2
Има много различни начини за записване на разстоянията между шестоъгълниците в аксиални координати, но независимо от това как пишете разстоянието между шестоъгълниците в аксиалната система се извлича от разстоянието Манхатън в кубичната система. Например, описаната "разлика на разликите" се получава чрез записване на a.q + a.r - b.q - b.r като a.q - b.q + a.r - b.r и използване на формата за максимална стойност вместо формата на разполовяване cube_distance. Всички те са подобни, ако видите връзката с кубични координати.

Координати на отместване

Както при аксиалните координати, преобразуваме координатите на отместването в кубични координати и след това използваме кубичното разстояние.

Функция offset_distance(a, b): var ac = offset_to_cube(a) var bc = offset_to_cube(b) return cube_distance(ac, bc)
Ще използваме един и същ модел за много алгоритми: конвертиране от шестоъгълници в кубове, стартиране на кубичната версия на алгоритъма и преобразуване на кубичните резултати в шестоъгълни координати (аксиални или изместени координати).

Чертеж на линия

Как да нарисувате линия от един шестоъгълник до друг? Използвам линейна интерполация за чертане на линии. Линията се взема равномерно в N+1 точки и се изчислява в кои шестоъгълници се намират тези проби.

gif


  1. Първо изчисляваме N, което ще бъде разстоянието в шестоъгълници между крайните точки.
  2. След това равномерно вземаме N+1 точки между точки A и B. Използвайки линейна интерполация, определяме, че за i стойности от 0 до N, включително тях, всяка точка ще бъде A + (B - A) * 1.0/N * аз На фигурата тези контролни точки са показани в синьо. Резултатът е координати с плаваща запетая.
  3. Преобразувайте всяка контролна точка (float) обратно в шестоъгълници (int). Алгоритъмът се нарича cube_round (вижте по-долу).
Свържете всичко заедно, за да начертаете линия от A до B:

Функция lerp(a, b, t): // за float връща a + (b - a) * t функция cube_lerp(a, b, t): // за шестоъгълници връща Cube(lerp(a.x, b.x, t), lerp(a.y, b.y, t), lerp(a.z, b.z, t)) функция cube_linedraw(a, b): var N = cube_distance(a, b) var results = за всяко 0 ≤ i ≤ N: results.append( cube_round(cube_lerp(a, b, 1.0/N * i))) връща резултати
Бележки:

  • Има моменти, когато cube_lerp връща точка точно на ръба между два шестоъгълника. След това cube_round го премества на едната или другата страна. Линиите изглеждат по-добре, ако са изместени в една посока. Това може да стане чрез добавяне на "епсилон" шестнадесетичен куб (1e-6, 1e-6, -2e-6) към една или и двете крайни точки преди стартиране на цикъла. Това ще "бутне" линията в една посока, така че да не удря границите на ръба.
  • Алгоритъмът на линията DDA в мрежи от квадрати приравнява N на максималното разстояние по всяка от осите. Правим същото в кубично пространство, което е аналогично на разстоянието в мрежа от шестоъгълници.
  • Функцията cube_lerp трябва да върне куб с плаващи координати. Ако програмирате на статично въведен език, няма да можете да използвате типа Cube. Вместо това можете да дефинирате тип FloatCube или да вградите (inline) функцията във вашия код за чертане на линии, ако не искате да дефинирате друг тип.
  • Можете да оптимизирате кода чрез вграждане (inline) cube_lerp и след това изчисляване на B.x-A.x, B.x-A.y и 1.0/N извън цикъла. Умножението може да се преобразува в многократно сумиране. Резултатът е нещо като DDA-line алгоритъм.
  • Използвам аксиални или кубични координати за чертане на линии, но ако искате да работите с отместени координати, разгледайте .
  • Има много опции за рисуване на линии. Понякога се налага "препокриване". Изпратиха ми кода за чертане на линии с покритие в шестоъгълници, но все още не съм го разгледал.

обхват на пътуване

Обхват на координатите

Даден център на шестоъгълник и диапазон N, кои шестоъгълници са в рамките на N стъпки от него?

Можем да работим обратно от шестоъгълната формула за разстояние distance = max(abs(dx), abs(dy), abs(dz)) . За да намерим всички шестоъгълници в рамките на N, имаме нужда от max(abs(dx), abs(dy), abs(dz)) ≤ N. Това означава, че са необходими и трите стойности: abs(dx) ≤ N и abs(dy) ≤ N и abs(dz) ≤ N. Премахването на абсолютната стойност дава -N ≤ dx ≤ N и -N ≤ dy ≤ N и -N ≤ dz ≤ N . В кода това ще бъде вложен цикъл:

Var results = за всяко -N ≤ dx ≤ N: за всяко -N ≤ dy ≤ N: за всяко -N ≤ dz ≤ N: ако dx + dy + dz = 0: results.append(cube_add(center, Cube(dx) , dy, dz)))
Този цикъл ще работи, но ще бъде доста неефективен. От всички стойности на dz, които итерираме в цикъла, само една действително удовлетворява условието за кубове dx + dy + dz = 0 . Вместо това директно ще изчислим стойността на dz, която отговаря на условието:

var results = за всеки -N ≤ dx ≤ N: за всеки max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N): var dz = -dx-dy results.append(cube_add( център, куб (dx, dy, dz)))
Този цикъл преминава само през необходимите координати. На фигурата всеки диапазон е двойка линии. Всеки ред е неравенство. Взимаме всички шестоъгълници, които отговарят на шест неравенства.

gif


Припокриващи се диапазони

Ако трябва да намерите шестоъгълници, които са в множество диапазони, можете да преминете през диапазоните, преди да генерирате списък с шестоъгълници.

Човек може да подходи към този проблем от гледна точка на алгебрата или геометрията. Алгебрично всяка област се изразява като условия на неравенство във формата -N ≤ dx ≤ N и трябва да намерим пресечната точка на тези условия. Геометрично всяка област е куб в 3D пространство и ще пресечем два куба в 3D пространство, за да получим кубоид в 3D пространство. След това го проектираме обратно върху равнината x + y + z = 0, за да получим шестоъгълниците. Ще реша тази задача алгебрично.

Първо, пренаписваме условието -N ≤ dx ≤ N в по-общата форма x min ≤ x ≤ x max и приемаме x min = center.x - N и x max = center.x + N. Нека направим същото за y и z, което води до общ изглед на кода от предишния раздел:

Var results = за всеки xmin ≤ x ≤ xmax: за всеки max(ymin, -x-zmax) ≤ y ≤ min(ymax, -x-zmin): var z = -x-y results.append(Cube(x, y, з))
Пресечната точка на два диапазона a ≤ x ≤ b и c ≤ x ≤ d е max(a, c) ≤ x ≤ min(b, d) . Тъй като площта на шестоъгълниците се изразява като диапазони над x, y, z, можем да пресечем поотделно всеки от диапазоните x, y, z и след това да използваме вложен цикъл, за да генерираме списък с шестоъгълници в пресечната точка. За една област от шестоъгълници вземаме x min = H.x - N и x max = H.x + N, подобно за y и z. За пресечната точка на две шестоъгълни области, приемаме x min = max(H1.x - N, H2.x - N) и x max = min(H1.x + N, H2.x + N), подобно за y и z Същият модел работи за пресичането на три или повече региона.

gif


Препятствия

При наличие на препятствия най-лесно се запълва с ограничение на разстоянието (търсене в ширина). На фигурата по-долу се ограничаваме до четири хода. В кода fringes[k] е масив от всички шестоъгълници, които могат да бъдат достигнати в k стъпки. При всяко преминаване през основния цикъл ние разширяваме ниво k-1 с ниво k.

Функция cube_reachable(начало, движение): var visited = set() добавете начало към посетените var fringes = fringes.append() за всеки 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

завои

За даден шестоъгълен вектор (разликата между два шестоъгълника) може да се наложи да го завъртим, за да сочи към друг шестоъгълник. Това е лесно да се направи с кубични координати, ако се придържате към 1/6-та ротация.

Завъртането на 60° надясно измества всяка координата с една позиция надясно:

[x, y, z] до [-z, -x, -y]
Завъртането на 60° наляво измества всяка координата с една позиция наляво:

[x, y, z] до [-y, -z, -x]



„Играйки“ [в оригиналната статия] с диаграмата, можете да видите, че всеки завой с 60 ° променизнаци и физически "завъртане" на координатите. След завъртане на 120° знаците отново са същите. Завъртането на 180° обръща знаците, но координатите се завъртат в първоначалната си позиция.

Ето пълната последователност от въртене на позиция P около централна позиция C, което води до нова позиция R:

  1. Преобразувайте P и C позиции в кубични координати.
  2. Изчисляване на вектор чрез изваждане на центъра: P_from_C = P - C = Cube(P.x - C.x, P.y - C.y, P.z - C.z) .
  3. Завъртане на вектора P_from_C, както е описано по-горе, и присвояване на резултантния вектор обозначението R_from_C.
  4. Преобразуване на вектор обратно в позиция чрез добавяне на център: 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. Преобразуване на кубичната позиция R обратно в желаната координатна система.
Има няколко етапа на трансформации, но всеки от тях е доста прост. Възможно е да съкратите някои от тези стъпки, като дефинирате въртенето директно в аксиални координати, но шестоъгълните вектори не работят с отместени координати и не знам как да съкратя стъпките за отместени координати. Вижте също дискусията за други начини за изчисляване на ротация в stackexchange.

Пръстени

прост пръстен

За да разберете дали даден шестоъгълник принадлежи на пръстен с даден радиус радиус, трябва да изчислите разстоянието от този шестоъгълник до центъра и да разберете дали е равно на радиус. За да получите списък с всички такива шестоъгълници, трябва да направите радиусни стъпки от центъра и след това да следвате завъртените вектори по пътя по протежение на пръстена.

Функция cube_ring(center, radius): var results = # този код не работи за radius == 0; разбираш ли защо var cube = cube_add(center, cube_scale(cube_direction(4), radius)) за всяко 0 ≤ i< 6: for each 0 ≤ j < radius: results.append(cube) cube = cube_neighbor(cube, i) return results
В този код кубът започва от пръстена, показан като голяма стрелка от центъра към ъгъла на диаграмата. Избрах ъгъл 4 за начало, защото той съответства на пътя, по който пътуват моите номера на посоката. Може да се нуждаете от различен начален ъгъл. На всеки етап от вътрешния цикъл кубът се движи с един шестоъгълник около пръстена. След 6 * радиус стъпки, той завършва там, където е започнал.


спираловидни пръстени

Разхождайки се през пръстените в спираловиден модел, можем да запълним вътрешността на пръстените:

Функция cube_spiral(център, радиус): променливи резултати = за всяко 1 ≤ k ≤ радиус: резултати = резултати + куб_пръстен(център, k) връща резултати



Площта на големия шестоъгълник е равна на сумата от всички кръгове плюс 1 за центъра. Използвайте тази формула, за да изчислите площта.

Преминаването на шестоъгълници по този начин може да се използва и за изчисляване на обхвата на движение (вижте по-горе).

Зона на видимост

Какво се вижда от дадена позиция на дадено разстояние и не е блокирано от препятствия? Най-лесният начин да определите това е да начертаете линия до всеки шестоъгълник в дадения диапазон. Ако линията не среща стени, тогава ще видите шестоъгълник. Преместете мишката върху шестоъгълниците [на диаграмата в оригиналната статия], за да видите линиите, начертани към тези шестоъгълници, и стените, които линиите срещат.

Този алгоритъм може да бъде бавен върху големи площи, но е лесен за прилагане, така че препоръчвам да започнете с него.

gif



Има много различни определения за видимост. Искате ли да видите центъра на друг шестоъгълник от центъра на първоначалния? Искате ли да видите някаква част от друг шестоъгълник от центъра на първоначалния? Може би някоя част от друг шестоъгълник от която и да е начална точка? Препятствията по-малки ли са от пълен шестоъгълник? Обхватът е по-сложна и по-разнообразна концепция, отколкото изглежда на пръв поглед. Нека започнем с най-простия алгоритъм, но очаквайте той да изчисли правилно отговора във вашия проект. Има дори случаи, когато прост алгоритъм дава нелогични резултати.

Искам да разширя това ръководство допълнително. аз имам



Случайни статии

нагоре