ทำไมเรเดียนจึงเป็นที่ต้องการมากกว่าระดับในการพัฒนาเกม


39

ฉันค้นหาคำจำกัดความของเรเดียนและพบว่านักคณิตศาสตร์ชอบพวกเขาเพราะพวกเขามาจากไพแทนที่จะเป็นพลอย่างสมบูรณ์เช่นองศา

อย่างไรก็ตามฉันไม่พบเหตุผลที่น่าสนใจที่จะใช้พวกเขาในการพัฒนาเกมอาจเป็นเพราะการขาดความเข้าใจทางคณิตศาสตร์ที่เกี่ยวข้องทั้งหมดของฉัน ฉันรู้ว่าฟังก์ชัน sin / cos / tan ส่วนใหญ่ในภาษาที่เรเดียน แต่บางคนก็สามารถสร้างฟังก์ชั่นห้องสมุดเป็นองศา (และหลีกเลี่ยงข้อผิดพลาดในการปัดเศษโดยธรรมชาติเมื่อใช้ pi)

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


2
คำตอบเดียวคือพวกเขาเร็วกว่า คุณไม่จำเป็นต้องแปลงองศาเป็นเรเดียนก่อนที่จะใช้มันในการทำงานเช่นบาป ฉันควรเจาะจงมากขึ้นและบอกว่าวิธีหนึ่งในการคำนวณ sin (x) กำลังใช้การขยายตัวของ Taylor และ "x" จำเป็นต้องเป็นเรเดียนสำหรับการขยายตัว
user3728501

คำตอบ:


49

เรเดียนใช้ในวิชาคณิตศาสตร์เพราะ

  1. พวกเขาวัดความยาวส่วนโค้งบนวงกลมนั่นคือส่วนโค้งของมุมทีต้าบนวงกลมรัศมี r เป็นเพียง r * ทีต้า (ตรงข้ามกับ pi / 180 * r * theta)
  2. เมื่อฟังก์ชันตรีโกณฯ มีการนิยามในรูปของเรเดียนพวกมันจะเชื่อฟังความสัมพันธ์ที่เรียบง่ายระหว่างกันและกันเช่นโคไซน์เป็นอนุพันธ์ของไซน์หรือไซน์ (x) ~ = x สำหรับ x ขนาดเล็ก หากนิยามในรูปขององศาอนุพันธ์ของไซน์จะเป็น pi / 180 * โคไซน์และเรามี sin (x) ~ = pi / 180 * x สำหรับ x เล็ก

ไม่ใช่นักคณิตศาสตร์ที่เหมือนกับ Pi เรเดียนเป็นธรรมชาติมากขึ้นตัวเลือกการวัดมุมที่มากกว่าองศาด้วยเหตุผลด้านบน พวกเขาคือการวัดมุมที่ปัจจัยเช่น pi / 180 หายไป

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

ฉันไม่มีตัวอย่างเฉพาะของ gamedev ที่จะให้คุณเพราะนี่ไม่ใช่ปัญหา gamedev แต่เป็นคณิตศาสตร์และจะเหมือนกันในทุกสาขาที่ใช้คณิตศาสตร์

(โดยวิธีการที่ไม่มี "ข้อผิดพลาดการปัดเศษโดยธรรมชาติเมื่อใช้ pi" มากกว่าเมื่อใช้องศา ... มุมควรเป็นจำนวนจริงไม่ใช่จำนวนเต็มวิธีอื่นคุณจะแสดงมุมครึ่งองศาได้อย่างไร :) )


4
เห็นด้วยกับข้างต้น ฉันจะเพิ่มที่ฉันเคยเห็นห้องสมุดเกมที่ใช้มาตรฐานของตัวเองตาม 256 ของวงกลม เหตุผลดูเหมือนว่าฟังก์ชั่นตรีโกณฯ ของพวกเขาใช้ตารางการค้นหาที่มี 256 รายการและสอดแทรกระหว่างพวกเขา หากคุณไม่ทำเช่นนั้น แต่คำนวณ sin / cos / tan จากการขยายอนุกรมหรือใช้คำสั่ง FSIN / FCOS ใน FPU (โดยทั่วไป) ทั้งคู่จะคาดหวังอินพุตเป็นเรเดียนดังนั้นคุณจึงบันทึกการแปลงได้ มันเป็นเรเดียนตลอด
DMGregory

11
"ทำไมไม่ใช้เรเดียน" - ฉันยินดีที่จะเดิมพันคำตอบที่ดีเพียงอย่างเดียวนั่นคือ "เพราะการบ้านชั้นประถมศึกษาปีที่ 4 จะเป็นฝันร้ายกับเรเดียน" ซึ่งน่าจะเป็นเหตุผลเดียวที่พวกเราทุกคนเคยได้ยินองศา :)
Sean Middleditch

5
@SeanMiddleditch เรียนชั้นประถมศึกษาปีที่ 4 จะต้องโยกย้ายไปเป็นเอกภาพ เอกภาพเป็นรุ่นเรเดียนของ 360 มันช่วยเพิ่มความคล่องตัวทางคณิตศาสตร์และผู้เชี่ยวชาญจะต้องเริ่มรับมัน
Val

2
256th ของวงกลมหรือ 16384 ของวงกลมหมายความว่าคุณสามารถใช้ไบต์ที่ไม่ได้ลงชื่อหรือหมายเลข 16 บิตตามลำดับและการล้น / อันเดอร์อันเดอร์ของการเพิ่ม / การลบทำสิ่งที่ถูกต้อง ด้วยเรเดียนคุณอาจลงเอยด้วยการใช้จุดลอยซึ่งหมายความว่าคุณจะได้รับความแม่นยำมากขึ้นมุมของคุณใกล้จะเป็นศูนย์และน้อยลงเมื่อมันเคลื่อนไปซึ่งเป็นส่วนที่ไร้ประโยชน์ / ไร้สาระส่วนใหญ่
rjmunro

2
@Val: เอกภาพไม่ได้แก้ปัญหาเดียวกันทำองศา องศาทำให้ง่ายต่อการวัดมุมที่ค่อนข้างเล็กด้วยจำนวนที่สมบูรณ์ นี่เป็นสิ่งสำคัญเมื่อพยายามสอนรูปทรงเรขาคณิตตอนต้นเมื่อนักเรียนยังคงทำทุกอย่างด้วยมือและไม่สบายใจกับเศษส่วน พิจารณาปัญหาที่เกิดขึ้นจาก "มุมเข็มนาฬิกา" ที่นักเรียนได้รับและวิธีการจับคู่กับองศาอย่างละเอียด แต่ไม่ใช่เรเดียน Pi / Tau สิ่งนี้คล้ายกับเหตุผลที่องศานั้นเป็นที่นิยมในเกม: การใช้ตารางการค้นหาระดับง่าย / เร็วขึ้น (ย้อนหลัง) และให้ความละเอียด "ดีพอ" สำหรับความต้องการของพวกเขา
Sean Middleditch

4

คำตอบของนาธานเป็นรูปธรรมมาก ฉันต้องการให้มุมมองที่กว้างขึ้น:

แนวคิดทางคณิตศาสตร์ที่ซับซ้อนที่สุดที่นำมาใช้จริงในหน่วยการประมวลผลส่วนใหญ่คือจำนวนจุดลอยตัวเป็นแบบจำลองสำหรับฟิลด์ของจำนวนจริงℝ Visual geometriy นั้นขึ้นอยู่กับปริภูมิเวกเตอร์สามมิติจริง พิกัดคือจำนวนจริง ปริมาณเรขาคณิตจะขึ้นอยู่กับความยาวซึ่งเป็นผลคูณจริงของหน่วย

เนื่องจากฐานนี้มีจำนวนจริงและมีความยาวจึงเป็นประโยชน์ในการจำลองมุมด้วยจำนวนตัวเลขจริง ความยาว เรเดียนคือความยาวของส่วนโค้งของวงกลมหน่วยที่มีมุมที่กำหนด ดังนั้นมันจึงเป็นรูปแบบของมุมที่เข้ากันได้กับหน่วยอื่น ๆ ทั้งหมดเหล่านี้โดยยึดตามจำนวนที่แท้จริง ความยาว ตัวอย่างเช่นการประมาณ sin x ~ x สำหรับค่าเล็ก ๆ ของ x เป็นการประมาณพิกัด y ของจุดบนวงกลมหน่วยโดย arc จากแกน x ไปยังจุดนั้น

หนึ่งไม่ควรลืมว่ามุมคือไม่ยาว มันเป็นหนึ่งใน 4 ส่วนของเครื่องบินที่สร้างขึ้นโดยเส้นตรงตัดกันสองเส้น ปริมาณนั้นล้อมรอบด้วยสมมาตรของระนาบในℝ³และตัวชี้วัดแบบยุคลิด

มันเป็นธรรมชาติมากขึ้นในการสร้างแบบจำลองมุมตามช่วงเวลาครึ่งเซมินา [0,1) (หรือ (0,1]) ติดกันที่จุดสิ้นสุดของมันให้ค่าของมุมเป็นส่วนหนึ่งของการหมุนเต็มองศาเป็นเพียง 1 / 360 รอบการหมุน (BTW: Number ตามหลักวิชานี่เป็นตัวเลือกที่ดีกว่าระบบทศนิยมที่ใช้สำหรับจำนวนจริง)


0

ในขณะที่ฉันใช้เรเดียนด้วยเหตุผลทั้งหมดที่ระบุมีเหตุผลที่ดีอย่างน้อยหนึ่งประการที่ทำให้องศาเป็นที่ต้องการ: ความแม่นยำและการสะสมของข้อผิดพลาด หมุนวนเป็นวงกลมเต็มครั้งละ 1 องศาแน่นอน การหมุนผ่านวงกลมเต็ม 2PI / 360 เรเดียนในแต่ละครั้งนั้นไม่ใช่ การหมุน 90 องศา 4 ครั้งบนกริดพิกเซลทำให้คุณกลับไปสู่จุดเริ่มต้นที่แน่นอน การหมุนเรเดียน 2PI / 4 บนกริดพิกเซล 4 ครั้งไม่ได้


การทดสอบนี้โดยสังเกตุหลังจากการหมุน 90 องศาสี่ครั้งด้วยการเพิ่มความแม่นยำในเรเดียนแบบลอยตัวเดียวฉันพบข้อผิดพลาดทั้งหมดที่ 1.75E-7 (น้อยกว่า 1 ส่วนใน 5 ล้าน) บนกริดพิกเซลรัศมีของวัตถุ / กรอบการหมุนจะต้องอยู่ในล้านพิกเซลก่อนที่คุณจะพบข้อผิดพลาด 1 พิกเซลที่ขอบด้านนอก (จุดมากกว่า 0.5 เชิงเส้น px จากตำแหน่งที่ควรเป็น) กล่าวอีกนัยหนึ่งการสูญเสียความแม่นยำไม่น่าจะเป็นปัญหาในทางปฏิบัติ (โดยเฉพาะถ้าคุณใช้คู่)
DMGregory

จากมุมมองเชิงตัวเลขคุณถูกต้อง แต่จากมุมมองภาพหากหนึ่งพิกเซลจากขอบแข็งเด้งไปจนถึงค่าผิดคุณจะถูกเกลียว
ddyer

ดูหมายเหตุ "ล้านพิกเซล" ด้านบน สำหรับสไปรท์ที่มีขนาดทั่วไป (พูดตามคำสั่งที่กว้าง 2048 พิกเซลหรือเล็กกว่า) ข้อผิดพลาดจะน้อยกว่าครึ่งพิกเซลอย่างมากและจะถูกลบโดยการปัดเศษพิกเซลตารางโดยธรรมชาติเอง นอกจากนี้โปรดทราบว่าการหมุนครั้งละ 360/7 องศาจะสะสมข้อผิดพลาดเดียวกันมาก คุณสามารถกำจัดข้อผิดพลาดในการปัดเศษด้วยระบบทั้งสองโดยการเพิ่มส่วนที่เป็นตัวแทนของผลรวมของพลังสอง (มีข้อ จำกัด บางอย่างในช่วงเลขชี้กำลัง) แต่มันอาจจะง่ายกว่าที่จะเปลี่ยนเป็นรหัสที่ไม่ได้เพิ่มทีละน้อย
DMGregory

@DMGregory นั่นคือสิ่งที่ฉันหมายถึง "ข้อผิดพลาดในการปัดเศษโดยธรรมชาติกับ Pi" ตัวเลือกอื่นคือไม่ใช้ singles / doubles แต่เป็นวิธีในการแสดงตัวเลขเป็นปัจจัย (ดังนั้นแทน 2 * pi / 360 ไม่เป็นผลจากการคำนวณ แต่เป็นสูตรนั้น) และคำนวณผลลัพธ์เมื่อจำเป็นเท่านั้น ฉันไม่ทราบว่าโปรแกรม "ของจริง" ทำเช่นนั้นหรือไม่ แต่สิ่งที่เหมือน Mathematica สามารถแสดง "1/3" เป็น "1/3" แทน "0.333333 ..... " แต่หลังจากผ่านตัวเลขที่ฉันคิดว่าคุณถูกต้องข้อผิดพลาดในการปัดเศษจะมี แต่ไม่มีนัยสำคัญ
Michael Stum

2
มุมที่ 1 องศาอาจจะง่ายกว่าที่จะเป็นตัวแทนของความถูกต้องในองศากว่าในเรเดียนการหมุนวัตถุไม่แน่นอนทั้งสองวิธีเพราะมันต้องใช้ฟังก์ชั่นเกี่ยวกับวิชาตรีโกณมิติ cos 1 °เป็นเรื่องมากที่จะปัดเศษข้อผิดพลาดเป็นปี่ / 180
Marcks Thomas

-3

ลองตกลงกันว่าจะดีกว่าที่จะเลือกใด ๆ และยึดติดกับมันมากกว่าการใช้สองคำนิยามและคาดเดาเล็กน้อยซึ่งหนึ่งในนั้นเป็นสิ่งจำเป็นสำหรับฟังก์ชั่นปัจจุบัน จากนั้นใช้ความยาวส่วนโค้งเป็นธรรมชาติมากขึ้นสำหรับการดำเนินการของบาปและ cos ซึ่งอาจเป็นเหตุผลสำหรับ cmath ที่จะใช้มันในแบบนั้น เนื่องจากเกมนั้นเขียนด้วยภาษา C ++ หรือ C และมีการนำบาปและคอสมาใช้ไปแล้ว

[สกรูคุณ OpenGL มรดก]


นี่ไม่ใช่การตอบคำถามจริงๆ คุณหมายถึงแสดงความคิดเห็นในคำตอบอื่นแทนหรือไม่?
Josh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.