Tại sao radian được ưa thích hơn độ trong phát triển trò chơi?


39

Tôi đã tìm hiểu định nghĩa của radian và phát hiện ra rằng các nhà toán học thích chúng bởi vì chúng có nguồn gốc từ pi thay vì hoàn toàn tùy ý như độ.

Tuy nhiên, tôi đã không tìm thấy một lý do thuyết phục để sử dụng chúng trong phát triển trò chơi, có thể là do tôi hoàn toàn thiếu hiểu biết toán học liên quan. Tôi biết rằng hầu hết các hàm sin / cos / tan trong các ngôn ngữ là radian, nhưng ai đó cũng có thể tạo các hàm thư viện theo độ (và tránh các lỗi làm tròn vốn có khi sử dụng pi).

Tôi không muốn đây là một cuộc thăm dò ý kiến, tôi chỉ muốn nghe từ những người đã thực hiện phát triển trò chơi (và nghiên cứu toán học liên quan) nơi radian cung cấp trải nghiệm vượt trội về độ, trái ngược với "Chúng tôi đang sử dụng radian bởi vì chúng tôi luôn sử dụng chúng ", chỉ vì mục đích giúp tôi (và có thể cả những người khác) hiểu được những gì họ tốt.


2
Một câu trả lời là chúng nhanh hơn. Bạn không cần phải chuyển đổi độ sang radian trước khi sử dụng chúng trong các chức năng như tội lỗi. Tôi nên cụ thể hơn và nói rằng một phương pháp tính toán sin (x) đang sử dụng bản mở rộng Taylor - và "x" cần phải được tính bằng radian cho việc mở rộng.
dùng3728501

Câu trả lời:


49

Radian được sử dụng trong toán học vì

  1. Họ đo chiều dài cung trên vòng tròn, tức là một cung góc theta trên vòng tròn bán kính r chỉ là r * theta (trái ngược với pi / 180 * r * theta).
  2. Khi các hàm trig được định nghĩa theo radian, chúng tuân theo các mối quan hệ đơn giản hơn với nhau, chẳng hạn như cosin là đạo hàm của sin hoặc sin (x) ~ = x với x nhỏ. Nếu được định nghĩa theo độ, đạo hàm của sin sẽ là pi / 180 * cosine và chúng ta sẽ có sin (x) ~ = pi / 180 * x với x nhỏ.

Không phải là các nhà toán học giống như pi. Radian thực sự là một sự lựa chọn tự nhiên của đo góc hơn độ, vì những lý do trên. Chúng là thước đo góc trong đó các yếu tố như pi / 180 biến mất.

Vì vậy, IMO, câu hỏi không phải là "tại sao sử dụng radian", mà là "tại sao không sử dụng radian". Nói cách khác, người ta không cần một lý do để sử dụng radian; chúng là sự lựa chọn mặc định của thước đo góc. Người ta cần một lý do để sử dụng độ. Ví dụ: người ta có thể chọn hiển thị các góc theo độ trong giao diện người dùng của ứng dụng, vì chúng quen thuộc hơn với nhiều người (đặc biệt là các nghệ sĩ). Tuy nhiên, cá nhân tôi đã khá quen với việc suy nghĩ về các góc theo radian hơn là độ.

Tôi không có bất kỳ ví dụ cụ thể nào về gamedev để cung cấp cho bạn vì đây thực sự không phải là vấn đề về gamedev, mà là vấn đề toán học, và sẽ giống nhau trong bất kỳ lĩnh vực nào sử dụng toán học.

(Nhân tiện, không có "lỗi làm tròn cố hữu khi sử dụng số pi" so với khi sử dụng độ ... các góc phải luôn là số thực, không phải là số nguyên, nếu không bạn sẽ biểu thị một góc bằng nửa độ như thế nào? :) )


4
Đồng ý với những điều trên. Tôi sẽ nói thêm rằng tôi đã từng thấy một thư viện trò chơi sử dụng tiêu chuẩn của riêng mình, dựa trên 256 vòng tròn. Lý do dường như là các hàm trig của chúng đã sử dụng bảng tra cứu với 256 mục và được nội suy giữa chúng. Nếu bạn không làm điều đó, nhưng tính toán sin / cos / tan từ các mở rộng chuỗi của họ hoặc sử dụng các hướng dẫn FSIN / FCOS trên một FPU (điển hình nhất), cả hai sẽ mong đợi một đầu vào bằng radian - vì vậy bạn hãy lưu chuyển đổi bằng cách giữ nó trong radian trong suốt.
DMGregory

11
"Tại sao không sử dụng radian" - Tôi sẵn sàng đặt cược câu trả lời tốt duy nhất là "bởi vì bài tập về nhà lớp 4 sẽ là cơn ác mộng với radian", đó có lẽ là lý do duy nhất mà bất kỳ ai trong chúng ta từng nghe về độ. :)
Sean Middleditch

5
@SeanMiddleditch Lớp 4 phải di chuyển sang Tàu . Tau là phiên bản radian của 360. Nó hợp lý hóa toán học và các chuyên gia cũng phải bắt đầu áp dụng nó.
Val

2
256 phần của một vòng tròn hoặc 16384 của một vòng tròn có nghĩa là bạn có thể sử dụng các byte hoặc số 16 bit không dấu tương ứng, và các dòng tràn / trừ của việc thêm / bớt làm đúng. Với radian, có lẽ cuối cùng bạn sẽ sử dụng dấu phẩy động, điều đó có nghĩa là bạn càng chính xác thì góc của bạn càng gần với 0, và càng ít khi nó di chuyển ra xa, điều này hầu như vô dụng / ngớ ngẩn hầu hết thời gian.
rjmunro

2
@Val: Tau không giải quyết vấn đề tương tự độ. Độ giúp dễ dàng đo các góc tương đối nhỏ với các số nguyên. Điều này rất quan trọng khi cố gắng dạy hình học sớm khi học sinh vẫn đang làm mọi thứ bằng tay và không thoải mái lắm với các phân số. Hãy xem xét các vấn đề "góc đồng hồ" thông thường mà học sinh được đưa ra và làm thế nào những thứ đó được ánh xạ rõ ràng theo độ nhưng không phải là rad / Pi. Điều này tương tự như lý do độ ở một điểm phổ biến trong các trò chơi: sử dụng bảng tra cứu độ dễ hơn / nhanh hơn (hồi đó) và đưa ra độ phân giải "đủ tốt" cho nhu cầu của họ.
Sean Middleditch

4

Câu trả lời của Nathan rất cụ thể. Tôi muốn cung cấp một cái nhìn tổng quát hơn:

Khái niệm toán học phức tạp nhất được thực hiện nguyên bản trong hầu hết các đơn vị xử lý là số dấu phẩy động như mô hình cho trường số thực. Hình học trực quan dựa trên không gian vectơ thực ba chiều. Tọa độ là số thực. Đại lượng hình học được dựa trên chiều dài , là bội số thực của một đơn vị.

Do cơ sở này bằng số thực và độ dài, nên thực tế cũng mô hình hóa các góc bằng số thực tương ứng. Độ dài. Radian là chiều dài của cung tròn của một vòng tròn đơn vị với góc đã cho. Do đó, đây là mô hình của một góc tương thích nhất với tất cả các đơn vị khác dựa trên số thực. Độ dài. Ví dụ: sin xấp xỉ x ~ x đối với các giá trị nhỏ của x là xấp xỉ tọa độ y của một điểm trên vòng tròn đơn vị bởi cung từ trục x đến điểm đó.

Không nên quên, một góc không dài. Nó là một trong 4 phần của một mặt phẳng được tạo bởi hai đường thẳng cắt nhau. Số lượng của nó được giới hạn bởi tính đối xứng của các mặt phẳng trong và số liệu euclide.

Sẽ tự nhiên hơn khi mô hình một góc theo khoảng thời gian semiopen [0,1) (hoặc (0,1]) được dán với nhau tại các điểm cuối của nó, với giá trị của một góc là một phần của một lượt đầy đủ. Độ chỉ là 1 / 360 lượt đầy đủ. (BTW: Số theo lý thuyết, đây là lựa chọn tốt hơn hệ thập phân được sử dụng cho số thực.)


0

Mặc dù tôi cũng sử dụng radian, vì tất cả các lý do được chỉ định, có ít nhất một lý do chính đáng tại sao độ được ưu tiên: Độ chính xác và tích lũy lỗi. Xoay qua một vòng tròn đầy đủ 1 độ tại một thời điểm là chính xác. Xoay qua một vòng tròn 2PI / 360 radian đầy đủ tại một thời điểm là không. Thực hiện xoay 90 độ 4 lần trên lưới pixel sẽ đưa bạn trở lại chính xác nơi bạn bắt đầu. Thực hiện xoay radian 2PI / 4 trên lưới pixel 4 lần thì không.


Thử nghiệm điều này theo kinh nghiệm, sau bốn lần quay 90 độ với độ tăng phao chính xác duy nhất tính bằng radian, tôi thấy tổng sai số là 1,75E-7 (chưa đến 1 phần trong 5 triệu). Trên lưới pixel, bán kính của đối tượng / khung quay sẽ cần bằng hàng triệu pixel trước khi bạn gặp phải 1 pixel lỗi ở cạnh ngoài (một điểm hơn 0,5 px tuyến tính từ vị trí cần có). Nói cách khác, mất độ chính xác dường như không phải là một vấn đề trong thực tế (đặc biệt nếu bạn sử dụng gấp đôi).
DMGregory

Từ góc độ số, bạn đúng, nhưng từ góc nhìn trực quan nếu MỘT pixel từ cạnh cứng bật đến giá trị sai, bạn bị vặn.
ddyer

Xem ghi chú "hàng triệu pixel" ở trên. Đối với các họa tiết có kích thước điển hình (giả sử, theo thứ tự rộng 2048 pixel hoặc nhỏ hơn), lỗi sẽ nhỏ hơn một nửa pixel và do đó sẽ được xóa bằng cách làm tròn vốn có của lưới pixel. Ngoài ra, lưu ý rằng xoay 360/7 độ tại một thời điểm sẽ tích lũy các lỗi rất giống nhau. Bạn có thể loại bỏ các lỗi làm tròn với cả hai hệ thống bằng cách sử dụng các số gia có thể biểu thị bằng tổng lũy ​​thừa của hai (với một số giới hạn trong phạm vi số mũ), nhưng có thể dễ dàng thay đổi thành mã không tích lũy nhiều số gia nhỏ.
DMGregory

@DMGregory Đó là ý của tôi với "lỗi làm tròn vốn có với Pi". Tùy chọn khác là không sử dụng số đơn / đôi mà là cách biểu diễn các số dưới dạng các yếu tố (vì vậy đại diện cho 2 * pi / 360 không phải là kết quả của phép tính mà là công thức đó) và chỉ tính kết quả khi cần. Tôi không biết liệu có chương trình "thực" nào làm điều đó không, nhưng những thứ như Mathicala luôn có thể đại diện cho "1/3" là "1/3" thay vì "0.333333 .....". Nhưng sau khi xem qua các con số tôi đoán là bạn đúng, lỗi làm tròn là có nhưng không đáng kể
Michael Stum

2
Góc 1 độ có thể dễ dàng biểu thị chính xác theo độ hơn so với radian, xoay một đối tượng không chính xác theo cách nào, vì nó yêu cầu các hàm lượng giác. cos 1 ° có nhiều lỗi làm tròn như pi / 180 .
Marcks Thomas

-3

Chúng ta đồng ý rằng tốt hơn là chọn bất kỳ và tuân theo nó hơn là sử dụng hai định nghĩa và đoán một trong số chúng là cần thiết cho hàm hiện tại. Sau đó, sử dụng độ dài cung là tự nhiên hơn để thực hiện tội lỗi và cos có thể là một lý do để cmath thực hiện theo cách đó. Vì các trò chơi thường được viết bằng C ++ hoặc C và đã có sin và cos được triển khai, nên có ý nghĩa để tuân theo định nghĩa đó.

[Bắt vít bạn kế thừa]


Điều này không thực sự trả lời câu hỏi. Bạn có ý định bình luận về một câu trả lời khác thay thế?
Josh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.