แจกจ่ายวัตถุในคิวบ์เพื่อให้พวกเขามีระยะห่างสูงสุดระหว่างกัน


11

ฉันพยายามใช้กล้องสีเพื่อติดตามวัตถุหลายรายการในอวกาศ วัตถุแต่ละชิ้นจะมีสีแตกต่างกันและเพื่อให้สามารถแยกแยะความแตกต่างได้ดีระหว่างวัตถุแต่ละชิ้นที่ฉันพยายามทำให้แน่ใจว่าแต่ละสีที่กำหนดให้กับวัตถุนั้นแตกต่างจากสีใด ๆ ในวัตถุอื่น ๆ เท่าที่จะทำได้

ในพื้นที่ RGB เรามีสามระนาบทั้งหมดมีค่าระหว่าง 0 ถึง 255 ในคิวบ์นี้ฉันต้องการกระจายสีnเพื่อให้มีมาก ระยะห่างระหว่างตัวเองกับคนอื่นมากที่สุด ข้อ จำกัด เพิ่มเติมคือควรรวม( 0 , 0 , 0 )และ( 255 , 255 , 255 ) (หรือใกล้เคียงกับพวกเขาให้มากที่สุด) ในn(0,0,0)/(255,255,255)n(0,0,0)(255,255,255)nสีเพราะฉันต้องการให้แน่ใจว่าไม่มีวัตถุใด ๆของฉันที่ใช้สีใดสีหนึ่งเนื่องจากพื้นหลังอาจเป็นหนึ่งในสีเหล่านี้(n2)

อาจเป็นไปได้ว่า (รวมถึงสีดำและในขณะที่) จะไม่เกินประมาณ 14n

ขอบคุณล่วงหน้าสำหรับคำแนะนำใด ๆ เกี่ยวกับวิธีการรับสีเหล่านี้


2
ฉันคิดว่าคุณควรพิจารณาพื้นที่สองมิติเท่านั้นเนื่องจากกล้องของคุณอาจไม่สามารถแยกแยะวัตถุที่มีสีเดียวกัน แต่มีความเข้มต่างกัน ปัญหานี้น่าสนใจ
Stéphane Gimenez

สามมิติมาจากระนาบสีสามสีคือสีแดงสีเขียวและสีน้ำเงินโดยแต่ละค่าสามารถรับอิสระได้ตั้งแต่ 0-255 ในพื้นที่ RGB ฉันไม่คิดว่าจะมีความรุนแรง มีช่องว่างสีอื่น ๆ ซึ่งอาจเหมาะสมกว่าสำหรับเรื่องนี้เนื่องจากพวกเขาอาจเป็น 2D เท่านั้นแม้ว่าฉันจะไม่ได้รู้อะไรเกี่ยวกับพวกเขามากนัก
แมตต์

หากคุณสามารถควบคุมปริมาณแสงที่ถูกหล่อบนวัตถุได้อย่างแม่นยำตกลง ในพื้นที่ RGB (100, 100, 100) และ (200, 200, 200) เป็นสิ่งที่ฉันเรียกว่าสีเดียวกัน (สีเทา) ที่มีความเข้มต่างกัน
Stéphane Gimenez

@ แมทสเตฟานดูเหมือนจะแนะนำว่าคุณใช้คิวบ์ HSL หรือ HSV แทนที่จะเป็นคิวบ์ RGB สีถูกแมปมากหรือน้อย แต่จากนั้นคุณสามารถละเว้นองค์ประกอบ S สำหรับแผนที่ 2D ฉันจะแนะนำเพิ่มเติมในระดับ 1D กับ H เพียงอย่างเดียวที่ SV หรือ SL ที่เลือกไว้ซึ่งจะทำให้สีของคุณอยู่ใน "เสียง" แบบสุนทรียศาสตร์ที่คล้ายกัน อัลกอริธึมการกระจายแบบเท่าเทียมกันที่มากกว่า 1D นั้นง่ายเกินไปเช่นกัน!
Jason Kleban

1
ใช่ระยะทางสูงสุดที่กำหนด @ uosɐſ HSV ดูเหมือนว่าจะได้ผลลัพธ์ที่ดีกว่า RGB แม้จะใช้เครื่องบิน HSV ทั้งสามตัวฉันก็สามารถเลือกสีแต่ละสีได้ตามระยะทางกับสีในอุดมคติ
Matt

คำตอบ:


4

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

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

n15

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

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

แก้ไข:

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

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

โปรดทราบด้วยว่าฉันเชื่อว่าวิธีการนี้จะเพิ่มระยะห่างระหว่างคู่ของอนุภาค "(ฮาร์มอนิก?) โดยเฉลี่ย" หากคุณต้องการเพิ่มระยะห่างต่ำสุดระหว่างคู่ของอนุภาคหรือค่าเฉลี่ย (เรขาคณิต?) ระหว่างคู่ของอนุภาคอื่น ๆ นี่อาจไม่ใช่วิธีที่ดีที่สุดสำหรับคุณ

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


3
n=9

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

ฉันจะดูว่าฉันสามารถหาวิธีการทำเช่นนี้ใน matlab (พร้อม simulannealbnd) ความยากลำบากที่ฉันคิดว่าจะเป็นการแปลปัญหาให้เป็นฟังก์ชันทางคณิตศาสตร์ที่ matlab สามารถพยายามลดให้น้อยที่สุดได้
แมตต์

ps ความคิดเริ่มแรกของฉันคือใช้จุดยอดของรูปทรงหลายเหลี่ยม (icosahedron) เนื่องจากฉันยังคิดว่าวิธีแก้ปัญหาอาจมีพวกมันอยู่บนพื้นผิว แต่ก็ไม่แน่ใจว่ามันจะเป็นจริงหรือไม่
แมตต์

ใน MATLAB ฉันเขียนฟังก์ชันซึ่งกำหนดชุดของ (x, y, z) คะแนนจะคำนวณผลรวมของระยะทางแบบยุคลิดแบบคู่ระหว่างคู่คะแนนแต่ละจุดในชุด จากนั้นฉันก็หารด้วยผลลัพธ์และ matlab ควรจะหาค่าต่ำสุดของฟังก์ชันนี้ แต่ matlab ไม่ทำให้ถูกต้องตัวอย่างเช่นสำหรับ 4 คะแนน 3D มันจะคืนค่าต่อไปนี้ x1, x2, x3, x4; y1, y2 .... คะแนน (ช่วง 0-1): 0.0001, 0.0031, 0.9993, 0.9920 ; 0.9970 0.0004 0.9919 0.0030; 0.0030 0.0003 0.9973 0.5756 อย่างไรก็ตามฉันคิดว่ามันเป็นปัญหา matlab ดังนั้นฉันจะยอมรับสิ่งนี้
แมตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.