ฉันกำลังทำงานเกี่ยวกับการสร้างเสียง perlin 3d ไลบรารี C # Math ดูเหมือนว่าเกินความจำเป็นสำหรับสิ่งที่ฉันต้องการเนื่องจากฟังก์ชั่นส่วนใหญ่ใช้การคิดแบบสองครั้ง ฉันใช้ Math.Sin () ในหลายแห่งเพื่อสร้างเสียง ไม่มีใครรู้ถึงฟังก์ชั่นไซน์ที่เร็วกว่านี้ไหม?
ฉันกำลังทำงานเกี่ยวกับการสร้างเสียง perlin 3d ไลบรารี C # Math ดูเหมือนว่าเกินความจำเป็นสำหรับสิ่งที่ฉันต้องการเนื่องจากฟังก์ชั่นส่วนใหญ่ใช้การคิดแบบสองครั้ง ฉันใช้ Math.Sin () ในหลายแห่งเพื่อสร้างเสียง ไม่มีใครรู้ถึงฟังก์ชั่นไซน์ที่เร็วกว่านี้ไหม?
คำตอบ:
คุณสามารถใช้พาราโบลาเพื่อประมาณค่าของฟังก์ชันไซน์ นี้มีความได้เปรียบของการมีรากที่ตรง -pi / 2 และปี่ / 2 ซึ่งมักจะไม่ใช่กรณีที่มีการประมาณอย่างรวดเร็วอื่น ๆ ตามที่อนุกรมเทย์เลอร์หรือMaclaurinSeries
public float Sin(float x)
{
const float B = 4 / PI;
const float C = -4 / (PI*PI);
return -(B * x + C * x * ((x < 0) ? -x : x));
}
นี่เป็นการเปรียบเทียบกับฟังก์ชันไซน์จริง:
ช่วงของค่าอินพุตสำหรับฟังก์ชั่นsin ()ของคุณคืออะไร? สำหรับสิ่งที่คุณใช้สำหรับดูเหมือนว่าพวกเขาอาจถูก จำกัด ซึ่งหมายความว่าคุณสามารถคำนวณค่าล่วงหน้าได้ ตัวอย่างเช่นหากคุณกำลังปัดเศษค่าอินพุตให้อยู่ในระดับที่ใกล้ที่สุดคุณจะมีค่าที่เป็นไปได้ 360 ค่า - เพียงคำนวณล่วงหน้าและเก็บไว้ในตาราง
หากคุณต้องการค่าเพิ่มเติมเล็กน้อยพูดกับทศนิยมหนึ่งตำแหน่งคุณสามารถแก้ไขจากตาราง - ฉันไม่คุ้นเคยกับเสียงเพอร์ลิน แต่คำว่า "เสียง" ดูเหมือนว่าจะระบุว่าไม่ต้องการความแม่นยำสูง :) (คุณสามารถสร้างตารางที่ใหญ่กว่าได้ 3600 รายการนั้นไม่มีพื้นที่มากนัก)
คุณอาจต้องการอ่านสิ่งนี้เช่นกันมันมีค่าประมาณไซน์และโคไซน์ที่รวดเร็ว