3
ฉันจะรักษารูปแบบสี่เหลี่ยมเมื่อเพิ่มหรือลบหน่วยได้อย่างไร
ฉันมีบ็อตในรูปแบบสี่เหลี่ยมผืนผ้าที่มีแถวและคอลัมน์ ปัญหาเกิดขึ้นเมื่อบอทถูกเพิ่มหรือลบออกจากการสร้าง เมื่อสิ่งนี้เกิดขึ้นบอตจะต้องจัดเรียงตัวเองใหม่เพื่อให้การก่อตัวของรูปสี่เหลี่ยมผืนผ้ายังคงอยู่ในอัตราส่วนเดียวกันโดยประมาณและเป็นรูปสี่เหลี่ยมเท่าที่จะทำได้ ทำอย่างไร ความคิดบางอย่าง: เมื่อบอตถูกเพิ่มหรือลบให้ใช้จำนวนบอทใหม่ทั้งหมดและอัตราส่วนภาพคงที่ที่ต้องการเพื่อคำนวณความกว้างและความสูงใหม่ของการก่อตัวที่ใกล้เคียงที่สุดกับอัตราส่วนภาพนั้น จากนั้นจึงสลับสับเปลี่ยนบ็อตให้พอดีกับมิติใหม่ เมื่อบอทถูกลบออกให้ย้ายบอทที่อยู่ด้านหลังเข้าไปในที่ของมันและทำต่อไปจนกว่าจะถึงจุดสิ้นสุดของการก่อตัว จากนั้นให้ทำการจัดอันดับย้อนหลังให้มากที่สุดเท่าที่จะทำได้โดยการสับบอทในอันดับหลัง ความคิดที่แตกต่างอย่างสิ้นเชิงคือการเลียนแบบโครงสร้างของโมเลกุลที่อยู่ร่วมกัน ทำให้บอททุกคนต้องการล้อมรอบด้วยบ็อตอีกสี่ตัวด้วยการดึงดูดบอทที่อยู่ใกล้ที่สุดทั้งสี่และป้องกันส่วนที่เหลือ ขับไล่บ็อตทั้งหมด (รวมถึงสี่) ที่อยู่ใกล้เกินไปเพื่อให้แน่ใจว่าแยกโดยใช้กฎหมายกำลังสองผกผัน คุณต้องการแรงเพิ่มเติมในการสร้างรูปร่างของโครงสร้างทั้งหมด แต่มันฟังดูแพงมาก UPDATE : ดังนั้นเมื่อพิจารณาถึงคำตอบของซาร่าห์ฉันจึงมีฟังก์ชั่นทั่วไปที่ดีซึ่งให้มิติที่ดี แรกฉันแก้ไขสมการด้านล่างพร้อมกันสำหรับความกว้างและความสูงแล้วปัดคำตอบ width/height=aspect ratio of your choice width*height=number of bots สิ่งนี้จะช่วยให้คุณได้สัดส่วนจำนวนเต็มที่ใกล้เคียงที่สุดกับอัตราส่วนนั้นสำหรับจำนวนบอทของคุณ สี่เหลี่ยมจัตุรัสที่ใกล้เคียงที่สุดจะครึ่งหนึ่งมีขนาดใหญ่เกินไปและครึ่งเวลาเล็กเกินไป (แน่นอนว่าบางครั้งมันอาจจะถูกต้อง แต่ใครสนใจพวกนั้น) ในกรณีที่รูปสี่เหลี่ยมผืนผ้ามีขนาดใหญ่เกินไปเล็กน้อยไม่จำเป็นต้องทำสิ่งใด อันดับหลังจะจบลงด้วยการเกือบเต็มซึ่งเป็นอุดมคติ ในกรณีที่สี่เหลี่ยมผืนผ้าเป็นเล็ก ๆ น้อย ๆที่มีขนาดเล็กเกินไปคุณมีปัญหาเพราะที่เล็กล้นขนาดเล็กจะต้องไปในการจัดอันดับของตัวเองสร้างขึ้นตำแหน่งที่มีเพียงไม่กี่บอทกับมันซึ่งไม่ได้ดูสวย นอกจากนี้ยังมีกรณีที่ความแตกต่างมีขนาดใหญ่(ใหญ่กว่าความกว้างครึ่งหนึ่ง) ซึ่งในกรณีนี้จะเพิ่มหรือลบอันดับหนึ่งเพื่อสร้างความแตกต่างเล็ก ๆ จากนั้นเมื่อสี่เหลี่ยมผืนผ้าเล็กเกินไปให้เพิ่มหนึ่งคอลัมน์เพื่อทำให้ใหญ่ขึ้นอีกหน่อย หลังจากทำแล้วดูเหมือนว่าอันดับหลังจะมีอย่างน้อยครึ่งบอทมากพอ ๆ กับอันดับอื่น ๆ UPDATE เมื่อคุณได้มิติแล้วให้เปรียบเทียบกับมิติปัจจุบัน หากด้านหน้าของมิติใหม่ใหญ่กว่าสำหรับทุก ๆ …