ฉันเพิ่งโพสต์ไลบรารีของ hex-grid utilites บน CodePlex.com ที่นี่:
https://hexgridutilities.codeplex.com/
ห้องสมุดมีการค้นหาเส้นทาง (ใช้ A- * a la Eric Lippert) และรวมถึงประโยชน์สำหรับการแปลงอัตโนมัติระหว่าง jagged (ผู้ใช้ที่เรียกว่า) ลูกน้องและพิกัดที่ไม่ใช่ jagged (เรียกว่า Canonical) อัลกอริธึมการค้นพบพา ธ ทำให้ต้นทุนขั้นตอนสำหรับแต่ละโหนดแตกต่างกันทั้งในรายการฐานสิบหกและด้านฐานสิบหกที่ผ่านการสำรวจ (แม้ว่าตัวอย่างที่มีให้นั้นง่ายกว่า) นอกจากนี้ยังมีการจัดมุมมองแบบยกระดับโดยใช้การคัดเลือกภาพเงา [แก้ไข: ลบคำ]
นี่คือตัวอย่างโค้ดที่แปลงได้อย่างง่ายดายระหว่างระบบพิกัด hex-grid สามระบบ:
static readonly IntMatrix2D MatrixUserToCanon = new IntMatrix2D(2,1, 0,2, 0,0, 2);
IntVector2D VectorCanon {
get { return !isCanonNull ? vectorCanon : VectorUser * MatrixUserToCanon / 2; }
set { vectorCanon = value; isUserNull = isCustomNull = true; }
} IntVector2D vectorCanon;
bool isCanonNull;
static readonly IntMatrix2D MatrixCanonToUser = new IntMatrix2D(2,-1, 0,2, 0,1, 2);
IntVector2D VectorUser {
get { return !isUserNull ? vectorUser
: !isCanonNull ? VectorCanon * MatrixCanonToUser / 2
: VectorCustom * MatrixCustomToUser / 2; }
set { vectorUser = value; isCustomNull = isCanonNull = true; }
} IntVector2D vectorUser;
bool isUserNull;
static IntMatrix2D MatrixCustomToUser = new IntMatrix2D(2,0, 0,-2, 0,(2*Height)-1, 2);
static IntMatrix2D MatrixUserToCustom = new IntMatrix2D(2,0, 0,-2, 0,(2*Height)-1, 2);
IntVector2D VectorCustom {
get { return !isCustomNull ? vectorCustom : VectorUser * MatrixUserToCustom / 2; }
set { vectorCustom = value; isCanonNull = isUserNull = true; }
} IntVector2D vectorCustom;
bool isCustomNull;
IntMatrix2D และ IntVector2D คือการใช้งานจำนวนเต็ม [เหมือนกัน: homogeneous] ของ affine2D กราฟิกเวกเตอร์และเมทริกซ์ การหารสุดท้ายด้วย 2 บนแอปพลิเคชันเวกเตอร์คือการทำให้เวกเตอร์เป็นปกติอีกครั้ง สิ่งนี้อาจถูกฝังอยู่ในการใช้งาน IntMatrix2D แต่เหตุผลที่อาร์กิวเมนต์ที่ 7 สำหรับตัวสร้าง IntMatrix2D นั้นไม่ชัดเจน สังเกตการรวมกันของการแคชและการประเมินผลที่ขี้เกียจของสูตรที่ไม่หมุนเวียน
เมทริกซ์เหล่านี้ใช้สำหรับกรณี:
- Hex Hex แนวตั้ง;
- แหล่งกำเนิดในมุมบนซ้ายสำหรับพิกัด Canonical & ผู้ใช้, ซ้ายล่างสำหรับพิกัดที่กำหนดเอง;
- แกน Y ในแนวตั้งลง
- แกน X เป็นรูปสี่เหลี่ยมผืนผ้าตามแนวนอน และ
- Canonical X-axis ไปทางตะวันออกเฉียงเหนือ (เช่นขึ้นและไปทางขวาที่ 120 องศา CCW จากแกน Y)
รหัสห้องสมุดที่กล่าวถึงข้างต้นมีกลไกที่สง่างามเหมือนกันสำหรับการหยิบ hex (เช่นการระบุเลขฐานสิบหกที่เลือกด้วยการคลิกเมาส์)
ในพิกัดของ Canonical พิกัด 6 ทิศทางของเวกเตอร์คือ (1,0), (0,1), (1,1) และค่า inverses ของพวกมันสำหรับรูปหกเหลี่ยมทั้งหมดโดยไม่ต้องมีสมมาตรของ coordintes ขรุขระ