Biz olti burchakli prizmani turli pozitsiyalarda qanday tasvirlashni o'rganamiz.

Oddiy olti burchakli qurishning turli usullarini o'rganing, olti burchakli chizmalar chizing va ularning to'g'riligini tekshiring. Olti burchakli olti burchakli prizma chizish.

Anjirdagi olti burchakli prizmani ko'rib chiqing. 3.52 va uning ortogonal proektsiyalari shakl. 3.53. Olti burchakli prizma (olti burchakli) tagida muntazam olti burchakli yotadi, yon yuzlari bir xil to'rtburchaklar. Olti burchakni nuqtai nazardan to'g'ri tasvirlash uchun, avvalo, uning asosini nuqtai nazardan to'g'ri tasvirlashni o'rganishingiz kerak (3.54 -rasm). Shaklda olti burchakda. 3,55 ta cho'qqilar birdan oltigacha raqamlar bilan belgilanadi. Agar siz 1 va 3, 4 va 6 -bandlarni vertikal chiziqlar bilan bog'lasangiz, bu chiziqlar aylana markazining nuqtasi bilan birgalikda diametri 5 - 2 ni to'rtta teng segmentga bo'lishini ko'rasiz (bu segmentlar yoylar bilan ko'rsatilgan) ). Olti burchakning qarama -qarshi tomonlari bir -biriga parallel va uning markazidan o'tuvchi va ikkita tepalikni bog'laydigan chiziq (masalan, 6 - 1 va 4 - 3 qirralari 5 - 2 chiziqqa parallel). Bu kuzatishlar olti burchakni istiqbolli qurishga yordam beradi, shuningdek, bu konstruktsiyaning to'g'riligini tekshiradi. Oddiy olti burchakni tasvirdan yasashning ikkita usuli bor: aylana va kvadrat asosida.

Cheklangan doiraga asoslangan. Fig. 3.56. Muntazam olti burchakning barcha tepalari aylana doirasiga tegishli, uning radiusi olti burchakli tomonga teng.


Gorizontal olti burchakli. Gorizontal, erkin ellipsni, ya'ni cheklangan doirani perspektiv chizish. Endi siz olti burchakning tepalari bo'lgan oltita nuqtani topishingiz kerak. Berilgan aylananing istalgan diametrini uning markazi orqali chizing (3.57 -rasm). Diametrining o'ta nuqtalari - 5 va 2, ellips ustida yotib, olti burchakli tepaliklardir. Qolgan tepaliklarni topish uchun siz bu diametrni to'rtta teng segmentga bo'lishingiz kerak. Diametr allaqachon aylananing markaziy nuqtasi bilan ikkita radiusga bo'linadi, har bir radiusni yarmiga bo'lish qoladi. Perspektivli rasmda hamma to'rt segment ham tomoshabin masofasidan teng ravishda kamayadi (3.58 -rasm). Endi radiusning o'rta nuqtalarini - A va B nuqtalarini - 5 - to'g'ri chiziqqa perpendikulyar to'g'ri chiziqlarni o'tkazing - 5 va 2 -nuqtalarda ellipsga teginish yordamida ularning yo'nalishini topishingiz mumkin (3.59 -rasm). Bu teginishlar diametri 5 - 2 ga perpendikulyar bo'ladi va A va B nuqtalari orqali chizilgan chiziqlar ham 5 - 2 chiziqqa perpendikulyar bo'ladi. 1, 3, 4, 6 (3.60 -rasmga qarang) Barcha oltita tepalikni to'g'ri chiziqlar bilan bog'lang (3.61 -rasm).

Qurilishning to'g'riligini turli yo'llar bilan tekshiring. Agar konstruktsiya to'g'ri bo'lsa, u holda olti burchakning qarama -qarshi cho'qqilarini bog'laydigan chiziqlar aylananing markazida kesishadi (3.62 -rasm), olti burchakning qarama -qarshi tomonlari mos keladigan diametrlarga parallel (3.63 -rasm). Tekshirishning yana bir usuli rasmda ko'rsatilgan. 3.64.

Vertikal olti burchakli. Bunday olti burchakda, 7 va 3, b va 4 -nuqtalarni, shuningdek, 5 va 2 -nuqtalarda chizilgan aylanaga teguvchi chiziqlarni bog'laydigan to'g'ri chiziqlar vertikal yo'nalishga ega va uni istiqbolli rasmda saqlab turadi. Shunday qilib, ellipsga ikkita vertikal teginish chizib, biz 5 va 2 nuqtalarni (teginish nuqtalari) topamiz. Ularni to'g'ri chiziq bilan ulang, so'ngra hosil bo'ladigan diametri 5 - 2 ni 4 ta teng segmentga bo'linib, ularning istiqbolli kesimlarini hisobga oling (3.65 -rasm). A va B nuqtalar orqali vertikal chiziqlar o'tkazing va ularning ellips bilan kesishgan joylarida 1,3,6L4 nuqtalarni toping. Keyin 1 - 6 nuqtalarni ketma -ket to'g'ri chiziqlar bilan ulang (3.66 -rasm). Olti burchakli konstruktsiyaning to'g'riligini oldingi misolda bo'lgani kabi tekshiring.

Olti burchakli konstruktsiyaning tasvirlangan usuli bu raqamni aylanaga asoslanib olish imkonini beradi, uni berilgan nisbatlar kvadratidan ko'ra, perspektiv chizish osonroq. Shunday qilib, olti burchakli qurilishning bu usuli eng aniq va ko'p qirrali ko'rinadi. Kvadratga asoslangan qurilish usuli, agar rasmda kub mavjud bo'lsa, boshqacha qilib aytganda, kvadratning nisbati va tomonlarining yo'nalishi aniqlansa, olti burchakli tasvirni tasvirlashni osonlashtiradi.

Kvadrat asosida. Fig. 3.67. 5 - 2 gorizontal yo'nalishda kvadratga yozilgan olti burchak kvadrat tomoniga teng, vertikal yo'nalishda esa uning uzunligidan kichik.

Vertikal olti burchakli. Perspektivda vertikal kvadratni chizish. Diagonallarning gorizontal qirralariga parallel kesishishi orqali to'g'ri chiziq o'tkazing. Olingan 5 - 2 segmentni to'rtta teng qismga bo'linib, A va B nuqtalar orqali vertikal chiziqlar o'tkazing (3.68 -rasm). Olti burchakning yuqori va pastki chiziqlari maydonning yon tomonlariga to'g'ri kelmaydi. Ularni kvadratning gorizontal tomonlaridan bir oz masofada (1114 a) va ularga parallel ravishda chizing. Shu tarzda topilgan 1 va 3 -chi nuqtalarni 2 -nuqta bilan, 6 va 4 -chi nuqtalarni 5 -nuqta bilan bog'lab olti burchak olamiz (3.69 -rasm).

Gorizontal olti burchak bir xil ketma -ketlikda qurilgan (3.70 va 3.71 -rasm).

Ushbu qurilish usuli faqat etarli ochilishga ega olti burchakli burchaklarga mos keladi. Agar olti burchakning ochilishi ahamiyatsiz bo'lsa, sunnat usulidan foydalanish yaxshidir. Kvadrat orqali qurilgan olti burchakni sinash uchun siz allaqachon bilgan usullardan foydalanishingiz mumkin.

Bundan tashqari, yana bir narsa bor - natijada olti burchakli aylanani tasvirlash (rasmingizda - ellips). Olti burchakning barcha tepalari shu ellipsga tegishli bo'lishi kerak.

Olti burchakli chizish ko'nikmalarini o'zlashtirganingizdan so'ng, siz olti burchakli prizma chizishga erkin o'tasiz. Rasmdagi diagramaga diqqat bilan qarang. 3.72, shuningdek, olti burchakli prizmalar chizilgan doiraga (3.73 -rasm; 3.74 va 3.75 -rasmlar) va kvadrat asosida (3.76 -rasm; 3.77 va 3.78 -rasmlar) qurish sxemalari. Vertikal va gorizontal olti burchaklarni turli usullar bilan chizish. Vertikal olti burchakli rasmda, yon yuzlarning uzun qirralari bir -biriga parallel vertikal to'g'ri chiziqlar bo'ladi va ufq chizig'idan qanchalik uzoq bo'lsa, taglik olti burchak ochiladi. Gorizontal olti burchak chizilganida, yon tomonlarning uzun qirralari ufqning yo'qolib boradigan nuqtasida birlashadi va asosiy olti burchakli ochilishi tomoshabindan qanchalik uzoq bo'lsa. Olti burchakni tasvirlashda, shuningdek, ikkala asosning parallel yuzlari bir -biriga yaqinlashganiga ishonch hosil qiling (3.79 -rasm; 3.80).

Doira ichiga yozilgan muntazam olti burchak hosil qiladi. Berilgan tomoni bo'ylab muntazam beshburchak quradi. Kompas ignasini aylana bilan chizilgan yoy kesishmasiga o'tkazing. Ushbu qurilish kvadrat va kompas yordamida amalga oshirilishi mumkin. Oddiy olti burchakli temir yo'l va 30X60 ° kvadrat yordamida qurilishi mumkin. Oddiy olti burchakli burchaklarning tepa nuqtalarini chizish.


Doira ichiga yozilgan teng qirrali uchburchakning qurilishi. Bunday uchburchakning uchlari kompas va 30 va 60 ° burchakli kvadrat yoki bitta kompas yordamida qurilishi mumkin. 2-3 tomonni qurish uchun, yugurish yo'lini kesilgan chiziqlar bilan ko'rsatilgan joyga qo'ying va uchburchakning uchinchi tepasini belgilaydigan 2-nuqtadan to'g'ri chiziq o'tkazing.

3 -usul 1: kompas yordamida mukammal olti burchakni chizish

Biz aylanada 1 -bandni belgilaymiz va uni beshburchakning tepaliklaridan biri sifatida qabul qilamiz. D diametrli aylana berilsin; unga muntazam heptagonni yozish kerak (65 -rasm). Biz aylananing vertikal diametrini ettita teng qismga ajratamiz. 7 -nuqtadan boshlab, radiusi D aylananing diametriga teng, biz gorizontal diametrning F nuqtasida davom etishi bilan kesishuvgacha bo'lgan yoyni tasvirlaymiz. F nuqtasi ko'pburchak qutb deb ataladi.

Muntazam ko'pburchaklarni qurish texnikasi burchaklarning bissektrisalari va segmentlarning median perpendikulyarlarini qurish qobiliyatiga asoslangan.

Jadvalning birinchi ustunida oddiy yozilgan ko'pburchakning tomonlari, ikkinchisida koeffitsientlar ko'rsatilgan. Berilgan ko'pburchak tomonining uzunligi berilgan aylananing radiusini shu ko'pburchakning tomonlari soniga mos keladigan koeffitsientga ko'paytirish yo'li bilan olinadi.

Ushbu videodarsning mavzusi "Doimiy ko'pburchaklarni qurish". Biz yana bir bor oddiy ko'pburchakni aniqlaymiz, uni grafik tasvirlaymiz, so'ngra yana shunday chizilgan va chizilgan doiralarning markazlari bir -biriga to'g'ri kelishiga ishonch hosil qilamiz. Siz har doim bu ko'pburchakka aylana yozishingiz mumkin va siz uning atrofidagi doirani tasvirlab bera olasiz. Oldingi darslar davomida biz uning burchaklarining bissektrisalari va yonlariga median perpendikulyarlari ko'pburchaklarning xususiyatlarini tasvirlashda asosiy rol o'ynashini aniqladik.

4. Kerakli muntazam ABC uchburchagi olindi. Muammo hal qilindi. 3. Kompasning bir oyog'ini aylananing ixtiyoriy A1 nuqtasiga qo'yib, ikkinchi oyog'idan foydalanib, xuddi shu doiradagi A2 nuqtasini belgilang va uni A1 nuqtasiga ulang. Biz olti burchakning birinchi tomonini olamiz. 3. O nuqtadan tushgan ko'pburchak tomonlariga o'rta perpendikulyarlardan foydalanib, biz uning barcha qirralarini va qo'shni tepaliklari orasiga o'ralgan aylananing barcha yoylarini ikkiga bo'lamiz.

Geometrik qurilish mashg'ulotning muhim qismlaridan biridir. Igna chizilgan chiziqni teshishi kerak. Kompas qanchalik aniq o'rnatilgan bo'lsa, qurilish shunchalik aniq bo'ladi. Doira bilan kesishgan boshqa yoyni chizib oling. Kamonlarning kesishgan barcha olti nuqtasini ketma -ket dastlab chizilgan aylana bilan bog'lang. Bunday holda, olti burchak noto'g'ri bo'lib chiqishi mumkin.

IV, V va VI nuqtalardan / - // - /// tepaliklarini olish uchun gorizontal chiziqlarni aylana bilan kesishgan joyga torting.

Biz topilgan tepaliklarni ketma -ket bir -biriga bog'laymiz. Oltburchakni F qutbidan nurlar chizish va vertikal diametrning toq bo'linmalari orqali qurish mumkin. Ikkala aylananing markazlari bir -biriga to'g'ri keladi (1 -rasmda O nuqta). Rasmda shuningdek chizilgan (R) va yozilgan (r) doiralarning radiusi ko'rsatilgan.

Olti burchakli konstruktsiyaning asosi uning tomoni chegaralangan doiraning radiusiga teng. Bu darsda biz kompas va o'lchagich yordamida oddiy ko'pburchaklarni qurish usullarini ko'rib chiqamiz. Ikkinchi usul, agar siz doira ichiga yozilgan muntazam olti burchakni qurib, so'ngra uning uchlarini bir -biriga bog'lab qo'ysangiz, siz teng qirrali uchburchakka ega bo'lasiz. Ushbu usul har qanday sonli oddiy ko'pburchaklarni qurish uchun javob beradi.

Olti burchakli panjara (olti burchakli panjara) ba'zi o'yinlarda ishlatiladi, lekin ular to'rtburchaklar panjara kabi oddiy va keng tarqalgan emas. Men qariyb 20 yildan buyon olti burchakli resurslarni yig'aman va men ushbu qo'llanmani eng sodda koddagi eng oqlangan yondashuvlar uchun yozganman. Ushbu maqolada ko'pincha Charlz Fu va Klark Verbrugge darsliklari ishlatiladi. Men olti burchakli tarmoqlarni yaratishning turli usullarini, ular qanday bog'liqligini va eng keng tarqalgan algoritmlarni tasvirlab beraman. Ushbu maqolaning ko'p qismlari interaktivdir: panjara turini tanlash tegishli sxemalar, kodlar va matnlarni o'zgartiradi. (Taxminan. Leyn: bu faqat asl nusxaga tegishli, men sizga uni o'rganishni maslahat beraman. Tarjimada asl nusxadagi barcha ma'lumotlar saqlanadi, lekin interaktiv holda.).

Ushbu maqoladagi kod misollari pseudocode -da yozilgan, shuning uchun o'z dasturingizni yozish uchun o'qish va tushunish osonroq.

Geometriya

Olti burchakli olti burchakli ko'pburchaklar. Oddiy olti burchakli tomonlar (yuzlar) bir xil uzunlikka ega. Biz faqat olti burchakli burchak bilan ishlaymiz. Odatda, olti burchakli tarmoqlar gorizontal (tepa uchi) va vertikal (tekis tepa) yo'nalishlardan foydalanadi.


Yassi (chap) va uchli (o'ng) yuqori olti burchakli

Olti burchakli 6 yuzli. Har bir yuz ikki olti burchakli uchun umumiydir. Olti burchakli burchakning 6 nuqtasi bor. Har bir burchak nuqtasi uchta olti burchak bilan taqsimlanadi. Tarmoqli qismlar (kvadratlar, olti burchakli va uchburchaklar) haqidagi maqolamda siz markazlar, qirralar va burchak nuqtalari haqida ko'proq o'qishingiz mumkin.

Burchaklar

Oddiy olti burchakda ichki burchaklar 120 °. Oltita "takoz" mavjud, ularning har biri 60 ° ichki burchakli teng qirrali uchburchakdir. Burchak nuqtasi i(60 ° * i) + 30 ° masofada, o'lchov birliklari markazdan. Kodda:

Hex_corner funktsiyasi (markaz, o'lcham, i): var burchak_deg = 60 * i + 30 var burchak_rad = PI / 180 * burchak_deg qaytish nuqtasi (markaz.x + kattalik * cos (burchak_rad), markaz.y + kattalik * sin (burchak_rad) )
Olti burchakni to'ldirish uchun ko'pburchakning tepalarini hex_corner (..., 0) dan hex_corner (..., 5) gacha olish kerak. Olti burchakning konturini chizish uchun bu tepaliklardan foydalaning va keyin yana hex_corner (..., 0) chizig'ini chizing.

Ikki yo'nalishning farqi shundaki, x va y joylarni o'zgartiradi, bu esa burchaklarning o'zgarishiga olib keladi: yassi olti burchakli burchaklari 0 °, 60 °, 120 °, 180 °, 240 °, 300 ° va uchi olti burchakli-30 °, 90 °, 150 °, 210 °, 270 °, 330 °.


Yassi va o'tkir yuqori olti burchakli burchaklar

Hajmi va joylashuvi

Endi biz bir nechta olti burchakli burchaklarni joylashtirmoqchimiz. Gorizontal yo'nalishda olti burchakning balandligi balandlik = o'lcham * 2. Qo'shni olti burchakli vertikal masofa vert = balandlik * 3/4.

Olti burchak kengligi kenglik = sqrt (3) / 2 * balandlik. Qo'shni olti burchakli gorizontal masofa ufq = kenglik.

Ba'zi o'yinlar olti burchakli pikselli san'atdan foydalanadi, bu oddiy oltita burchakka to'g'ri kelmaydi. Ushbu bo'limda tasvirlangan burchak va joylashuv formulalari bu olti burchakli o'lchamlarga mos kelmaydi. Olti burchakli algoritmlarni tavsiflovchi maqolaning qolgan qismi, olti burchakli biroz cho'zilgan yoki siqilgan bo'lsa ham amal qiladi.



Koordinatali tizimlar

Olti burchakli tarmoqqa yig'ishni boshlaylik. Kvadratchalar katakchalari bo'lsa, yig'ishning faqat bitta aniq usuli bor. Olti burchak uchun ko'p yondashuvlar mavjud. Men asosiy tasvir sifatida kub koordinatalarini ishlatishni tavsiya qilaman. Eksa koordinatalari yoki ofset koordinatalari xaritalarni saqlash va foydalanuvchi koordinatalarini ko'rsatish uchun ishlatilishi kerak.

Ofset koordinatalari

Eng keng tarqalgan yondashuv - har bir keyingi ustun yoki satrni almashtirish. Ustunlar col yoki q bilan belgilanadi. Qatorlar qator yoki r bilan belgilanadi. G'alati yoki hatto ustunlar / satrlarni almashtirish mumkin, shuning uchun gorizontal va vertikal olti burchakli ikkita variant mavjud.


Odd-r gorizontal tartibi


Even-r gorizontal tartib


Odd-q vertikal tartib


Hatto-q vertikal tartib

Kubik koordinatalari

Olti burchakli katakchalarga qarashning yana bir usuli - ularni ko'rish uch asosiy o'qlar, emas ikkita kvadratchalar katakchalarida bo'lgani kabi. Ular oqlangan simmetriyani ko'rsatadi.

Kublar panjarasini oling va kesib tashlash diagonal tekislik x + y + z = 0. Bu g'alati fikr, lekin bu bizga olti burchakli algoritmlarni soddalashtirishga yordam beradi. Xususan, biz dekart koordinatalaridan standart operatsiyalarni qo'llashimiz mumkin bo'ladi: koordinatalarni qo'shish va ayirish, skalyarga ko'paytirish va bo'linish va masofalar.

Kublar panjarasidagi uchta asosiy o'qga va ularning oltitaga bo'lgan munosabatlariga e'tibor bering. diagonal olti burchakli panjara yo'nalishlari. Tarmoqning diagonal o'qlari olti burchakli tarmoqning asosiy yo'nalishiga to'g'ri keladi.


Olti burchakli


Kuba

Bizda allaqachon kvadrat va kublar uchun algoritmlar mavjud bo'lgani uchun, kub koordinatalar yordamida bu algoritmlarni olti burchakli tarmoqlarga moslashtirishga imkon beradi. Men ushbu tizimni maqoladagi algoritmlarning ko'pchiligi uchun ishlataman. Boshqa koordinata tizimiga ega algoritmlardan foydalanish uchun men kub koordinatalarini o'zgartiraman, algoritmni ishga tushiraman va keyin ularni qayta o'zgartiraman.

Olti burchakli panjara uchun kubik koordinatalar qanday ishlashini o'rganing. Olti burchakni tanlaganingizda, uchta o'qga mos keladigan kubik koordinatalari ajratiladi.

  1. Kublar panjarasining har bir yo'nalishi mos keladi chiziqlar olti burchakli panjara ustida. Ulanishni ko'rish uchun z, 0, 1, 2, 3 ga teng olti burchakni tanlashga harakat qiling. Chiziq ko'k rang bilan belgilanadi. X (yashil) va y (binafsha) uchun ham xuddi shunday harakat qilib ko'ring.
  2. Har bir olti burchakli tarmoq yo'nalishi ikkita kubikli yo'nalishlarning kombinatsiyasidan iborat. Masalan, olti burchakli tarmoqning shimoli + y va -z oralig'ida, shuning uchun har bir qadam shimolga y ni 1 ga oshiradi va z ni 1 ga kamaytiradi.
Kubik koordinatalar olti burchakli koordinatalar tizimi uchun oqilona tanlovdir. Shart x + y + z = 0, shuning uchun uni algoritmlarda saqlash kerak. Shart, shuningdek, har bir olti burchak uchun har doim kanonik koordinata bo'lishini ta'minlaydi.

Kublar va olti burchakli koordinatali tizimlar juda ko'p. Ulardan ba'zilarida shart x + y + z = 0 dan farq qiladi. Men ko'plab tizimlardan faqat bittasini ko'rsatdim. Siz x-y, y-z, z-x bilan kubik koordinatalarni yaratishingiz mumkin, ular o'ziga xos qiziqarli xususiyatlarga ega bo'ladi, lekin men ularni bu erda qoplamayman.

Lekin siz koordinatalar uchun 3 ta raqamni saqlamoqchi emassiz deb bahslashishingiz mumkin, chunki siz xaritani shunday saqlashni bilmayapsiz.

Eksenel koordinatalar

Eksenel koordinatalar tizimi, ba'zan "trapezoidal" koordinatalar tizimi deb ataladi, kub koordinatalar tizimidan ikki yoki uchta koordinatadan tuzilgan. Bizda x + y + z = 0 shart bo'lgani uchun uchinchi koordinata kerak emas. Eksa koordinatalari xaritalarni saqlash va koordinatalarni foydalanuvchiga ko'rsatish uchun foydalidir. Kub koordinatalarida bo'lgani kabi, siz ular bilan standart karteziy qo'shish, ayirish, ko'paytirish va bo'linish amallaridan foydalanishingiz mumkin.

Ko'p kubik koordinata tizimlari va ko'plab eksenel tizimlar mavjud. Men bu darslikda barcha kombinatsiyalarni qamrab olmayman. Men ikkita o'zgaruvchini tanlayman: q (ustun) va r (qator). Ushbu maqolaning diagrammalarida q x ga, r esa z ga to'g'ri keladi, lekin bu yozishmalar o'zboshimchalik bilan amalga oshiriladi, chunki siz turli xil yozishmalarni olish orqali diagrammalarni aylantirishingiz va aylantirishingiz mumkin.

Ushbu tizimning joy almashish panjaralaridan afzalligi shundaki, algoritmlar tushunarli. Tizimning kamchiliklari shundaki, to'rtburchaklar xaritani saqlash biroz g'alati; xaritalarni saqlash bo'limiga qarang. Ba'zi algoritmlar kubik koordinatalarda ham aniqroq, lekin bizda x + y + z = 0 sharti bo'lgani uchun, biz uchinchi nazariy koordinatani hisoblab, uni bu algoritmlarda ishlata olamiz. Loyihalarimda o'qlarni q, r, s deb atayman, shuning uchun shart q + r + s = 0 ga o'xshaydi va kerak bo'lganda s = -q - r ni hisoblay olaman.

Akslar

Ofset koordinatalari ko'pchilik o'ylaydigan birinchi narsa, chunki ular kvadrat kataklarda ishlatiladigan standart kartezian koordinatalari bilan bir xil. Afsuski, ikkita o'qdan biri donga qarshi chiqishi kerak va bu natijada narsalarni murakkablashtiradi. Kubik va eksenel tizimlar don bo'ylab ketadi va ular oddiy algoritmlarga ega, lekin xaritalarni saqlash biroz murakkabroq. "O'zgaruvchan" yoki "ikkilamchi" deb nomlangan boshqa tizim mavjud, lekin biz bu erda ko'rib chiqmaymiz; ba'zilariga kub yoki eksenel bilan ishlash osonroq.


Ofset koordinatalari, kubik va eksenel

Eksa tegishli koordinata kattalashtiriladigan yo'nalish. O'qqa perpendikulyar - bu koordinata o'zgarmaydigan chiziq. Yuqoridagi panjara diagrammalarida perpendikulyar chiziqlar ko'rsatilgan.

Koordinatali transformatsiya

Ehtimol siz o'zingizning loyihangizda eksenel koordinatalarni yoki ofsetli koordinatalarni ishlatasiz, lekin ko'p algoritmlarni kub koordinatalarida ifodalash osonroq. Shuning uchun biz tizimlar orasidagi koordinatalarni o'zgartira olamiz.

Eksenel koordinatalar kubik koordinatalari bilan chambarchas bog'liq, shuning uchun o'zgartirish oddiy:

# kubni eksenel koordinatalarga aylantirish q = x r = z # eksenelni kub koordinatalariga aylantirish x = q z = r y = -x -z
Kodda bu ikki funktsiyani quyidagicha yozish mumkin:

Cube_to_hex (h) funktsiyasi: # eksenel var q = hx var r = hz qaytarish Hex (q, r) funktsiyasi hex_to_cube (h): # kub var x = hq var z = hr var y = -xz qaytarish Cube (x, y , z)
Ofset koordinatalari biroz murakkab:

Qo'shni olti burchakli

Bir olti burchakni hisobga olsak, u qaysi olti burchakli bilan yonma -yon joylashgan? Siz kutganingizdek, javob kub koordinatalarida eng oson, eksenel koordinatalarda juda oddiy va ofset koordinatalarida biroz murakkabroq. Bundan tashqari, oltita "diagonal" olti burchakni hisoblash kerak bo'lishi mumkin.

Kubik koordinatalari

Olti burchakli koordinatalarda bitta bo'shliqni ko'chirish uchta kub koordinatadan birini +1 ga, ikkinchisini -1 ga o'zgartiradi (yig'indisi 0 ga teng bo'lishi kerak). Mumkin bo'lgan uchta koordinata +1 ga, qolgan ikkitasi -1 ga o'zgarishi mumkin. Bu bizga oltita mumkin bo'lgan o'zgarishlarni beradi. Ularning har biri olti burchakli yo'nalishlardan biriga mos keladi. Eng oddiy va tezkor usul-o'zgarishlarni oldindan hisoblash va ularni kompilyatsiya vaqtida Cube (dx, dy, dz) jadvaliga joylashtirish:

Turli yo'nalishlar = [Cube (+1, -1, 0), Cube (+1, 0, -1), Cube (0, +1, -1), Cube (-1, +1, 0), Cube ( -1, 0, +1), Cube (0, -1, +1)] funktsiyasi cube_direction (yo'nalish): yo'nalishlarni qaytarish cube_neighbor (olti burchak, yo'nalish): cube_add (o'n oltilik, cube_direction (yo'nalish))

Eksenel koordinatalar

Avvalgidek, biz kub tizimidan boshlaymiz. Cube jadvalini oling (dx, dy, dz) va uni Hex jadvaliga aylantiring (dq, dr):

Turli yo'nalishlar = [Hex (+1, 0), Hex (+1, -1), Hex (0, -1), Hex (-1, 0), Hex (-1, +1), Hex (0, +1)] funktsiyasi hex_direction (yo'nalish): yo'nalishlarni qaytarish funktsiyasi hex_nighbor (olti burchak, yo'nalish): var dir = hex_direction (yo'nalish) return Hex (hex.q + dir.q, hex.r + dir.r)

Ofset koordinatalari

Eksenel koordinatalarda biz tarmoqdagi qaerda ekanligimizga qarab o'zgartirishlar kiritamiz. Agar biz ustun / satr ofsetida bo'lsak, qoida ofset bo'lmagan ustun / satr holatidan farq qiladi.

Oldingidek, biz qator va qatorga qo'shish uchun raqamlar jadvalini tuzamiz. Biroq, bu safar biz ikkita qatorga ega bo'lamiz: biri toq ustunlar / satrlar uchun, ikkinchisi juftlar uchun. Yuqoridagi jadval xaritasidagi (1,1) ga qarang va oltita yo'nalishda harakatlanayotganda satr va satr qanday o'zgarganiga e'tibor bering. Endi biz jarayonni (2,2) uchun takrorlaymiz. Jadvallar va kodlar to'rt turdagi joy almashish panjaralari uchun har xil bo'ladi, bu erda har bir tarmoq turi uchun mos keladigan kod mavjud.

Odd-r
var yo'nalishlari = [[oltilik (+1, 0), o'n oltilik (0, -1), o'n oltilik (-1, -1), oltilik (-1, 0), o'n oltilik (-1, +1), o'n oltilik (0) , +1)], [oltilik (+1, 0), oltilik (+1, -1), oltilik (0, -1), oltilik (-1, 0), oltilik (0, +1), oltilik ( +1, +1)]] funktsiyasi ofset_nighbor (olti burchakli, yo'nalish): var parity = hex.row & 1 var dir = yo'nalishlarni qaytarish Hex (hex.col + dir.col, hex.row + dir.row)


Hatto-r
var yo'nalishlari = [[oltilik (+1, 0), o'n oltilik (+1, -1), oltilik (0, -1), oltilik (-1, 0), o'n oltilik (0, +1), o'n oltilik (+1) , +1)], [olti burchakli (+1, 0), olti burchakli (0, -1), oltilik (-1, -1), oltilik (-1, 0), oltilik (-1, +1), oltilik (0, +1)]] funktsiyasi ofset_neighbor (olti burchak, yo'nalish): var parity = hex.row & 1 var dir = yo'nalishlar Hex (hex.col + dir.col, hex.row + dir.row)


Hatto (EVEN) va toq (ODD) qatorlar uchun panjara

Odd-q
var yo'nalishlari = [[olti burchakli (+1, 0), o'n oltilik (+1, -1), oltilik (0, -1), oltilik (-1, -1), o'n oltilik (-1, 0), o'n oltilik (0) , +1)], [oltilik (+1, +1), oltilik (+1, 0), oltilik (0, -1), oltilik (-1, 0), oltilik (-1, +1), oltilik (0, +1)]] funktsiyasi ofset_neighbor (olti burchak, yo'nalish): var parity = hex.col & 1 var dir = yo'nalishlar Hex (hex.col + dir.col, hex.row + dir.row)


Hatto-q
var yo'nalishlari = [[oltilik (+1, +1), o'n oltilik (+1, 0), oltilik (0, -1), oltilik (-1, 0), o'n oltilik (-1, +1), o'n oltilik (0) , +1)], [oltilik (+1, 0), oltilik (+1, -1), oltilik (0, -1), oltilik (-1, -1), oltilik (-1, 0), olti burchakli (0, +1)]] funktsiyasi ofset_neighbor (olti burchak, yo'nalish): var parity = hex.col & 1 var dir = yo'nalishlar Hex (hex.col + dir.col, hex.row + dir.row)


Juft (EVEN) va toq (ODD) ustunlar uchun panjara

Diagonallar

Olti burchakli koordinatalarda "diagonal" bo'shliqda harakat qilish uchta kub koordinatadan birini ± 2 ga, qolgan ikkisini ∓1 ga o'zgartiradi (yig'indisi 0 ga teng bo'lishi kerak).

Turli diagonallar = [Kub (+2, -1, -1), kub (+1, +1, -2), kub (-1, +2, -1), kub (-2, +1, +1) ), Cube (-1, -1, +2), Cube (+1, -2, +1)] funktsiyasi cube_diagonal_neighbor (olti burchak, yo'nalish): cube_add (o'n oltilik, diagonal)
Oldingidek, biz natijalarni hisoblagandan so'ng, bu koordinatalarni eksenel koordinatalarga aylantira olamiz, uchta koordinatadan birini tashlaymiz yoki ofset koordinatalarga aylantiramiz.


Masofalar

Kubik koordinatalari

Kubik koordinatalar tizimida har olti burchakli uch o'lchovli kubdir. Qo'shni olti burchakli burchakli panjara ichida 1, lekin kubikli panjara ichida 2 ta. Bu masofani hisoblashni osonlashtiradi. Kvadratchalar panjarasida Manxetten masofalari abs (dx) + abs (dy). Kublar panjarasida Manxetten masofalari abs (dx) + abs (dy) + abs (dz). Olti burchakli tarmoqdagi masofa ularning yarmiga teng:

Cube_distance funktsiyasi (a, b): qaytish (abs (a.x - b.x) + abs (a.y - b.y) + abs (a.z - b.z)) / 2
Bu belgining ekvivalenti uchta koordinatadan biri qolgan ikkisining yig'indisi bo'lishi kerakligini bildiradi va keyin uni masofa sifatida oladi. Siz ikkiga bo'linish shaklini yoki maksimal qiymat shaklini tanlashingiz mumkin, lekin ular bir xil natijani beradi:

Cube_distance funktsiyasi (a, b): maksimal qaytish (abs (a.x - b.x), abs (a.y - b.y), abs (a.z - b.z))
Rasmda maksimal qiymatlar rang bilan ajratilgan. E'tibor bering, har bir rang oltita "diagonal" yo'nalishlardan birini ifodalaydi.

GIF


Eksenel koordinatalar

Eksenel tizimda uchinchi koordinata bilvosita ifodalanadi. Masofani hisoblash uchun ekseneldan kubga o'tkazamiz:

Hex_distance funktsiyasi (a, b): var ac = hex_to_cube (a) var bc = hex_to_cube (b) cube_distance (ac, bc) qaytish
Agar sizning holatingizda kompilyator hex_to_cube va cube_distance qatorida bo'lsa, u quyidagi kodni yaratadi:

Funktsiya hex_distance (a, b): qaytish (abs (a.q - b.q) + abs (a.q + a.r - b.q - b.r) + abs (a.r - b.r)) / 2
Olti burchak orasidagi masofani eksenel koordinatalarda yozishning turli xil usullari mavjud, lekin yozilish uslubidan qat'i nazar. eksenli tizimdagi olti burchakli orasidagi masofa kub tizimidagi Manxetten masofasidan olinadi... Masalan, ta'riflangan "farqlar farqi" a.q + a.r - b.q - b.r ni a.q - b.q + a.r - b.r sifatida yozish va cube_distance biseksiya shakli o'rniga maksimal qiymat shakli yordamida olinadi. Agar siz kub koordinatalari bilan bog'liqlikni ko'rsangiz, ularning barchasi o'xshash.

Ofset koordinatalari

Eksenel koordinatalarda bo'lgani kabi, biz ofset koordinatalarini kub koordinatalariga aylantiramiz va keyin kubik masofani ishlatamiz.

Ofset_distance funktsiyasi (a, b): var ac = offset_to_cube (a) var bc = offset_to_cube (b) cube_distance (ac, bc) qaytish
Ko'p algoritmlar uchun biz bir xil naqshdan foydalanamiz: olti burchakdan kublarga aylantirish, algoritmning kubik versiyasini ishga tushirish va kubik natijalarini olti burchakli koordinatalarga (eksenel yoki ofset koordinatalari) aylantirish.

Chiziqlar chizish

Bir olti burchakdan ikkinchisiga qanday chiziq chizish mumkin? Men chiziqlar chizish uchun chiziqli interpolatsiyadan foydalanaman. Chiziq N + 1 nuqtalarida bir xil tarzda tanlanadi va bu namunalar qaysi olti burchakda joylashganligi hisoblanadi.

GIF


  1. Biz avval N ni hisoblaymiz, bu oxirgi nuqtalar orasidagi olti burchakli masofa bo'ladi.
  2. Keyin biz A va B nuqtalar orasidagi N + 1 nuqtalarni bir xilda tanlaymiz. Chiziqli interpolatsiyadan foydalanib, 0 dan N gacha bo'lgan qiymatlar uchun har bir nuqta A + (B - A) * 1.0 / N * bo'lishini aniqlaymiz. i. Rasmda bu nazorat nuqtalari ko'k rangda ko'rsatilgan. Natijada suzuvchi nuqta koordinatalari olinadi.
  3. Har bir nazorat nuqtasini (float) olti burchakli (int) ga aylantiring. Algoritm cube_round deb nomlanadi (pastga qarang).
A dan B gacha chiziq chizish uchun hammasini birlashtirib:

Lerp funktsiyasi (a, b, t): // float qaytarish uchun a + (b - a) * t funktsiyasi cube_lerp (a, b, t): // olti burchakli uchun Cube qaytariladi (lerp (ax, bx, t), lerp (ay, by, t), lerp (az, bz, t)) funktsiyasi cube_linedraw (a, b): var N = cube_distance (a, b) var natijalar = har 0 ≤ i ≤ N uchun: natijalar. qo'shish ( cube_round (cube_lerp (a, b, 1.0 / N * i))) natijalarni qaytaradi
Eslatmalar:

  • Ba'zida cube_lerp ikkita olti burchak orasidagi chekkadagi nuqtani qaytaradi. Keyin cube_round uni bir tomonga yoki boshqasiga o'zgartiradi. Xuddi shu yo'nalishda harakatlansa, chiziqlar yaxshi ko'rinadi. Buni pastadir boshlanishidan oldin bir yoki ikkala oxirgi nuqtaga epsilon olti burchakli kubini (1e-6, 1e-6, -2e-6) qo'shish orqali qilish mumkin. Bu chiziqni bir tomonga "siljitadi", shunda u chekka chegaralarga tegmaydi.
  • Kvadratchalar katakchasidagi DDA chizig'i algoritmi N o'qining har bir o'qi bo'ylab maksimal masofaga teng. Biz xuddi shunday olti burchakli panjara masofasiga o'xshash kubik maydonda ham shunday qilamiz.
  • Cube_lerp funktsiyasi float koordinatalari bo'lgan kubni qaytarishi kerak. Agar siz statik yozilgan tilda dasturlash qilsangiz, Cube turini ishlata olmaysiz. Buning o'rniga, siz FloatCube turini belgilashingiz yoki boshqa turni belgilashni xohlamasangiz, chiziq chizish kodiga funktsiyani kiritishingiz mumkin.
  • Siz kodni inline cube_lerp orqali optimallashtirishingiz va keyin B.x-A.x, B.x-A.y va 1.0 / N ni ko'chadan tashqarida hisoblashingiz mumkin. Ko'paytirishni takroriy yig'ishga o'tkazish mumkin. Natijada DDA liniyasi algoritmi kabi bo'ladi.
  • Men chiziqlar chizish uchun eksenel yoki kubik koordinatalardan foydalanaman, lekin agar siz ofset koordinatalari bilan ishlashni xohlasangiz, o'rganing.
  • Chiziq chizish uchun ko'plab variantlar mavjud. Ba'zan qoplamani qoplash talab qilinadi. Ular menga olti burchakli qoplamali chiziqlar chizish kodini yuborishdi, lekin men buni hali ko'rib chiqmaganman.

Sayohat diapazoni

Koordinatalar diapazoni

Olti burchakli va N diapazonidagi berilgan markaz uchun qaysi olti burchakli N qadam ichida joylashgan?

Olti burchakli masofa = max (abs (dx), abs (dy), abs (dz)) orasidagi masofaning formulasidan qarama -qarshi ishni bajarishimiz mumkin. N ichida barcha olti burchaklarni topish uchun bizga max (abs (dx), abs (dy), abs (dz)) ≤ N kerak. Bu shuni anglatadiki, uchta qiymat ham kerak: abs (dx) ≤ N va abs (dy) ≤ N va abs (dz) ≤ N. Mutlaq qiymatni olib tashlash orqali biz -N ≤ dx ≤ N va -N ≤ dy ≤ N va -N ≤ dz ≤ N ni olamiz. Kodda, bu ichki o'rnatilgan loop bo'ladi:

Har bir natija = har bir uchun -N ≤ dx ≤ N: har bir uchun -N ≤ dy ≤ N: har bir uchun -N ≤ dz ≤ N: agar dx + dy + dz = 0 bo'lsa: natijalar. Qo'shish (cube_add (markaz, Cube (dx) , dy, dz)))
Bu pastadir ishlaydi, lekin bu juda samarasiz bo'ladi. Biz tsiklda takrorlanadigan barcha dz qiymatlaridan faqat bittasi dx + dy + dz = 0 kublar shartini bajaradi. Buning o'rniga, biz shartni qondiradigan dz qiymatini to'g'ridan -to'g'ri hisoblaymiz:

Har bir natija = har bir uchun -N ≤ dx ≤ N: har bir max uchun (-N, -dx -N) ≤ dy ≤ min (N, -dx + N): var dz = -dx -dy natijalari.append (cube_add ( markaz, kub (dx, dy, dz)))
Bu tsikl faqat kerakli koordinatalar bo'ylab ishlaydi. Rasmda har bir diapazon bir juft chiziqdan iborat. Har bir satr tengsizlikdir. Biz oltita tengsizlikni qondiradigan olti burchakni olamiz.

GIF


Bir -biriga mos keladigan diapazonlar

Agar siz bir nechta diapazonli olti burchakli burchaklarni topishingiz kerak bo'lsa, siz olti burchakli ro'yxatni tuzishdan oldin diapazonlarni kesib o'tishingiz mumkin.

Siz bu muammoga algebra yoki geometriya nuqtai nazaridan yondashishingiz mumkin. Algebraik ravishda har bir mintaqa -N ≤ dx ≤ N shaklida tengsizlik shartlari sifatida ifodalanadi va biz bu shartlarning kesishishini topishimiz kerak. Geometrik nuqtai nazardan, har bir maydon uch o'lchovli kosmosdagi kubdir va biz uch o'lchamli makonda to'rtburchaklar parallelepiped olish uchun uch kubikli maydonda ikkita kubni kesib o'tamiz. Keyin biz uni oltita burchakni olish uchun x + y + z = 0 tekislikka qaytaramiz. Men bu muammoni algebraik tarzda hal qilaman.

Birinchidan, biz -N ≤ dx ≤ N shartini x umumiy ≤ x ≤ x max shaklida qayta yozamiz va x min = center.x - N va x max = center.x + N ni olamiz. Keling, y va z uchun ham xuddi shunday qilaylik, natijada oldingi qismdagi kodning umumiy ko'rinishi paydo bo'ladi:

Har xil natijalar = har bir xmin uchun ≤ x ≤ xmax: har bir max uchun (ymin, -x -zmax) ≤ y ≤ min (ymax, -x -zmin): var z = -xy natijalari. Qo'shish (Cube (x, y, z))
A ≤ x ≤ b va c ≤ x ≤ d oralig'ining kesishishi maksimal (a, c) ≤ x ≤ min (b, d) dir. Olti burchakli maydoni x, y, z dan katta diapazonlarda ifodalanganligi sababli, biz har bir x, y, z diapazonini alohida kesib o'tamiz va keyin kesishgan olti burchakli ro'yxatni yaratish uchun ichki pastadirdan foydalanishimiz mumkin. Olti burchakli bitta maydon uchun biz x min = H.x - N va x max = H.x + N ni olamiz, xuddi shunday y va z uchun. Olti burchakli ikkita mintaqaning kesishishi uchun x min = max (H1.x - N, H2.x - N) va x max = min (H1.x + N, H2.x + N) ni olamiz, xuddi shunday y uchun. va z. Xuddi shu naqsh uch yoki undan ortiq hududlarning kesishishi uchun ishlaydi.

GIF


To'siqlar

Agar to'siqlar bo'lsa, cheklangan masofani to'ldirish osonroq bo'ladi (Birinchi qidiruv kengligi). Quyidagi rasmda biz to'rtta harakat bilan cheklanganmiz. Kodda, chekka [k] - bu k qadam bilan erishish mumkin bo'lgan barcha olti burchakli qator. Asosiy pastadir orqali har bir o'tishda biz k-1 darajasini k darajagacha kengaytiramiz.

Cube_reachable funktsiyasi (boshlash, harakat): var tashrif buyurdi = set () tashrif buyurganlarning boshlanishini qo'shing var fringes = fringes.append () har 1 uchun< 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

Aylanadi

Berilgan olti burchakli vektor uchun (ikki olti burchakli orasidagi farq), biz uni boshqa olti burchakni ko'rsatadigan qilib aylantirishimiz kerak bo'lishi mumkin. Agar siz 1/6 aylana aylanishga rioya qilsangiz, buni kub koordinatalari yordamida qilish oson.

60 ° o'ngga burilish har bir koordinatani bir pozitsiyani o'ngga siljitadi:

[x, y, z] dan [-z, -x, -y]
60 ° chapga burilish har bir koordinatani bir pozitsiyani chapga siljitadi:

[x, y, z] dan [-y, -z, -x]



Sxema bilan "asl maqolada" o'ynab, siz har bir burilish 60 ° ga burilganini ko'rasiz o'zgarishlar koordinatalarni belgilaydi va jismonan "aylantiradi". 120 ° burilgandan so'ng, belgilar yana bir xil bo'ladi. 180 ° burilish belgilarni o'zgartiradi, lekin koordinatalar asl holatiga qaytariladi.

P pozitsiyasini C markazining atrofida aylantirishning to'liq ketma -ketligi, natijada yangi R pozitsiyasi paydo bo'ladi:

  1. P va C pozitsiyalarini kub koordinatalariga aylantiring.
  2. Vektorni markazni ayirish orqali hisoblang: P_from_C = P - C = Cube (P.x - C.x, P.y - C.y, P.z - C.z).
  3. P_from_C vektorini yuqorida ta'riflanganidek aylantiring va hosil bo'lgan R_from_C vektorini belgilang.
  4. Markazni qo'shib vektorni joyiga qaytaring: 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 kubik holatini kerakli koordinata tizimiga qaytaring.
O'zgarishning bir necha bosqichlari bor, lekin ularning har biri juda oddiy. To'g'ridan -to'g'ri o'q koordinatalarida aylanishni aniqlab, bu qadamlarning bir qismini qisqartirish mumkin, lekin olti burchakli vektorlar ofset koordinatalari bilan ishlamaydi va men ofset koordinatalari uchun qadamlarni qanday qisqartirishni bilmayman. Stackexchange aylanishini hisoblashning boshqa usullari haqida ham qarang.

Uzuklar

Oddiy uzuk

Berilgan olti burchak berilgan radiusning halqasiga tegishli ekanligini bilish uchun siz bu olti burchakdan markazgacha bo'lgan masofani hisoblab, uning radiusga tengligini aniqlashingiz kerak. Barcha olti burchakli ro'yxatni olish uchun markazdan radiusli qadamlarni bajaring, so'ngra halqa bo'ylab yo'l bo'ylab aylangan vektorlarga amal qiling.

Cube_ring funktsiyasi (markaz, radius): var results = # bu kod radius uchun ishlamaydi == 0; nima uchun tushundingizmi? var cube = cube_add (markaz, cube_scale (cube_direction (4), radius)) har 0 ≤ i uchun< 6: for each 0 ≤ j < radius: results.append(cube) cube = cube_neighbor(cube, i) return results
Bu kodda kub markazdan diagramma burchagigacha katta o'q bilan ko'rsatilgan halqadan boshlanadi. Men boshlash uchun 4 -burchakni tanladim, chunki u yo'nalish raqamlarim harakatlanayotgan yo'lga to'g'ri keladi. Sizga boshqa boshlang'ich burchak kerak bo'lishi mumkin. Ichki halqaning har bir qadamida, kub halqa bo'ylab bir olti burchakli harakat qiladi. 6 * radiusli qadamlardan so'ng, u boshlangan joyda tugaydi.


Spiral halqalar

Uzuklarni spiral shaklida aylantirib, halqalarning ichki qismlarini to'ldirishimiz mumkin:

Cube_spiral funktsiyasi (markaz, radius): var natijalar = har 1 ≤ k ≤ radius uchun: natijalar = natijalar + cube_ring (markaz, k) natijalarni qaytarish



Katta olti burchakli maydon - bu barcha doiralar yig'indisi va markaz uchun 1. Maydonni hisoblash uchun ushbu formuladan foydalaning.

Olti burchakli aylanalarni shu tarzda harakatlanish oralig'ini hisoblash uchun ham ishlatish mumkin (yuqoriga qarang).

Ko'rinish maydoni

Berilgan masofadan ma'lum pozitsiyadan nimalar ko'rinadi va to'siqlar to'sqinlik qilmaydi? Buni aniqlashning eng oddiy usuli - berilgan diapazonda har olti burchakli chiziq chizish. Agar chiziq devorlarga to'g'ri kelmasa, siz olti burchakni ko'rasiz. Bu olti burchakli chiziqlar chizig'ini va chiziqlar bir -biriga mos keladigan devorlarni ko'rish uchun sichqonchani oltburchaklar ustida [dastlabki maqoladagi diagrammada] suring.

Bu algoritm katta maydonlarda sekin bo'lishi mumkin, lekin uni amalga oshirish oson, shuning uchun men undan boshlashni maslahat beraman.

GIF



Ko'rinishning turli xil ta'riflari mavjud. Boshqa olti burchakli markazni boshlang'ichning o'rtasidan ko'rishni xohlaysizmi? Boshqa olti burchakning biron bir qismini boshlang'ichning o'rtasidan ko'rishni xohlaysizmi? Balki har qanday boshlang'ich nuqtadan boshqa olti burchakning biron bir qismi? To'siqlar to'liq olti burchakdan kichikroqmi? Qo'llash doirasi - bu ko'zga qaraganda murakkabroq va xilma -xil tushuncha. Eng oddiy algoritmdan boshlaylik, lekin kuting, bu sizning loyihangizda javobni to'g'ri hisoblab chiqadi. Hatto oddiy algoritm mantiqsiz natijalar beradigan holatlar ham bor.

Men bu darslikni yanada kengaytirmoqchiman. Menda bor

Yoningizda qalam bormi? Uning bo'limiga qarang - bu oddiy olti burchakli, yoki uni olti burchakli deb ham atashadi. Yong'oqning kesmasi, olti burchakli shaxmat maydoni, ba'zi murakkab uglerod molekulalari (masalan, grafit), qor parchasi, asal qoli va boshqa jismlar ham shunday shaklga ega. Yaqinda ulkan olti burchakli kashf qilindi Keling, batafsil ko'rib chiqaylik.

Muntazam olti burchak - bu oltita teng qirrali va teng burchakli ko'pburchak. Biz maktab kursidan bilamizki, u quyidagi xususiyatlarga ega.

  • Uning tomonlarining uzunligi aylananing radiusiga to'g'ri keladi. Umuman olganda, oddiy olti burchakli bu xususiyatga ega.
  • Burchaklar bir -biriga teng va har birining kattaligi 120 °.
  • Olti burchakli perimetrni P = 6 * R formulasi bilan topish mumkin, agar uning atrofida aylana chizilgan aylananing radiusi ma'lum bo'lsa yoki unga aylana yozilgan bo'lsa P = 4 * √ (3) * r. R va r - aylana va aylananing radiusi.
  • Muntazam olti burchakli egallagan maydon quyidagicha aniqlanadi: S = (3 * √ (3) * R 2) / 2. Agar radius noma'lum bo'lsa, uning o'rniga biz tomonlardan birining uzunligini almashtiramiz - siz bilganingizdek, u aylananing aylana radiusi uzunligiga to'g'ri keladi.

Oddiy olti burchakli tabiatning shu qadar keng tarqalgan bir qiziq xususiyati borki, u samolyotning istalgan yuzasini qoplama va bo'shliqlarsiz to'ldirishga qodir. Hatto Pal lemma deb ham ataladi, unga ko'ra tomoni 1 / √ (3) ga teng bo'lgan olti burchak universal qopqoqdir, ya'ni diametri bitta birlik bo'lgan har qanday to'plamni qoplay oladi.

Endi oddiy olti burchakli qurilishni ko'rib chiqaylik. Bir necha usullar bor, ularning eng soddaligi kompas, qalam va o'lchagichdan foydalanishni o'z ichiga oladi. Birinchidan, biz kompas bilan o'zboshimchalik bilan aylana chizamiz, so'ngra o'zboshimchalik bilan bu doirada nuqta qo'yamiz. Kompasning echimini o'zgartirmagan holda, biz uchini shu nuqtaga qo'yamiz, aylananing keyingi chizig'ini belgilaymiz va hamma 6 ball olguncha shu tarzda davom etamiz. Endi ularni faqat to'g'ri segmentlar bilan bog'lash qoladi, va siz kerakli raqamni olasiz.

Amalda, katta olti burchakni chizish kerak bo'lgan paytlar bo'ladi. Masalan, ikki darajali gipskartonli shiftga, markaziy qandilni o'rnatish joyi atrofida, pastki qavatiga oltita kichik lampani o'rnatish kerak. Bunday o'lchamdagi kompasni topish juda qiyin bo'ladi. Bu holatda nima qilish kerak? Qanday qilib katta doira chizish mumkin? Juda oddiy. Siz kerakli uzunlikdagi kuchli ipni olishingiz va uning uchlaridan birini qalamga qarama -qarshi bog'lab qo'yishingiz kerak. Endi ipning ikkinchi uchini shiftga kerakli nuqtada bosadigan yordamchini topishgina qoladi. Albatta, bu holda kichik xatolar bo'lishi mumkin, lekin ular begonaga umuman sezilmasligi mumkin.

Tarkibi:

Oddiy olti burchak, shuningdek, olti burchakli, oltita teng qirrali va oltita teng burchakli. Siz oltita burchakni lenta o'lchovi va o'lchagich bilan, dumaloq narsa va o'lchagich bilan qo'pol olti burchakni yoki undan ham qo'polroq olti burchakni qalam va ozgina sezgi bilan chizishingiz mumkin. Agar siz olti burchakni har xil usulda chizishni bilmoqchi bo'lsangiz, o'qing.

Qadamlar

1 Kompas yordamida mukammal olti burchakni chizish

  1. 1 Kompas yordamida aylana chizish. Qalamni kompasga joylashtiring. Doira radiusi uchun kompasni kerakli kenglikka kengaytiring. Kengligi er -xotin dan o'n santimetrgacha bo'lishi mumkin. Keyin qog'ozga qalam bilan kompas qo'ying va aylana chizib oling.
    • Ba'zan avval aylananing yarmini, so'ngra ikkinchi yarmini chizish osonroq bo'ladi.
  2. 2 Kompas ignasini aylananing chetiga o'tkazing. Uni aylananing yuqori qismiga qo'ying. Kompasning burchagi va o'rnini o'zgartirmang.
  3. 3 Doira chetiga kichik qalam belgisini qo'ying. Buni aniq qiling, lekin juda qorong'i emas, chunki uni keyin o'chirib tashlaysiz. Kompas uchun belgilangan burchakni saqlashni unutmang.
  4. 4 Kompas ignasini yangi qilingan belgiga o'tkazing. Ignani to'g'ridan -to'g'ri belgiga qo'ying.
  5. 5 Doira chetiga boshqa qalam belgisini qo'ying. Shunday qilib, siz birinchi belgidan ma'lum masofada ikkinchi belgini qo'yasiz. Bir yo'nalishda harakat qilishni davom ettiring.
  6. 6 Xuddi shu tarzda yana to'rtta belgini qo'ying. Siz asl belgiga qaytishingiz kerak. Agar shunday bo'lmasa, ehtimol siz kompasni ushlab turgan va markirovka qilgan burchak o'zgargan. Ehtimol, bu siz uni juda qattiq siqib qo'yganingiz yoki aksincha, uni biroz bo'shatganingiz uchun sodir bo'lgan.
  7. 7 Belgilarni o'lchagich bilan ulang. Sizning belgilaringiz aylananing chetlari bilan kesishgan oltita joy - olti burchakli oltita tepalik. Qalam va qalamdan foydalanib, qo'shni belgilarni bog'laydigan to'g'ri chiziqlar chiziladi.
  8. 8 Ham aylanani, ham aylananing chekkasidagi belgilarni va ham boshqa belgilarni o'chiring. Barcha qurilish chizig'ini o'chirib tashlaganingizdan so'ng, sizning mukammal olti burchakli tayyor bo'lishi kerak.

2 Dumaloq narsa va o'lchagich yordamida qo'pol olti burchakli chizish

  1. 1 Stakan chetiga qalam torting. Shu tarzda siz aylana chizasiz. Qalam bilan chizish juda muhim, chunki keyinchalik siz barcha yordamchi chiziqlarni o'chirishingiz kerak bo'ladi. Shuningdek, siz tepa oynani, kavanozni yoki dumaloq taglikka ega bo'lgan boshqa narsalarni aylantira olasiz.
  2. 2 Doira o'rtasi bo'ylab gorizontal chiziqlar chizish. Siz o'lchagichni, kitobni, tekis qirrali hamma narsani ishlatishingiz mumkin. Agar sizda o'lchagich bo'lsa, aylananing vertikal uzunligini hisoblab, o'rtasiga bo'lishingiz mumkin.
  3. 3 Doira yarmidan "X" chizib, uni oltita teng qismga bo'ling. Siz allaqachon aylananing o'rtasidan chiziq chizganingiz uchun, X balandlikdan baland bo'lishi kerak, shunda uning qismlari teng bo'ladi. Tasavvur qiling, siz pitsani oltita bo'lakka aylantiryapsiz.
  4. 4 Har bir qismdan uchburchaklar yasang. Buning uchun o'lchagichdan foydalanib, har bir bo'lakning egri qismi ostiga to'g'ri chiziq chizib, uni boshqa ikkita chiziq bilan bog'lab, uchburchak hosil qiling. Buni qolgan beshta bo'lim bilan bajaring. Buni pizza bo'laklari atrofida qobiq yasash kabi o'ylab ko'ring.
  5. 5 Barcha qurilish chiziqlarini o'chiring. Qurilish chiziqlariga sizning doirangiz, aylanangizni bo'laklarga bo'linadigan uchta chiziq va yo'l davomida qilgan boshqa belgilar kiradi.

3 Bir qalam bilan qo'pol olti burchakni chizish

  1. 1 Gorizontal chiziq chizish. To'g'ri chiziqni chizg'ichsiz chizish uchun gorizontal chizig'ingizning boshlanish va tugash nuqtalarini chizish kifoya. Keyin qalamni boshlang'ich nuqtasiga qo'ying va chiziqni oxirigacha cho'zing. Bu chiziqning uzunligi bir -ikki santimetrga etishi mumkin.
  2. 2 Gorizontal chiziqning uchidan ikkita diagonal chiziq chizamiz. Chap tarafdagi diagonal chiziq, o'ngdagi diagonal chiziq kabi tashqi tomonga qaragan bo'lishi kerak. Siz tasavvur qilishingiz mumkinki, bu chiziqlar gorizontal chiziqqa nisbatan 120 daraja burchak hosil qiladi.
  3. 3 Ichkariga chizilgan birinchi gorizontal chiziqlardan chiqadigan yana ikkita gorizontal chiziqni torting. Bu birinchi ikkita diagonal chiziqning ko'zgu tasvirini yaratadi. Pastki chap chiziq yuqori chap chiziqning aksi bo'lishi kerak va pastki o'ng chiziq yuqori o'ng chiziqning aksi bo'lishi kerak. Yuqori gorizontal chiziqlar tashqi tomonga qarasa, pastki chiziqlar taglikning ichki tomoniga qarashi kerak.
  4. 4 Pastki ikkita diagonal chiziqni bog'laydigan boshqa gorizontal chiziqni torting. Shunday qilib, siz olti burchak uchun asosni chizasiz. Ideal holda, bu chiziq yuqori gorizontal chiziqqa parallel bo'lishi kerak. Endi siz olti burchakni tugatdingiz.
  • Qalam va kompas juda aniq belgilarda xatolarni kamaytirish uchun o'tkir bo'lishi kerak.
  • Agar kompas usuli yordamida siz oltita o'rniga har bir belgini bog'lasangiz, siz teng qirrali uchburchak olasiz.

Ogohlantirishlar

  • Kompas - bu juda o'tkir narsa, unga juda ehtiyot bo'ling.

Ish printsipi

  • Har bir usul olti burchakli, olti tengburchak uchburchakdan iborat bo'lib, radiusi barcha tomonlarning uzunligiga teng bo'ladi. Oltita chizilgan radiusning uzunligi bir xil va olti burchakli chiziqlarning uzunligi ham bir xil, chunki kompasning kengligi o'zgarmagan. Olti uchburchak teng qirrali bo'lgani uchun ularning tepalari orasidagi burchaklar 60 gradusga teng.

Sizga nima kerak

  • Qog'oz
  • Qalam
  • Hukmdor
  • Kompas juftligi
  • Kompas ignasi sirg'alib ketmasligi uchun qog'oz ostiga biror narsa qo'yish mumkin.
  • Silgi

Yopish