ฉันกำลังสร้างเกม 2d สำหรับเว็บไซต์ที่มีขนาดใหญ่มาก (โดยทั่วไปมีขนาดใหญ่มาก) เริ่มแรกจักรวาลประกอบด้วยดาว 6 ดวงที่อยู่ห่างจากจุดกำเนิดเท่ากัน (0, 0) งานของฉันคือการสร้างดาวให้มากขึ้นซึ่งจะมี "เส้นทาง" (ขอบ) ที่เชื่อมต่อซึ่งกันและกัน ฉันจะออกแบบอัลกอริทึมที่ตรงตามข้อ จำกัด เหล่านี้ได้อย่างไร:
- ดวงดาวถูกสร้างแบบสุ่มออกไปด้านนอก (เช่น (x, y) พิกัดสำหรับดาวดวงใหม่จะค่อยๆออกไปด้านนอกจาก (0, 0) ในทุกทิศทางโดยเฉพาะในรูปแบบเกลียว
- ขอบจะไม่ข้าม
- แม้ว่าจะมีความแตกต่างบ้าง แต่ดาวดวงใหม่ไม่ควรอยู่ไกลหรืออยู่ใกล้ดาวดวงอื่นมากเกินไป (เช่นต้องมีรัศมีต่ำสุด)
- ไม่มีดาว / จุดควรมีหลายหลากมากกว่า 3
- ระบุว่าทั้งหมดนี้จะถูกเก็บไว้ในฐานข้อมูลอัลกอริทึมไม่สามารถมีราคาแพงเกินไป กล่าวอีกนัยหนึ่งฉันชอบที่จะได้รับสิ่งที่ซับซ้อน O (n) (ฉันไม่รู้ว่าสิ่งนี้เป็นไปได้หรือไม่)
โดยพื้นฐานแล้วสิ่งที่ฉันกำลังมองหาคือกาแลคซีที่มีลักษณะเป็นดาวหางโดยที่ดวงดาวเป็นจุดบนกราฟและการเดินทางระหว่างดวงดาวจะถูกแสดงด้วยขอบระหว่างดาวเหล่านั้น
ขั้นตอนเฉพาะที่ฉันต้องแก้ไขคือ:
- สร้างจุดในบริเวณใกล้เคียงกับดวงดาวอื่นที่ยังไม่ได้เป็น 3 เท่า
- ค้นหาดาวดวงแรกที่ยังไม่มีพหุคูณเท่ากับ 3 ซึ่งจะไม่สร้างความขัดแย้งให้กับขอบ
- หากดาวอยู่ห่างจากหน่วย x อย่างน้อยที่สุดให้สร้างขอบระหว่างจุดสองจุด
ฉันพยายามหาวิธีแก้ปัญหา แต่ทักษะคณิตศาสตร์ของฉัน (และความรู้เกี่ยวกับทฤษฎีกราฟ) ต้องการงานจำนวนมาก นอกจากนี้ทรัพยากรใด ๆ / ลิงค์ในเรื่องนี้จะได้รับการชื่นชมอย่างมาก
นี่คือรหัสหลอกที่ฉันคิดถึง แต่ฉันไม่แน่ใจว่ามันจะใช้ได้หรือไม่และฉันมั่นใจว่ามันจะทำงานได้ไม่ดีนักหลังจากดาวฤกษ์ 10,000 ดวงและอื่น ๆ
newStar = randomly generated (x, y) within radius of last star from origin
while(newStar has not been connected):
for (star in the known universe):
if(distance between newStar and star > x units):
if(star has < 3 multiplicity):
if(path from newStar to star does not intersect another path):
connect the star to the other star
break;
newStar = new random (x, y) coordinate
นอกจากนี้หากใครมีคำแนะนำเกี่ยวกับวิธีการที่ฉันควรเก็บไว้ในฐานข้อมูล MySQL ฉันก็จะขอบคุณที่
สุดท้ายในกรณีที่ไม่มีเหตุผลใดที่เหมาะสมฉันได้รวมภาพของสิ่งที่ฉันต้องการให้บรรลุด้านล่าง: