ฉันจะทำอย่างไรเพื่อที่ฉันจะสามารถควบคุมงานศิลปะได้และไม่ใช้เวลานานในการพยายามปรับแต่งวิธีการเพื่อให้ถูกต้อง ...
ขั้นแรกให้สร้างกลุ่มสไปรต์ของใบชาด้วยตนเองเป็น "สระว่ายน้ำ" ศิลปะของคุณ - ไม่ใช่ใบชามูลค่าเท่าถ้วยทั้งหมด แต่จะเหมือนกับกลุ่มเล็ก ๆ บอกว่า 20 คนหรือมากกว่านั้น?
จากนั้นวางตัวเลขสุ่มของพวกเขาที่พิกัดสุ่มบนฐาน "ถ้วย" ให้แต่ละการหมุนและสเกลแบบสุ่มรวมกับการสุ่มแนวนอนและ / หรือการมิเรอร์แนวตั้ง สิ่งนี้ควรสร้างผลลัพธ์ที่ดี
วิธีการนี้จะให้อิสระทางศิลปะในการสร้างแต่ละกลุ่มให้มีลักษณะที่คุณต้องการในขณะที่ให้ผลลัพธ์ที่หลากหลาย (สมมติว่ามีสไปรต์ให้เลือก)
นอกจากนี้ด้วยวิธีนี้ (และวิธีการสุ่มใด ๆ รวมถึงเสียงรบกวนจาก Perlin) คุณสามารถสร้างโปรแกรมสร้างตัวเลขสุ่มที่จุดเริ่มต้นของกระบวนการด้วยเมล็ดที่รู้จักเพื่อสร้างผลลัพธ์ที่ทำซ้ำได้ หากคุณบันทึกเมล็ดคุณสามารถสร้างรูปแบบเดิมอีกครั้งโดยการป้อนซ้ำก่อนที่จะเริ่มต้นลำดับ คุณสามารถทำสิ่งที่สนุก ๆ เหมือนมีใครสักคนพิมพ์ชื่อของพวกเขาเปลี่ยนตัวอักษรให้เป็นตัวเลข (รวม ASCII และอื่น ๆ ) จากนั้นใช้มันเป็นเมล็ดพันธุ์ของ "ใบชารูปแบบนี้ที่เหมาะกับคุณ" สิ่ง.
นี่คือรหัสเทียมบางส่วนสำหรับสิ่งที่ฉันหมายถึงถ้ามันช่วย ...
var sprites = [...]; // Array of tea leaf sprites
var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
var sprite_index = rand(sprites.length); // Random sprite index
var r = rand(CUP_DIAMETER); // Random radius for point on disk calc
var theta = rand(2*PI); // Random theta (rotation) for point on disk
var sprite_x = sqrt(r) * cos(theta); // Sprite X
var sprite_y = sqrt(r) * sin(theta); // Sprite Y
var sprite_rotation = rand(2*PI); // Sprite rotation
var sprite_scale = rand(1) + 0.5; // Sprite scale from 0.5 to 1.5
var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
var sprite_v_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror vertically
draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}
ลองดูที่http://mathworld.wolfram.com/DiskPointPicking.htmlเพื่อการสนทนาที่ยอดเยี่ยมเกี่ยวกับวิธีเลือกจุดสุ่มในดิสก์และทำไมฉันถึงใช้สิ่งทั้ง sqrt / sin / cos