วิธีการวาดหกเหลี่ยมล้อมรอบ. การสร้างรูปหลายเหลี่ยมปกติล้อมรอบด้วยวงกลม คุณสมบัติเรียบง่ายและน่าสนใจ

มาเรียนรู้วิธีการวาดปริซึมหกเหลี่ยมในตำแหน่งต่างๆกัน

เรียนรู้วิธีต่างๆ ในการสร้างรูปหกเหลี่ยมปกติ วาดรูปหกเหลี่ยม ตรวจสอบความถูกต้องของการก่อสร้าง สร้างปริซึมหกเหลี่ยมตามรูปหกเหลี่ยม

พิจารณาปริซึมหกเหลี่ยมในรูปที่ 3.52 และการฉายภาพมุมฉากในรูปที่ 3.53. ที่ฐานของปริซึมหกเหลี่ยม (hexahedron) เป็นรูปหกเหลี่ยมปกติ ใบหน้าด้านข้างเป็นรูปสี่เหลี่ยมผืนผ้าเหมือนกัน เพื่อที่จะวาดภาพหกเหลี่ยมในเปอร์สเปคทีฟได้อย่างถูกต้อง ก่อนอื่นคุณต้องเรียนรู้วิธีอธิบายฐานของมันในเปอร์สเปคทีฟให้ถูกต้อง (รูปที่ 3.54) ในรูปหกเหลี่ยม 3.55 พีคมีหมายเลขตั้งแต่หนึ่งถึงหก หากคุณเชื่อมต่อจุดที่ 1 และ 3, 4 และ 6 ด้วยเส้นแนวตั้ง คุณจะสังเกตเห็นว่าเส้นเหล่านี้ร่วมกับจุดศูนย์กลางของวงกลม แบ่งเส้นผ่านศูนย์กลาง 5 - 2 ออกเป็นสี่ส่วนเท่าๆ กัน (ส่วนเหล่านี้แสดงด้วยส่วนโค้ง ). ด้านตรงข้ามของรูปหกเหลี่ยมขนานกัน และมีเส้นตรงผ่านจุดศูนย์กลางและเชื่อมจุดยอดสองจุด (เช่น ด้าน 6 - 1 และ 4 - 3 ขนานกับเส้น 5 - 2) การสังเกตเหล่านี้จะช่วยคุณสร้างรูปหกเหลี่ยมในมุมมอง และตรวจสอบความถูกต้องของสิ่งก่อสร้างนี้ด้วย มีสองวิธีในการสร้างรูปหกเหลี่ยมปกติจากการเป็นตัวแทน: ตามวงกลมที่ล้อมรอบและตามสี่เหลี่ยมจัตุรัส

ขึ้นอยู่กับวงรอบวง. พิจารณารูปที่ 3.56. จุดยอดทั้งหมดของรูปหกเหลี่ยมปกติอยู่ในวงกลมที่ล้อมรอบ ซึ่งมีรัศมีเท่ากับด้านข้างของรูปหกเหลี่ยม


หกเหลี่ยมแนวนอน วาดวงรีแนวนอนของช่องเปิดตามอำเภอใจ นั่นคือ มุมมองวงกลมที่ล้อมรอบ ตอนนี้คุณต้องหาจุดหกจุดซึ่งเป็นจุดยอดของรูปหกเหลี่ยม วาดเส้นผ่านศูนย์กลางของวงกลมที่กำหนดผ่านจุดศูนย์กลาง (รูปที่ 3.57) จุดสุดขีดของเส้นผ่านศูนย์กลาง - 5 และ 2 ซึ่งอยู่บนวงรีคือจุดยอดของรูปหกเหลี่ยม ในการหาจุดยอดที่เหลือ จำเป็นต้องแบ่งเส้นผ่านศูนย์กลางออกเป็นสี่ส่วนเหมือนกัน เส้นผ่านศูนย์กลางถูกหารด้วยจุดศูนย์กลางของวงกลมเป็นรัศมีสองรัศมีแล้ว โดยยังคงแบ่งรัศมีแต่ละอันออกเป็นครึ่งหนึ่ง ในการวาดภาพเปอร์สเปคทีฟ ทั้งสี่ส่วนจะหดตัวเท่าๆ กันเมื่อเคลื่อนออกจากตัวแสดง (รูปที่ 3.58) ตอนนี้ลากผ่านจุดกึ่งกลางของรัศมี - จุด A และ B - เส้นตรงตั้งฉากกับเส้นตรง 5 - 2 คุณสามารถหาทิศทางได้โดยใช้แทนเจนต์กับวงรีที่จุด 5 และ 2 (รูปที่ 3.59) เส้นสัมผัสเหล่านี้จะตั้งฉากกับเส้นผ่านศูนย์กลาง 5 - 2 และเส้นที่ลากผ่านจุด A และ B ขนานกับเส้นสัมผัสเหล่านี้จะตั้งฉากกับเส้นที่ 5 - 2 กำหนดจุดที่ได้รับที่จุดตัดของเส้นเหล่านี้ด้วยวงรีดังนี้ 1, 3, 4, 6 ( รูปที่ 3.60). เชื่อมต่อจุดยอดทั้งหกด้วยเส้นตรง (รูปที่ 3.61)

ตรวจสอบว่างานสร้างของคุณถูกต้องหรือไม่ วิธีทางที่แตกต่าง. หากการก่อสร้างถูกต้อง เส้นที่เชื่อมต่อจุดยอดตรงข้ามของรูปหกเหลี่ยมตัดกันที่ศูนย์กลางของวงกลม (รูปที่ 3.62) และ ฝ่ายตรงข้ามรูปหกเหลี่ยมขนานกับเส้นผ่านศูนย์กลางที่สอดคล้องกัน (รูปที่ 3.63) วิธีการตรวจสอบอื่นจะแสดงในรูปที่ 3.64.

หกเหลี่ยมแนวตั้ง. ในรูปหกเหลี่ยมดังกล่าว เส้นที่เชื่อมระหว่างจุดที่ 7 และ 3, b และ 4 รวมทั้งเส้นสัมผัสของวงกลมที่ล้อมรอบที่จุด 5 และ 2 มีทิศทางแนวตั้งและคงไว้ในรูปวาดเปอร์สเปคทีฟ ดังนั้น เมื่อวาดเส้นสัมผัสแนวตั้งสองเส้นไปที่วงรี เราจะพบจุดที่ 5 และ 2 (จุดสัมผัส) เชื่อมต่อพวกมันด้วยเส้นตรงแล้วแบ่งเส้นผ่านศูนย์กลางผลลัพธ์ 5 - 2 ออกเป็น 4 ส่วนเท่า ๆ กัน โดยคำนึงถึงการตัดมุมมองของพวกมัน (รูปที่ 3.65) ลากเส้นแนวตั้งผ่านจุด A และ B และที่จุดตัดด้วยวงรี ให้หาจุด 1,3,6l4 จากนั้นเชื่อมต่อจุดที่ 1 - 6 ด้วยเส้นตรง (รูปที่ 3.66) ตรวจสอบความถูกต้องของการสร้างรูปหกเหลี่ยมในลักษณะเดียวกับตัวอย่างก่อนหน้านี้

วิธีการที่อธิบายไว้ในการสร้างรูปหกเหลี่ยมช่วยให้คุณได้ตัวเลขนี้โดยอิงจากวงกลม ซึ่งจะแสดงให้เห็นได้ง่ายกว่ารูปสี่เหลี่ยมจัตุรัสในสัดส่วนที่กำหนด ดังนั้น วิธีสร้างรูปหกเหลี่ยมนี้จึงดูแม่นยำและเป็นสากลมากที่สุด วิธีการก่อสร้างโดยใช้สี่เหลี่ยมจัตุรัสทำให้ง่ายต่อการวาดภาพหกเหลี่ยมในกรณีที่มีลูกบาศก์อยู่ในรูปแล้ว กล่าวคือ เมื่อกำหนดสัดส่วนของสี่เหลี่ยมจัตุรัสและทิศทางของด้านข้าง

สแควร์ตาม พิจารณารูปที่ 3.67. รูปหกเหลี่ยมที่จารึกไว้ในสี่เหลี่ยมจัตุรัสในแนวนอน 5 - 2 เท่ากับด้านข้างของสี่เหลี่ยมจัตุรัส และในแนวตั้งจะน้อยกว่าความยาว

หกเหลี่ยมแนวตั้ง. วาดสี่เหลี่ยมแนวตั้งในมุมมอง ลากเส้นตรงผ่านจุดตัดของเส้นทแยงมุมขนานกับด้านแนวนอน แบ่งส่วนที่เป็นผลลัพธ์ 5 - 2 ออกเป็นสี่ส่วนเท่า ๆ กัน แล้วลากเส้นแนวตั้งผ่านจุด A และ B (รูปที่ 3.68) เส้นที่ล้อมรอบรูปหกเหลี่ยมจากด้านบนและด้านล่างไม่ตรงกับด้านข้างของสี่เหลี่ยมจัตุรัส วาดในระยะหนึ่ง (1114 a) จากด้านแนวนอนของสี่เหลี่ยมจัตุรัสและขนานกับพวกมัน โดยการเชื่อมต่อจุดที่ 1 และ 3 ที่พบในวิธีนี้กับจุดที่ 2 และจุดที่ 6 และ 4 กับจุดที่ 5 เราจะได้รูปหกเหลี่ยม (รูปที่ 3.69)

รูปหกเหลี่ยมแนวนอนถูกสร้างขึ้นในลำดับเดียวกัน (รูปที่ 3.70 และ 3.71)

วิธีการก่อสร้างนี้เหมาะสำหรับรูปหกเหลี่ยมที่มีช่องเปิดเพียงพอเท่านั้น หากการเปิดของรูปหกเหลี่ยมไม่มีนัยสำคัญ ควรใช้วิธีการตามวงกลมที่ล้อมรอบ ในการตรวจสอบรูปหกเหลี่ยมที่สร้างจากสี่เหลี่ยมจัตุรัส คุณสามารถใช้วิธีการที่คุณรู้จักแล้ว

นอกจากนี้ยังมีอีกอันหนึ่ง - เพื่ออธิบายวงกลมรอบรูปหกเหลี่ยมที่เกิด (ในรูปของคุณ - วงรี) จุดยอดทั้งหมดของรูปหกเหลี่ยมต้องอยู่ในวงรีนี้

เมื่อชำนาญในการวาดรูปหกเหลี่ยมแล้ว คุณก็จะสามารถวาดปริซึมหกเหลี่ยมได้อย่างอิสระ ดูแผนภาพอย่างระมัดระวังในรูปที่ 3.72 เช่นเดียวกับโครงร่างสำหรับการสร้างปริซึมหกเหลี่ยมตามวงกลม (รูปที่ 3.73; 3.74 และ 3.75) และบนพื้นฐานของสี่เหลี่ยมจัตุรัส (รูปที่ 3.76; 3.77 และ 3.78) วาดหกเหลี่ยมแนวตั้งและแนวนอนด้วยวิธีต่างๆ ในรูปหกเหลี่ยมแนวตั้ง ด้านยาวของใบหน้าด้านข้างจะเป็นเส้นแนวตั้งขนานกัน และรูปหกเหลี่ยมฐานจะเปิดกว้างมากขึ้นเมื่ออยู่ห่างจากเส้นขอบฟ้า ในรูปหกเหลี่ยมแนวนอน ด้านยาวของใบหน้าด้านข้างจะมาบรรจบกันที่จุดที่หายไปบนขอบฟ้า และการเปิดของรูปหกเหลี่ยมฐานจะยิ่งยิ่งใหญ่ ยิ่งอยู่ห่างจากตัวแสดงมากเท่านั้น เมื่อวาดภาพหกเหลี่ยม ตรวจสอบให้แน่ใจด้วยว่าหน้าคู่ขนานของฐานทั้งสองมาบรรจบกันเป็นเปอร์สเปคทีฟ (รูปที่ 3.79; 3.80)

หัวข้อของรูปหลายเหลี่ยมจัดขึ้นใน หลักสูตรโรงเรียนแต่อย่าไปสนใจมันมากพอ ในขณะเดียวกัน มันเป็นเรื่องที่น่าสนใจ และโดยเฉพาะอย่างยิ่งกับรูปหกเหลี่ยมปกติหรือหกเหลี่ยม - ท้ายที่สุดแล้ว วัตถุธรรมชาติจำนวนมากมีรูปร่างนี้ เหล่านี้รวมถึงรวงผึ้งและอื่น ๆ แบบฟอร์มนี้นำไปใช้ในทางปฏิบัติได้เป็นอย่างดี

ความหมายและการก่อสร้าง

รูปหกเหลี่ยมปกติคือรูประนาบที่มีด้านหกด้านยาวเท่ากันและมีมุมเท่ากันจำนวนเท่ากัน

หากเราจำสูตรผลรวมมุมของรูปหลายเหลี่ยมได้

ปรากฎว่าในรูปนี้มีค่าเท่ากับ 720 ° เนื่องจากมุมทั้งหมดของรูปเท่ากัน มันง่ายที่จะคำนวณว่าแต่ละมุมมีค่าเท่ากับ 120 °

การวาดรูปหกเหลี่ยมนั้นง่ายมาก สิ่งที่คุณต้องมีคือเข็มทิศและไม้บรรทัด

คำแนะนำทีละขั้นตอนจะมีลักษณะดังนี้:

หากต้องการ คุณสามารถทำได้โดยไม่ต้องใช้เส้นโดยวาดวงกลมห้าวงที่มีรัศมีเท่ากัน

ตัวเลขที่ได้จะเป็นรูปหกเหลี่ยมปกติ และสามารถพิสูจน์ได้ด้านล่าง

คุณสมบัติเรียบง่ายและน่าสนใจ

เพื่อให้เข้าใจคุณสมบัติของรูปหกเหลี่ยมปกติ ควรแบ่งออกเป็นหกเหลี่ยม:

สิ่งนี้จะช่วยให้ในอนาคตแสดงคุณสมบัติของมันได้ชัดเจนยิ่งขึ้นซึ่งหลัก ๆ คือ:

  1. เส้นผ่านศูนย์กลางวงรอบ;
  2. เส้นผ่านศูนย์กลางของวงกลมที่จารึกไว้
  3. พื้นที่;
  4. ปริมณฑล.

วงล้อมและความเป็นไปได้ของการก่อสร้าง

เป็นไปได้ที่จะอธิบายวงกลมรอบรูปหกเหลี่ยม และยิ่งกว่านั้น มีเพียงอันเดียวเท่านั้น เนื่องจากตัวเลขนี้ถูกต้อง คุณจึงทำได้ค่อนข้างง่าย: วาดเส้นแบ่งครึ่งจากมุมที่อยู่ติดกันสองมุมด้านใน ตัดกันที่จุด O และด้านที่อยู่ระหว่างจุดทั้งสองเป็นรูปสามเหลี่ยม

มุมระหว่างด้านของรูปหกเหลี่ยมและครึ่งแบ่งครึ่งจะอยู่ที่ 60 ° ดังนั้นเราจึงสามารถพูดได้อย่างแน่นอนว่าสามเหลี่ยม เช่น AOB เป็นหน้าจั่ว และเนื่องจากมุมที่สามจะเท่ากับ 60 °ด้วย มันจึงเป็นด้านเท่ากันหมด ตามมาด้วยว่าเซ็กเมนต์ OA และ OB เท่ากัน ซึ่งหมายความว่าสามารถทำหน้าที่เป็นรัศมีของวงกลมได้

หลังจากนั้น คุณสามารถไปที่ด้านถัดไป และวาดเส้นแบ่งครึ่งจากมุมที่จุด C มันจะกลายเป็นสามเหลี่ยมด้านเท่าอีกอัน และด้าน AB จะเป็นค่าปกติของสองในคราวเดียว และ OS จะเป็นรัศมีถัดไปที่วงกลมเดียวกันจะไป จะมีสามเหลี่ยมดังกล่าวทั้งหมดหกรูปและจะมีจุดยอดร่วมที่จุด O ปรากฎว่าสามารถอธิบายวงกลมได้และมีเพียงอันเดียวและรัศมีเท่ากับด้านข้างของรูปหกเหลี่ยม :

นั่นคือเหตุผลที่คุณสามารถสร้างตัวเลขนี้ด้วยความช่วยเหลือของเข็มทิศและไม้บรรทัด

พื้นที่ของวงกลมนี้จะเป็นมาตรฐาน:

วงกลมจารึก

ศูนย์กลางของวงกลมที่ล้อมรอบอยู่ตรงกับศูนย์กลางของวงกลมที่จารึกไว้ เพื่อตรวจสอบสิ่งนี้ เราสามารถวาดเส้นตั้งฉากจากจุด O ไปยังด้านข้างของรูปหกเหลี่ยม พวกมันจะเป็นความสูงของสามเหลี่ยมเหล่านั้นที่ประกอบเป็นหกเหลี่ยม และในสามเหลี่ยมหน้าจั่ว ความสูงคือค่ามัธยฐานเทียบกับด้านที่วางอยู่ ดังนั้น ความสูงนี้จึงเป็นเพียงเส้นแบ่งครึ่งแนวตั้งฉาก ซึ่งเป็นรัศมีของวงกลมที่จารึกไว้

ความสูงของสามเหลี่ยมด้านเท่าคำนวณได้ง่ายๆ ดังนี้

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

และเนื่องจาก R=a และ r=h ปรากฎว่า

r=R(√3)/2.

ดังนั้น วงกลมที่จารึกไว้จะผ่านจุดศูนย์กลางของด้านข้างของรูปหกเหลี่ยมปกติ

พื้นที่ของมันจะเป็น:

S=3πa²/4,

นั่นคือสามในสี่ของสิ่งที่อธิบาย

ปริมณฑลและปริมณฑล

เส้นรอบวงทุกอย่างชัดเจน นี่คือผลรวมของความยาวของด้าน:

P=6a, หรือ 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)=а(√3)
  3. สามเหลี่ยม ABC, CDE และ AEF เท่ากันในสองด้านและมุมระหว่างพวกมัน ดังนั้นความเสมอภาคของด้าน AC, CE และ EA จะตามมา

สามเหลี่ยมตัดกันเป็นรูปหกเหลี่ยมใหม่และเป็นรูปหกเหลี่ยมปกติด้วย พิสูจน์ได้ง่าย:

ดังนั้น ตัวเลขจึงตรงกับเครื่องหมายของรูปหกเหลี่ยมปกติ - มีหกด้านและมุมเท่ากัน จากความเสมอภาคของสามเหลี่ยมที่จุดยอด มันง่ายที่จะอนุมานความยาวของด้านข้างของรูปหกเหลี่ยมใหม่:

d=а(√3)/3

มันจะเป็นรัศมีของวงกลมที่อธิบายไว้รอบ ๆ มันด้วย รัศมีของสิ่งที่จารึกไว้จะเป็นครึ่งหนึ่งของด้านของรูปหกเหลี่ยมขนาดใหญ่ ซึ่งได้รับการพิสูจน์แล้วเมื่อพิจารณาจากสามเหลี่ยม ABC ความสูงเท่ากับครึ่งหนึ่งของด้านข้าง ดังนั้นครึ่งหลังคือรัศมีของวงกลมที่จารึกไว้ในรูปหกเหลี่ยมขนาดเล็ก:

r₂=а/2

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

ปรากฎว่าพื้นที่ของรูปหกเหลี่ยมภายในดาวของเดวิดนั้นเล็กกว่าพื้นที่ขนาดใหญ่ที่ดาวนั้นถูกจารึกไว้สามเท่า

จากทฤษฎีสู่การปฏิบัติ

คุณสมบัติของรูปหกเหลี่ยมมีการใช้งานอย่างแข็งขันทั้งในธรรมชาติและในด้านต่าง ๆ ของกิจกรรมของมนุษย์ ก่อนอื่นสิ่งนี้ใช้กับสลักเกลียวและน็อต - หมวกของอันที่หนึ่งและอันที่สองนั้นไม่มีอะไรมากไปกว่ารูปหกเหลี่ยมปกติถ้าคุณไม่คำนึงถึงการลบมุม ขนาดของประแจนั้นสอดคล้องกับเส้นผ่านศูนย์กลางของวงกลมที่จารึกไว้นั่นคือระยะห่างระหว่างใบหน้าตรงข้าม

พบการใช้งานและกระเบื้องหกเหลี่ยม มันเป็นเรื่องธรรมดาน้อยกว่ารูปสี่เหลี่ยมมาก แต่สะดวกกว่าที่จะวาง: สามแผ่นมาบรรจบกันที่จุดหนึ่งไม่ใช่สี่ องค์ประกอบสามารถน่าสนใจมาก:

นอกจากนี้ยังมีการผลิตแผ่นพื้นคอนกรีต

อธิบายความชุกของรูปหกเหลี่ยมในธรรมชาติได้ง่ายๆ ดังนั้นจึงง่ายที่สุดที่จะใส่วงกลมและลูกบอลให้แน่นบนระนาบหากมีเส้นผ่านศูนย์กลางเท่ากัน ด้วยเหตุนี้รังผึ้งจึงมีรูปร่างเช่นนี้

กริดของรูปหกเหลี่ยม (กริดหกเหลี่ยม) ถูกใช้ในบางเกม แต่ไม่ง่ายและธรรมดาเหมือนกริดของสี่เหลี่ยม ฉันได้รวบรวมทรัพยากรเกี่ยวกับตารางเลขฐานสิบหกมาเกือบ 20 ปีแล้ว และฉันได้เขียนคู่มือนี้เกี่ยวกับแนวทางที่หรูหราที่สุดในโค้ดที่ง่ายที่สุด บทความนี้ใช้คู่มือของ Charles Fu และ Clark Verbruge บ่อยครั้ง ฉันจะอธิบายวิธีต่างๆ ในการสร้างตารางหกเหลี่ยม ความสัมพันธ์ และอัลกอริทึมทั่วไป หลายส่วนของบทความนี้เป็นแบบโต้ตอบ: การเลือกประเภทกริดจะเปลี่ยนไดอะแกรม โค้ด และข้อความที่เกี่ยวข้อง (หมายเหตุต่อ .: สิ่งนี้ใช้ได้กับต้นฉบับเท่านั้น ฉันแนะนำให้คุณศึกษามัน ในการแปล ข้อมูลทั้งหมดของต้นฉบับจะถูกเก็บรักษาไว้ แต่ไม่มีปฏิสัมพันธ์).

ตัวอย่างโค้ดในบทความเขียนด้วย pseudocode ดังนั้นจึงอ่านและทำความเข้าใจได้ง่ายขึ้นเพื่อเขียนการใช้งานของคุณเอง

เรขาคณิต

รูปหกเหลี่ยมคือรูปหลายเหลี่ยมหกเหลี่ยม รูปหกเหลี่ยมปกติมีทุกด้าน (หน้า) ที่มีความยาวเท่ากัน เราจะทำงานกับรูปหกเหลี่ยมปกติเท่านั้น โดยทั่วไป กริดหกเหลี่ยมจะใช้การวางแนวแนวนอน (บนสุด) และแนวตั้ง (บนสุดแบนราบ)


แบน (ซ้าย) และแหลม (ขวา) หกเหลี่ยมราดหน้า

รูปหกเหลี่ยมมี 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 ​​​​

ความกว้างของรูปหกเหลี่ยมคือ width = sqrt(3)/2 * height ระยะห่างแนวนอนระหว่างรูปหกเหลี่ยมที่อยู่ติดกัน horiz = width

บางเกมใช้ภาพพิกเซลสำหรับรูปหกเหลี่ยม ซึ่งไม่ตรงกับรูปหกเหลี่ยมที่ถูกต้องทุกประการ สูตรมุมและตำแหน่งที่อธิบายไว้ในส่วนนี้จะไม่ตรงกับขนาดของรูปหกเหลี่ยมดังกล่าว ส่วนที่เหลือของบทความที่อธิบายอัลกอริธึมตารางหกเหลี่ยมมีผลใช้แม้ว่ารูปหกเหลี่ยมจะยืดออกหรือบีบอัดเล็กน้อย



ระบบพิกัด

มาเริ่มประกอบรูปหกเหลี่ยมเป็นตารางกัน ในกรณีของตารางสี่เหลี่ยม มีวิธีเดียวที่ชัดเจนในการรวบรวม สำหรับรูปหกเหลี่ยม มีหลายวิธี ฉันแนะนำให้ใช้พิกัดลูกบาศก์เป็นตัวแทนหลัก พิกัดแกนหรือพิกัดออฟเซ็ตควรใช้ในการจัดเก็บแผนที่และแสดงพิกัดให้กับผู้ใช้

พิกัดออฟเซ็ต

แนวทางที่พบบ่อยที่สุดคือการชดเชยแต่ละคอลัมน์หรือแถวที่ต่อเนื่องกัน คอลัมน์แสดงด้วย col หรือ q แถวจะแสดงด้วยแถวหรือ r คุณสามารถชดเชยคอลัมน์/แถวคี่หรือคู่ได้ ดังนั้นรูปหกเหลี่ยมแนวนอนและแนวตั้งจึงมีสองตัวเลือก


การจัดเรียงแนวนอน "odd-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 เมื่อจำเป็น

แกน

พิกัดออฟเซ็ตเป็นสิ่งแรกที่คนส่วนใหญ่นึกถึง เพราะมันเหมือนกับพิกัดคาร์ทีเซียนมาตรฐานที่ใช้สำหรับตารางกริด น่าเสียดายที่หนึ่งในสองแกนต้องขัดกับเมล็ดพืช และทำให้สิ่งต่างๆ ซับซ้อนขึ้น ระบบคิวบิกและแนวแกน "อยู่บนขนแกะ" และมีมากกว่านั้น อัลกอริทึมอย่างง่ายแต่ที่เก็บข้อมูลการ์ดนั้นซับซ้อนกว่าเล็กน้อย มีระบบอื่นที่เรียกว่า "interleaved" หรือ "double" แต่เราจะไม่พิจารณาที่นี่ บางคนพบว่าใช้งานได้ง่ายกว่าลูกบาศก์หรือแนวแกน


พิกัดออฟเซ็ต ลูกบาศก์และแกน

แกนคือทิศทางที่เพิ่มพิกัดที่สอดคล้องกัน ตั้งฉากกับแกนคือเส้นที่พิกัดคงที่ แผนภาพตารางด้านบนแสดงเส้นตั้งฉาก

พิกัดแปลง

มีแนวโน้มที่คุณจะใช้พิกัดแนวแกนหรือออฟเซ็ตในโครงการของคุณ แต่อัลกอริธึมจำนวนมากจะแสดงได้ง่ายกว่าในพิกัดลูกบาศก์ ดังนั้นเราต้องสามารถแปลงพิกัดระหว่างระบบได้

พิกัดแกนสัมพันธ์อย่างใกล้ชิดกับพิกัดลูกบาศก์ ดังนั้นการแปลงจึงง่าย:

# แปลงพิกัดลูกบาศก์เป็นพิกัดแนวแกน q = x r = z # แปลงพิกัดแกนเป็นลูกบาศก์ x = q z = r y = -x-z
ในโค้ด ฟังก์ชันทั้งสองนี้สามารถเขียนได้ดังนี้:

ฟังก์ชัน cube_to_hex(h): # axial var q = hx var r = hz return Hex(q, r) ฟังก์ชัน hex_to_cube(h): # cube var x = hq var z = hr var y = -xz return Cube (x, y ,z)
พิกัดออฟเซ็ตค่อนข้างซับซ้อนกว่าเล็กน้อย:

รูปหกเหลี่ยมข้างเคียง

จากรูปหกเหลี่ยมหนึ่งรูป จะมีรูปหกเหลี่ยมอะไรอยู่ถัดจากรูปหกเหลี่ยมนี้ อย่างที่คุณคาดไว้ คำตอบนั้นง่ายที่สุดในพิกัดลูกบาศก์ ค่อนข้างง่ายในพิกัดแนวแกน และพิกัดออฟเซ็ตค่อนข้างยุ่งยาก คุณอาจต้องคำนวณหกเหลี่ยม "แนวทแยง" หกเหลี่ยม

พิกัดลูกบาศก์

การย้ายหนึ่งช่องว่างในพิกัดฐานสิบหกจะเปลี่ยนหนึ่งในสามของพิกัดลูกบาศก์โดย +1 และอีกอันหนึ่งเป็น -1 (ผลรวมจะต้องเป็น 0) พิกัดที่เป็นไปได้สามแบบสามารถเปลี่ยนแปลงได้ +1 และอีกสองพิกัดที่เหลือสามารถเปลี่ยนแปลงได้ -1 สิ่งนี้ทำให้เรามีการเปลี่ยนแปลงที่เป็นไปได้หกประการ แต่ละอันสอดคล้องกับทิศทางหนึ่งของรูปหกเหลี่ยม วิธีที่ง่ายและรวดเร็วที่สุดคือการคำนวณการเปลี่ยนแปลงล่วงหน้าและใส่ลงในตารางลูกบาศก์ (dx, dy, dz) ของพิกัดลูกบาศก์ ณ เวลารวบรวม:

ทิศทาง Var = [ 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, ทิศทาง): return cube_add(hex, cube_direction(direction))

พิกัดแกน

เมื่อก่อนเราใช้ระบบลูกบาศก์เริ่มต้น ลองใช้ตาราง Cube(dx, dy, dz) และแปลงเป็นตาราง Hex(dq, dr):

ทิศทาง Var = [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0, +1) ] ฟังก์ชัน hex_direction(ทิศทาง): ฟังก์ชันทิศทางกลับ hex_neighbor(ฐานสิบหก, ทิศทาง): var dir = hex_direction(ทิศทาง) ผลตอบแทน Hex(hex.q + dir.q, hex.r + dir.r)

พิกัดออฟเซ็ต

ในพิกัดแนวแกน เราทำการเปลี่ยนแปลงโดยขึ้นอยู่กับว่าเราอยู่ที่ไหนบนกริด หากเราอยู่ในคอลัมน์/แถวออฟเซ็ต กฎจะแตกต่างจากกรณีของคอลัมน์/แถวที่ไม่มีออฟเซ็ต

เช่นเคย เราสร้างตารางตัวเลขเพื่อเพิ่มใน col และ row อย่างไรก็ตาม คราวนี้เราจะมีสองอาร์เรย์ หนึ่งสำหรับคอลัมน์/แถวคี่และหนึ่งสำหรับอาร์เรย์ ดู (1,1) ในแผนที่กริดด้านบน และสังเกตว่าคอลัมน์และแถวเปลี่ยนไปอย่างไรเมื่อคุณเคลื่อนที่ในแต่ละทิศทางจากหกทิศทาง ทีนี้มาทำขั้นตอนซ้ำกัน (2,2) ตารางและรหัสจะแตกต่างกันสำหรับแต่ละ สี่ประเภทกริดดิสเพลสเมนต์ เราจัดเตรียมรหัสที่สอดคล้องกันสำหรับกริดแต่ละประเภท

คี่-r
var ทิศทาง = [ [ Hex(+1, 0), Hex(0, -1), Hex(-1, -1), Hex(-1, 0), Hex(-1, +1), Hex(0 , +1) ], [ เลขฐานสิบหก(+1, 0), เลขฐานสิบหก(+1, -1), เลขฐานสิบหก(0, -1), เลขฐานสิบหก(-1, 0), เลขฐานสิบหก(0, +1), เลขฐานสิบหก( +1, +1) ] ] ฟังก์ชั่น offset_neighbor(hex, ทิศทาง): var parity = hex.row & 1 var dir = ทิศทางส่งคืน Hex(hex.col + dir.col, hex.row + dir.row)


แม้แต่-r
var ทิศทาง = [ [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, 0), Hex(0, +1), Hex(+1) , +1) ], [ เลขฐานสิบหก(+1, 0), เลขฐานสิบหก(0, -1), เลขฐานสิบหก(-1, -1), เลขฐานสิบหก(-1, 0), เลขฐานสิบหก(-1, +1), เลขฐานสิบหก (0, +1) ] ] ฟังก์ชั่น offset_neighbor(hex, ทิศทาง): var parity = hex.row & 1 var dir = ทิศทางส่งคืน Hex(hex.col + dir.col, hex.row + dir.row)


ตารางสำหรับแถวคู่ (EVEN) และคี่ (ODD)

คี่-q
var ทิศทาง = [ [ Hex(+1, 0), Hex(+1, -1), Hex(0, -1), Hex(-1, -1), Hex(-1, 0), Hex(0 , +1) ], [ เลขฐานสิบหก(+1, +1), เลขฐานสิบหก(+1, 0), เลขฐานสิบหก(0, -1), เลขฐานสิบหก(-1, 0), เลขฐานสิบหก(-1, +1), เลขฐานสิบหก (0, +1) ] ] ฟังก์ชั่น offset_neighbor(hex, ทิศทาง): var parity = hex.col & 1 var dir = ทิศทางส่งคืน Hex(hex.col + dir.col, hex.row + dir.row)


คู่-q
var ทิศทาง = [ [ Hex(+1, +1), Hex(+1, 0), Hex(0, -1), Hex(-1, 0), Hex(-1, +1), Hex(0 , +1) ], [ เลขฐานสิบหก(+1, 0), เลขฐานสิบหก(+1, -1), เลขฐานสิบหก(0, -1), เลขฐานสิบหก(-1, -1), เลขฐานสิบหก(-1, 0), เลขฐานสิบหก (0, +1) ] ] ฟังก์ชั่น offset_neighbor(hex, ทิศทาง): var parity = hex.col & 1 var dir = ทิศทางส่งคืน Hex(hex.col + dir.col, hex.row + dir.row)


ตารางสำหรับคอลัมน์คู่ (EVEN) และคี่ (ODD)

เส้นทแยงมุม

การเคลื่อนตัวในช่องว่าง "แนวทแยง" ในพิกัดหกเหลี่ยมจะเปลี่ยนหนึ่งในสามของพิกัดลูกบาศก์เป็น ±2 และอีกสองพิกัดเป็น ∓1 (ผลรวมจะต้องเป็น 0)

เส้นทแยงมุม = [ 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, ทิศทาง): return cube_add(hex, diagonals)
เช่นเคย เราสามารถแปลงพิกัดเหล่านี้เป็นพิกัดแกนโดยวางหนึ่งในสามพิกัด หรือแปลงเป็นพิกัดออฟเซ็ตโดยการคำนวณผลลัพธ์ล่วงหน้า


ระยะทาง

พิกัดลูกบาศก์

ในระบบพิกัดลูกบาศก์ แต่ละรูปหกเหลี่ยมจะเป็นลูกบาศก์ในพื้นที่สามมิติ รูปหกเหลี่ยมที่อยู่ติดกันจะห่างกัน 1 ในตารางหกเหลี่ยม แต่ 2 รูปแยกกันในตารางลูกบาศก์ ทำให้การคำนวณระยะทางเป็นเรื่องง่าย ในตารางสี่เหลี่ยม ระยะทางแมนฮัตตันคือ abs(dx) + abs(dy) ในตารางลูกบาศก์ ระยะทางแมนฮัตตันคือ abs(dx) + abs(dy) + abs(dz) ระยะทางในตารางของรูปหกเหลี่ยมมีค่าเท่ากับครึ่งหนึ่ง:

ฟังก์ชัน cube_distance(a, b): return (abs(a.x - b.x) + abs(a.y - b.y) + abs(a.z - b.z)) / 2
ค่าที่เทียบเท่ากันของสัญลักษณ์นี้คือจะบอกว่าหนึ่งในสามพิกัดจะต้องเป็นผลรวมของอีกสองพิกัด จากนั้นจึงได้ระยะทาง คุณสามารถเลือกรูปแบบสองส่วนหรือรูปแบบค่าสูงสุดด้านล่าง แต่ให้ผลลัพธ์เหมือนกัน:

ฟังก์ชัน cube_distance(a, b): return max(abs(a.x - b.x), abs(a.y - b.y), abs(a.z - b.z))
ในรูป ค่าสูงสุดจะถูกเน้นด้วยสี สังเกตด้วยว่าแต่ละสีแสดงถึงหนึ่งในหกทิศทาง "แนวทแยง"

กิ๊ฟ


พิกัดแกน

ในระบบแกน พิกัดที่สามจะแสดงโดยปริยาย ลองแปลงจากแกนเป็นลูกบาศก์เพื่อคำนวณระยะทาง:

ฟังก์ชัน 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): return (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 และใช้รูปแบบค่าสูงสุดแทนรูปแบบ bisection cube_distance ทั้งหมดจะคล้ายกันหากคุณเห็นการเชื่อมต่อกับพิกัดลูกบาศก์

พิกัดออฟเซ็ต

เช่นเดียวกับพิกัดแนวแกน เราแปลงพิกัดออฟเซ็ตเป็นพิกัดลูกบาศก์แล้วใช้ระยะลูกบาศก์

ฟังก์ชั่น offset_distance (a, b): var ac = offset_to_cube (a) var bc = offset_to_cube (b) ส่งคืน cube_distance (ac, bc)
เราจะใช้รูปแบบเดียวกันสำหรับอัลกอริธึมจำนวนมาก: แปลงจากรูปหกเหลี่ยมเป็นลูกบาศก์ เรียกใช้อัลกอริทึมเวอร์ชันลูกบาศก์ และแปลงผลลัพธ์ที่เป็นลูกบาศก์เป็นพิกัดหกเหลี่ยม (พิกัดแนวแกนหรือพิกัดออฟเซ็ต)

การวาดเส้น

วิธีการวาดเส้นจากรูปหกเหลี่ยมหนึ่งไปยังอีกอันหนึ่ง? ฉันกำลังใช้การแก้ไขเชิงเส้นเพื่อวาดเส้น เส้นจะถูกสุ่มตัวอย่างอย่างสม่ำเสมอที่จุด N+1 และคำนวณจากตำแหน่งของตัวอย่างเหล่านี้หกเหลี่ยม

กิ๊ฟ


  1. ก่อนอื่นเราคำนวณ N ซึ่งจะเป็นระยะทางในรูปหกเหลี่ยมระหว่างจุดสิ้นสุด
  2. จากนั้นเราสุ่มตัวอย่าง N+1 จุดระหว่างจุด A และ B โดยใช้การประมาณค่าเชิงเส้น เรากำหนดว่าสำหรับค่า i จาก 0 ถึง N รวมถึงแต่ละจุดจะเป็น A + (B - A) * 1.0/N * ฉัน . ในรูป จุดควบคุมเหล่านี้จะแสดงเป็นสีน้ำเงิน ผลลัพธ์ที่ได้คือพิกัดจุดลอยตัว
  3. แปลงจุดควบคุมแต่ละจุด (ลอย) กลับเป็นรูปหกเหลี่ยม (int) อัลกอริทึมนี้เรียกว่า cube_round (ดูด้านล่าง)
เชื่อมต่อทุกอย่างเข้าด้วยกันเพื่อลากเส้นจาก A ถึง B:

ฟังก์ชัน lerp(a, b, t): // สำหรับ floats return a + (b - a) * t ฟังก์ชัน cube_lerp(a, b, t): // สำหรับรูปหกเหลี่ยมส่งคืน Cube(lerp(ax, bx, t) lerp(ay, by, t), lerp(az, bz, 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 จะเลื่อนไปด้านใดด้านหนึ่ง เส้นจะดูดีขึ้นหากเลื่อนไปในทิศทางเดียว ซึ่งสามารถทำได้โดยการเพิ่ม "epsilon" hex Cube(1e-6, 1e-6, -2e-6) ให้กับจุดปลายหนึ่งหรือทั้งสองจุดก่อนที่จะเริ่มการวนซ้ำ สิ่งนี้จะ "เขยิบ" เส้นไปในทิศทางเดียวเพื่อไม่ให้กระทบกับขอบ
  • อัลกอริธึมเส้น DDA ในตารางสี่เหลี่ยมเท่ากับ N ถึงระยะทางสูงสุดตามแต่ละแกน เราทำเช่นเดียวกันในพื้นที่ลูกบาศก์ซึ่งคล้ายกับระยะทางในตารางรูปหกเหลี่ยม
  • ฟังก์ชัน cube_lerp ควรส่งคืนคิวบ์ที่มีพิกัดลอย หากคุณกำลังเขียนโปรแกรมในภาษาที่พิมพ์แบบสแตติก คุณจะไม่สามารถใช้ชนิด Cube ได้ คุณสามารถกำหนดประเภท FloatCube แทน หรืออินไลน์ฟังก์ชัน (อินไลน์) ในโค้ดการวาดเส้นของคุณ หากคุณไม่ต้องการกำหนดประเภทอื่น
  • คุณสามารถปรับโค้ดให้เหมาะสมโดยอินไลน์ (inline) cube_lerp แล้วคำนวณ B.x-A.x , B.x-A.y และ 1.0/N นอกลูป การคูณสามารถแปลงเป็นการบวกซ้ำได้ ผลลัพธ์ที่ได้คือบางอย่างเหมือนกับอัลกอริธึมไลน์ DDA
  • ฉันใช้พิกัดแนวแกนหรือลูกบาศก์สำหรับการวาดเส้น แต่ถ้าคุณต้องการทำงานกับพิกัดออฟเซ็ต ลองดู
  • มีตัวเลือกมากมายสำหรับการวาดเส้น บางครั้งจำเป็นต้องมีการ "เคลือบทับ" ฉันได้รับรหัสสำหรับการวาดเส้นเคลือบเป็นหกเหลี่ยมแล้ว แต่ยังไม่ได้ตรวจสอบ

ช่วงการเดินทาง

ช่วงพิกัด

เมื่อกำหนดจุดศูนย์กลางหกเหลี่ยมและช่วง 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 = สำหรับแต่ละ -N ≤ dx ≤ N: สำหรับแต่ละ -N ≤ dy ≤ N: สำหรับแต่ละ -N ≤ dz ≤ N: ถ้า dx + dy + dz = 0: results.append(cube_add(center, Cube(dx) , ดี้, ดซ)))
วนรอบนี้จะใช้ได้ แต่จะค่อนข้างไม่มีประสิทธิภาพ จากค่าทั้งหมดของ 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( ศูนย์ Cube(dx, dy, dz)))
การวนซ้ำนี้ต้องผ่านพิกัดที่กำหนดเท่านั้น ในรูป แต่ละช่วงคือคู่ของเส้น แต่ละบรรทัดมีความไม่เท่ากัน เราใช้รูปหกเหลี่ยมทั้งหมดที่ตอบสนองความไม่เท่าเทียมกันหกประการ

กิ๊ฟ


ช่วงที่ทับซ้อนกัน

หากคุณต้องการค้นหารูปหกเหลี่ยมที่อยู่ในหลายช่วง คุณสามารถข้ามช่วงก่อนที่จะสร้างรายการรูปหกเหลี่ยม

เราสามารถแก้ไขปัญหานี้ได้จากมุมมองของพีชคณิตหรือเรขาคณิต ในเชิงพีชคณิต แต่ละพื้นที่แสดงเป็นเงื่อนไขอสมการของรูปแบบ -N ≤ dx ≤ N และเราจำเป็นต้องหาจุดตัดของเงื่อนไขเหล่านี้ ในเชิงเรขาคณิต แต่ละพื้นที่เป็นลูกบาศก์ในพื้นที่ 3 มิติ และเราจะตัดลูกบาศก์สองลูกบาศก์ในพื้นที่ 3 มิติ เพื่อให้ได้ลูกบาศก์ในพื้นที่ 3 มิติ จากนั้นเราฉายมันกลับไปที่ระนาบ 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 = สำหรับแต่ละ xmin ≤ x ≤ xmax: สำหรับแต่ละ max(ymin, -x-zmax) ≤ y ≤ min(ymax, -x-zmin): var z = -xy 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 และ ซี. รูปแบบเดียวกันนี้ใช้ได้กับจุดตัดของพื้นที่สามส่วนขึ้นไป

กิ๊ฟ


อุปสรรค

เมื่อมีสิ่งกีดขวาง เป็นการง่ายที่สุดที่จะเติมข้อจำกัดระยะทาง (การค้นหาแบบกว้างๆ) ในรูปด้านล่าง เราจำกัดตัวเองไว้ที่สี่การเคลื่อนไหว ในโค้ด fringe[k] คืออาร์เรย์ของรูปหกเหลี่ยมทั้งหมดที่สามารถเข้าถึงได้ใน k ขั้นตอน ในแต่ละรอบผ่านลูปหลัก เราขยายระดับ k-1 ตามระดับ k

ฟังก์ชัน cube_reachable(เริ่ม, การเคลื่อนไหว): var visit = set() เพิ่ม start to visit var fringe = 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(ศูนย์กลาง, รัศมี): var results = # รหัสนี้ใช้ไม่ได้กับรัศมี == 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(ศูนย์กลาง, รัศมี): var results = สำหรับแต่ละ 1 ≤ k ≤ รัศมี: ผลลัพธ์ = ผลลัพธ์ + cube_ring (กลาง, k) ส่งกลับผลลัพธ์



พื้นที่ของรูปหกเหลี่ยมขนาดใหญ่เท่ากับผลรวมของวงกลมทั้งหมดบวก 1 สำหรับจุดศูนย์กลาง ใช้สูตรนี้คำนวณพื้นที่

การข้ามรูปหกเหลี่ยมในลักษณะนี้ยังสามารถใช้ในการคำนวณช่วงของการเคลื่อนที่ได้ (ดูด้านบน)

พื้นที่การมองเห็น

สิ่งที่มองเห็นได้จากตำแหน่งที่กำหนดด้วยระยะทางที่กำหนดและไม่ถูกกีดขวางโดยสิ่งกีดขวาง? วิธีที่ง่ายที่สุดในการพิจารณาสิ่งนี้คือการลากเส้นไปยังรูปหกเหลี่ยมแต่ละอันภายในช่วงที่กำหนด หากเส้นไม่ตรงกับกำแพงคุณจะเห็นรูปหกเหลี่ยม เลื่อนเมาส์ไปเหนือรูปหกเหลี่ยม [ในแผนภาพในบทความต้นฉบับ] เพื่อดูเส้นที่ลากไปยังรูปหกเหลี่ยมเหล่านั้นและผนังที่เส้นตรง

อัลกอริธึมนี้อาจทำงานช้าในพื้นที่ขนาดใหญ่ แต่ง่ายต่อการใช้งาน ดังนั้นผมขอแนะนำให้เริ่มด้วย

กิ๊ฟ



มีคำจำกัดความของการมองเห็นที่แตกต่างกันมากมาย คุณต้องการดูจุดศูนย์กลางของรูปหกเหลี่ยมอื่นจากจุดศูนย์กลางของรูปหกเหลี่ยมเริ่มต้นหรือไม่? คุณต้องการดูส่วนใดของรูปหกเหลี่ยมอื่นจากจุดศูนย์กลางของอันแรกหรือไม่? อาจเป็นส่วนหนึ่งของรูปหกเหลี่ยมอื่นจากจุดเริ่มต้นใด ๆ สิ่งกีดขวางน้อยกว่ารูปหกเหลี่ยมเต็มหรือไม่? ขอบเขตเป็นแนวคิดที่ยุ่งยากและหลากหลายกว่าที่ตาเห็น เริ่มจากอัลกอริธึมที่ง่ายที่สุด แต่คาดว่าจะคำนวณคำตอบในโครงการของคุณอย่างถูกต้อง มีหลายกรณีที่อัลกอริธึมธรรมดาให้ผลลัพธ์ที่ไร้เหตุผล

ฉันต้องการขยายคู่มือนี้เพิ่มเติม ฉันมี

โครงสร้างทางเรขาคณิตเป็นส่วนสำคัญของการเรียนรู้ สิ่งเหล่านี้ก่อให้เกิดการคิดเชิงพื้นที่และเชิงตรรกะ และยังช่วยให้คุณเข้าใจความถูกต้องทางเรขาคณิตดั้งเดิมและเป็นธรรมชาติ การก่อสร้างถูกสร้างขึ้นบนเครื่องบินโดยใช้เข็มทิศและไม้บรรทัด ด้วยเครื่องมือเหล่านี้ สามารถสร้างได้จำนวนมาก รูปทรงเรขาคณิต. ในเวลาเดียวกัน ตัวเลขจำนวนมากที่ดูค่อนข้างยากถูกสร้างขึ้นโดยใช้กฎที่ง่ายที่สุด สมมติว่าวิธีสร้างรูปหกเหลี่ยมที่แท้จริงนั้นสามารถอธิบายแต่ละคำได้ไม่กี่คำ

คุณจะต้องการ

  • เข็มทิศ ไม้บรรทัด ดินสอ แผ่นกระดาษ

การเรียนการสอน

1. วาดวงกลม กำหนดระยะห่างระหว่างขาของเข็มทิศ ระยะนี้จะเป็นรัศมีของวงกลม เลือกรัศมีในลักษณะที่การวาดวงกลมค่อนข้างสบาย วงกลมจะต้องพอดีกับแผ่นกระดาษทั้งหมด ระยะห่างระหว่างขาของเข็มทิศมากเกินไปหรือเล็กเกินไปอาจนำไปสู่การเปลี่ยนแปลงในระหว่างการวาด ระยะห่างที่เหมาะสมที่สุดคือมุมระหว่างขาของเข็มทิศคือ 15-30 องศา

2. สร้างจุดยอดของมุมของรูปหกเหลี่ยมปกติ วางขาของเข็มทิศซึ่งเข็มถูกตรึงไว้ที่จุดใดก็ได้บนวงกลม เข็มควรเจาะเส้นที่ลาก ยิ่งตั้งเข็มทิศได้ถูกต้องมากเท่าไร โครงสร้างก็จะยิ่งถูกต้องมากขึ้นเท่านั้น วาดส่วนโค้งของวงกลมเพื่อให้ตัดกับวงกลมที่วาดไว้ก่อนหน้านี้ เลื่อนเข็มเข็มทิศไปที่จุดตัดของส่วนโค้งที่วาดไว้กับวงกลม วาดส่วนโค้งอื่นที่ตัดวงกลม เลื่อนเข็มเข็มทิศอีกครั้งไปยังจุดตัดของส่วนโค้งและวงกลม แล้ววาดส่วนโค้งอีกครั้ง ทำซ้ำการกระทำนี้อีกสามครั้งโดยเคลื่อนที่ไปในทิศทางเดียวกันรอบวงกลม แต่ละคนควรได้รับหกส่วนโค้งและหกจุดแยก

3. สร้างรูปหกเหลี่ยมบวก รวมจุดตัดของส่วนโค้งทั้งหกจุดแบบเป็นขั้นตอนกับวงกลมที่วาดไว้แต่แรก เชื่อมต่อจุดด้วยเส้นตรงที่วาดด้วยไม้บรรทัดและดินสอ หลังจากดำเนินการแล้ว จะได้รับรูปหกเหลี่ยมที่แท้จริงซึ่งถูกจารึกไว้ในวงกลม

หกเหลี่ยมรูปหลายเหลี่ยมถือว่ามีหกมุมและหกด้าน รูปหลายเหลี่ยมมีทั้งนูนและเว้า ในรูปหกเหลี่ยมนูน มุมภายในทั้งหมดเป็นมุมป้าน มุมเว้าอย่างน้อยหนึ่งมุมจะเป็นมุมแหลม รูปหกเหลี่ยมค่อนข้างง่ายในการสร้าง ทำได้ในสองสามขั้นตอน

คุณจะต้องการ

  • ดินสอ กระดาษ ไม้บรรทัด

การเรียนการสอน

1. นำกระดาษแผ่นหนึ่งมาทำเครื่องหมายไว้ 6 จุดโดยประมาณดังแสดงในรูปที่ หนึ่ง.

2. ต่อมา หลังจากที่ทำเครื่องหมายจุดแล้ว ไม้บรรทัด ดินสอก็ถูกหยิบขึ้นมา และด้วยความช่วยเหลือทีละขั้น จุดต่างๆ จะเชื่อมต่อกันดังที่แสดงในรูปที่ 2.

วิดีโอที่เกี่ยวข้อง

บันทึก!
ผลรวมของมุมภายในทั้งหมดของรูปหกเหลี่ยมคือ 720 องศา

หกเหลี่ยมเป็นรูปหลายเหลี่ยมซึ่งมีหกมุม ในการวาดรูปหกเหลี่ยมโดยพลการ คุณต้องทำ 2 ขั้นตอนแต่ละขั้น

คุณจะต้องการ

  • ดินสอ ไม้บรรทัด กระดาษ

การเรียนการสอน

1. คุณต้องใช้ดินสอในมือและทำเครื่องหมาย 6 จุดบนแผ่นงาน ในอนาคต จุดเหล่านี้จะเล่นบทบาทของมุมในรูปหกเหลี่ยม (รูปที่ 1)

2. ใช้ไม้บรรทัดแล้ววาด 6 ส่วนตามจุดเหล่านี้ซึ่งจะเชื่อมต่อกันที่จุดที่วาดไว้ก่อนหน้านี้ (รูปที่ 2)

วิดีโอที่เกี่ยวข้อง

บันทึก!
หกเหลี่ยมชนิดพิเศษคือรูปหกเหลี่ยมบวก มันถูกเรียกว่าเช่นนี้เพราะทุกด้านและมุมของมันเท่ากัน เป็นไปได้ที่จะอธิบายหรือจารึกวงกลมรอบรูปหกเหลี่ยมดังกล่าว เป็นที่น่าสังเกตว่า ณ จุดที่ได้จากการสัมผัสวงกลมที่จารึกไว้และด้านข้างของรูปหกเหลี่ยม ด้านข้างของรูปหกเหลี่ยมบวกจะถูกแบ่งครึ่ง

คำแนะนำที่เป็นประโยชน์
โดยธรรมชาติแล้ว รูปหกเหลี่ยมที่เป็นบวกนั้นเป็นที่นิยมอย่างมาก ตัวอย่างเช่น รังผึ้งทั้งหมดมีรูปร่างเป็นหกเหลี่ยมเป็นบวก หรือผลึกขัดแตะของกราฟีน (การดัดแปลงของคาร์บอน) ก็มีรูปร่างเป็นหกเหลี่ยมบวกเช่นกัน

วิธีการเลี้ยงอย่างใดอย่างหนึ่ง ฉีดเป็นคำถามใหญ่ แต่สำหรับบางมุม งานจะง่ายขึ้นอย่างเห็นได้ชัด มุมหนึ่งเหล่านี้คือ ฉีดที่อุณหภูมิ 30 องศา เท่ากับ? / 6 นั่นคือ เลข 30 เป็นตัวหาร 180 บวก รู้จักไซน์ของมัน ซึ่งช่วยในการก่อสร้าง

คุณจะต้องการ

  • ไม้โปรแทรกเตอร์, สี่เหลี่ยม, วงเวียน, ไม้บรรทัด

การเรียนการสอน

1. เริ่มต้นด้วยการพิจารณาการตั้งค่าดั้งเดิมโดยเฉพาะเมื่อคุณมีไม้โปรแทรกเตอร์ในมือของคุณ จากนั้นคุณสามารถเลื่อนเส้นตรงที่ทำมุม 30 องศากับเส้นนี้ได้อย่างง่ายดายโดยรองรับ

2. นอกจากไม้โปรแทรกเตอร์แล้ว ยังมี ฉีดมุมหนึ่งในมุมที่มีขนาดเท่ากับ 30 องศา แล้วอีกอย่าง ฉีด ฉีดมุมจะเท่ากับ 60 องศา นั่นคือคุณต้องมีสายตาที่เล็กลง ฉีดเพื่อสร้างเส้นที่ต้องการ

3. ตอนนี้ มาดูวิธีที่ไม่ซับซ้อนในการสร้างมุม 30 องศากัน อย่างที่คุณทราบ ไซน์ของมุม 30 องศาคือ 1/2 ในการสร้างเราต้องสร้างให้ตรง ฉีด th ตรี ฉีดนิก บางทีเราอาจสร้างเส้นตั้งฉากสองเส้นได้ แต่แทนเจนต์ของ 30 องศาเป็นจำนวนอตรรกยะ เราจึงคำนวณได้เฉพาะอัตราส่วนระหว่างขาโดยประมาณเท่านั้น (เฉพาะในกรณีที่ไม่มีเครื่องคิดเลข) ดังนั้นจึงสร้าง ฉีดประมาณ 30 องศา

4. ในกรณีนี้ก็สามารถสร้างโครงสร้างที่แน่นอนได้เช่นกัน เราจะยกเส้นตั้งฉากสองเส้นอีกครั้งซึ่งขาจะตั้งอยู่โดยตรง ฉีดทรี ฉีดนิกา ให้เราแยกขาตรงข้างหนึ่ง BC ที่มีความยาวบางส่วนโดยรองรับเข็มทิศ (B คือเส้นตรง ฉีด). หลังจากนั้นเราจะเพิ่มความยาวระหว่างขาของเข็มทิศขึ้น 2 เท่า ซึ่งเป็นระดับพื้นฐาน การวาดวงกลมที่มีศูนย์กลางที่จุด C ด้วยรัศมีความยาวนี้ เราจะพบจุดตัดของวงกลมด้วยเส้นตรงอีกเส้น จุดนี้จะเป็นจุด A ตรง ฉีดทรี ฉีดเอบีซีและ ฉีด A จะเท่ากับ 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. เลือกความยาวของด้านของรูปหกเหลี่ยม ใช้เข็มทิศและกำหนดระยะห่างระหว่างปลายเข็มซึ่งอยู่บนขาข้างหนึ่งและปลายปากกาซึ่งอยู่ที่ขาอีกข้างหนึ่ง เท่ากับความยาวของด้านข้างของรูปที่วาด ในการทำเช่นนี้ คุณสามารถใช้ไม้บรรทัดหรือเลือกระยะทางแบบสุ่ม if ช่วงเวลานี้ไม่มีนัยสำคัญ แก้ไขขาเข็มทิศด้วยสกรู ถ้าเป็นไปได้

2. วาดวงกลมด้วยเข็มทิศ ระยะห่างที่เลือกระหว่างขาจะเป็นรัศมีของวงกลม

3. แบ่งวงกลมที่มีจุดเป็นหกส่วนเท่าๆ กัน จุดเหล่านี้จะเป็นจุดยอดของมุมของรูปหกเหลี่ยมและดังนั้น จุดสิ้นสุดของส่วนที่เป็นตัวแทนของด้านข้าง

4. วางขาของเข็มทิศด้วยเข็มไปที่จุดใดก็ได้ที่อยู่บนเส้นของวงกลมที่ร่างไว้ เข็มควรเจาะเส้นให้ถูกต้อง ความแม่นยำของโครงสร้างโดยตรงขึ้นอยู่กับความแม่นยำของการติดตั้งเข็มทิศ วาดส่วนโค้งด้วยเข็มทิศเพื่อให้มันตัดกันที่ 2 จุดที่วงกลมวาดก่อน

5. ย้ายขาของเข็มทิศด้วยเข็มไปยังจุดตัดของส่วนโค้งที่วาดด้วยวงกลมเดิม วาดส่วนโค้งอื่นที่ตัดวงกลมเป็น 2 จุดด้วย (จุดใดจุดหนึ่งจะตรงกับตำแหน่งก่อนหน้าของเข็มทิศ)

6. ในทำนองเดียวกัน ให้จัดเรียงเข็มเข็มทิศใหม่และวาดส่วนโค้งอีกสี่ครั้ง ขยับขาของเข็มทิศโดยให้เข็มไปในทิศทางเดียวรอบๆ เส้นรอบวง (ตามเข็มนาฬิกาหรือทวนเข็มนาฬิกาอย่างสม่ำเสมอ) เป็นผลให้ต้องระบุจุดตัดหกจุดของส่วนโค้งที่มีวงกลมที่สร้างขึ้นในขั้นต้น

7. วาดรูปหกเหลี่ยมบวก. เป็นคู่ ๆ รวมหกจุดที่ได้รับในขั้นตอนก่อนหน้ากับกลุ่ม วาดส่วนของเส้นด้วยดินสอและไม้บรรทัด ผลลัพธ์จะเป็นรูปหกเหลี่ยมจริง ต่อมาการดำเนินการก่อสร้างจะได้รับอนุญาตให้ลบองค์ประกอบเสริม (ส่วนโค้งและวงกลม)

บันทึก!
การเลือกระยะห่างระหว่างขาของเข็มทิศนั้นสมเหตุสมผลแล้ว ดังนั้นมุมระหว่างพวกมันจะเท่ากับ 15-30 องศา ในทางกลับกัน เมื่อสร้างอาคาร ระยะนี้อาจหลงทางได้ง่าย

เมื่อสร้างหรือพัฒนาแบบแปลนบ้าน มักจะต้องสร้าง ฉีดเท่ากับที่มีอยู่ ตัวอย่างและทักษะทางเรขาคณิตของโรงเรียนมาสนับสนุน

การเรียนการสอน

1. มุมเกิดจากเส้นตรงสองเส้นที่ออกมาจากจุดเดียวกัน จุดนี้จะเรียกว่าจุดยอดของมุม และเส้นจะเป็นด้านข้างของมุม

2. ใช้ตัวอักษรสามตัวกำหนดมุม: หนึ่งตัวที่ด้านบน สองตัวที่ด้านข้าง เรียกว่า ฉีดโดยขึ้นต้นด้วยตัวอักษรที่อยู่ด้านใดด้านหนึ่งแล้วเรียกตัวอักษรที่ยืนอยู่ด้านบนและหลังจากนั้นเรียกว่าตัวอักษรที่อยู่อีกด้านหนึ่ง ใช้วิธีการอื่นเพื่อทำเครื่องหมายมุมถ้าคุณสะดวกกว่าตรงข้าม ในบางครั้งมีการเรียกตัวอักษรเพียงตัวเดียวซึ่งอยู่ด้านบนสุด และอนุญาตให้กำหนดมุมด้วยตัวอักษรกรีกเช่น α, β, γ

3. มีบางสถานการณ์ที่คุณต้องวาด ฉีดให้เท่ากับมุมที่กำหนด หากไม่มีความน่าจะเป็นที่จะใช้ไม้โปรแทรกเตอร์ในการสร้างภาพวาด จะได้รับอนุญาตให้ทำด้วยไม้บรรทัดและเข็มทิศเท่านั้น เป็นไปได้บนเส้นตรงที่ระบุในภาพวาดด้วยตัวอักษร MN จำเป็นต้องสร้าง ฉีดที่จุด K เพื่อให้เท่ากับมุม B นั่นคือจากจุด K คุณต้องวาดเส้นตรงที่สร้างด้วยเส้น MN ฉีด, อันที่จะเท่ากับมุม B.

4. ขั้นแรก ทำเครื่องหมายจุดที่ทั้งด้านของมุมนี้ เช่น จุด A และ C จากนั้นรวมจุด C และ A ด้วยเส้นตรง รับ tre ฉีดนิค เอบีซี

5. ตอนนี้สร้างบนบรรทัด MN เดียวกันสาม ฉีดเพื่อให้จุดยอด B อยู่บนเส้นตรงที่จุด K ใช้กฎสำหรับสร้างสามเหลี่ยม ฉีดนิกาทั้งสามด้าน กันส่วน KL จากจุด K ต้องเท่ากับส่วน BC รับคะแนน L

6. จากจุด K ให้วาดวงกลมที่มีรัศมีเท่ากับส่วน BA จาก L วาดวงกลมที่มีรัศมี CA รวมจุดผลลัพธ์ (P) ของจุดตัดของวงกลม 2 วงกับ K รับ tri ฉีด nick KPL ตัวที่จะเท่ากับ tre ฉีดนิกุ เอบีซี ดังนั้นคุณจะได้รับ ฉีด K มันจะเท่ากับมุม B เพื่อให้โครงสร้างนี้สะดวกและเร็วขึ้น ให้แยกส่วนที่เท่ากันจากจุดยอด B โดยใช้เข็มทิศเดียวโดยไม่ต้องขยับขา อธิบายวงกลมที่มีรัศมีเดียวกันจากจุด K

วิดีโอที่เกี่ยวข้อง

บันทึก!
หลีกเลี่ยงการเปลี่ยนแปลงระยะห่างระหว่างขาของเข็มทิศโดยไม่ได้ตั้งใจ ในกรณีนี้ รูปหกเหลี่ยมอาจกลายเป็นค่าที่ไม่ถูกต้อง

คำแนะนำที่เป็นประโยชน์
การสร้างโครงสร้างด้วยเข็มทิศที่มีสไตลัสที่แหลมขึ้นทำให้รู้สึกเหมาะสม ดังนั้นโครงสร้างจะมีความแม่นยำเป็นพิเศษ

มีดินสออยู่ใกล้คุณหรือไม่? ดูส่วนต่างๆ ของมัน - เป็นรูปหกเหลี่ยมปกติหรือที่เรียกว่ารูปหกเหลี่ยม ภาพตัดขวางของถั่ว สนามหมากรุกหกเหลี่ยม โมเลกุลคาร์บอนที่ซับซ้อน (เช่น กราไฟต์) เกล็ดหิมะ รังผึ้ง และวัตถุอื่นๆ ก็มีรูปร่างแบบนี้เช่นกัน เมื่อเร็วๆ นี้ได้มีการค้นพบรูปหกเหลี่ยมขนาดมหึมา ดูเหมือนแปลกที่ธรรมชาติมักใช้โครงสร้างของรูปทรงเฉพาะนี้ในการสร้างสรรค์หรือไม่? มาดูกันดีกว่า

รูปหกเหลี่ยมปกติคือรูปหลายเหลี่ยมที่มีด้านเท่ากันหกด้านและมีมุมเท่ากัน จากหลักสูตรของโรงเรียนเรารู้ว่ามีคุณสมบัติดังต่อไปนี้:

  • ความยาวของด้านสอดคล้องกับรัศมีของวงกลมที่ล้อมรอบ เหนือสิ่งอื่นใด มีเพียงรูปหกเหลี่ยมปกติเท่านั้นที่มีคุณสมบัตินี้
  • มุมเท่ากันและขนาดของแต่ละมุมคือ 120 °
  • เส้นรอบวงของรูปหกเหลี่ยมสามารถหาได้โดยใช้สูตร Р=6*R ถ้ารู้รัศมีของวงกลมที่ล้อมรอบมัน หรือ Р=4*√(3)*r ถ้าวงกลมถูกจารึกไว้ R และ r คือรัศมีของวงกลมที่ล้อมรอบและจารึกไว้
  • พื้นที่ที่ถูกครอบครองโดยรูปหกเหลี่ยมปกติถูกกำหนดดังนี้: S=(3*√(3)*R 2)/2. หากไม่ทราบรัศมี เราจะแทนที่ความยาวของด้านใดด้านหนึ่งแทน - อย่างที่คุณทราบ มันสอดคล้องกับความยาวของรัศมีของวงกลมที่ล้อมรอบ

รูปหกเหลี่ยมปกติมีคุณสมบัติที่น่าสนใจประการหนึ่ง เนื่องจากมีลักษณะที่แพร่หลายมาก - สามารถเติมพื้นผิวใดๆ ของระนาบได้โดยไม่มีการทับซ้อนกันและช่องว่าง แม้จะมีสิ่งที่เรียกว่า Pal lemma ตามที่รูปหกเหลี่ยมปกติที่มีด้านเท่ากับ 1/√(3) เป็นยางอเนกประสงค์ กล่าวคือ มันสามารถครอบคลุมชุดใดก็ได้ที่มีเส้นผ่านศูนย์กลางหนึ่งหน่วย

ตอนนี้ให้พิจารณาการสร้างรูปหกเหลี่ยมปกติ มีหลายวิธี วิธีที่ง่ายที่สุดเกี่ยวข้องกับการใช้เข็มทิศ ดินสอ และไม้บรรทัด ขั้นแรก เราวาดวงกลมตามอำเภอใจด้วยเข็มทิศ จากนั้นจึงกำหนดจุดในวงกลมนี้ตามอำเภอใจ โดยไม่ต้องเปลี่ยนคำตอบของเข็มทิศ เราใส่ปลายที่จุดนี้ ทำเครื่องหมายรอยถัดไปบนวงกลม และดำเนินการต่อไปจนกว่าจะได้ครบ 6 คะแนน ตอนนี้ยังคงเป็นเพียงการเชื่อมต่อกันด้วยส่วนตรงและตัวเลขที่ต้องการจะปรากฏขึ้น

ในทางปฏิบัติ มีบางครั้งที่คุณต้องวาดรูปหกเหลี่ยมขนาดใหญ่ ตัวอย่างเช่น บนเพดานยิปซั่มบอร์ดสองระดับ รอบจุดยึดของโคมระย้ากลาง คุณต้องติดตั้งโคมไฟขนาดเล็กหกดวงที่ระดับล่าง มันจะยากมากที่จะหาเข็มทิศขนาดนี้ จะดำเนินการอย่างไรในกรณีนี้? คุณจะวาดวงกลมใหญ่ได้อย่างไร? ง่ายมาก. คุณต้องใช้ด้ายที่มีความยาวตามต้องการแล้วมัดปลายด้านหนึ่งตรงข้ามกับดินสอ ตอนนี้เหลือเพียงการหาผู้ช่วยที่จะกดปลายด้ายที่สองขึ้นไปบนเพดานที่จุดที่ถูกต้อง แน่นอน ในกรณีนี้ อาจเกิดข้อผิดพลาดเล็กน้อย แต่ไม่น่าจะสังเกตเห็นได้โดยบุคคลภายนอกเลย



กระทู้ที่คล้ายกัน