Toán học nào tất cả các lập trình viên trò chơi nên biết? [đóng cửa]


163

Câu hỏi đủ đơn giản: Toán học nào mà tất cả các lập trình viên trò chơi cần nắm vững để thành công?

Tôi không nói cụ thể về kết xuất toán học hay bất cứ điều gì trong lĩnh vực lập trình trò chơi, cụ thể hơn là những điều mà ngay cả các lập trình viên trò chơi cũng nên biết, và nếu họ không có lẽ họ sẽ thấy nó hữu ích.

Lưu ý:không có ai trả lời đúng , câu hỏi này (và câu trả lời của nó) là một wiki cộng đồng.

Ngoài ra, nếu bạn muốn các phương trình toán học latex ưa thích, vui lòng sử dụng http://mathurl.com/ .


1
Mmm tôi nghĩ rằng có một chủ đề nói về sách toán mà mọi lập trình viên nên đọc hoặc đại loại như thế tôi không thực sự nhớ lại ... nhưng nó có một số điều hay trên đó .... không chắc là nó ở đây hay stackoverflow aswell lol
Giải thưởng



15
Đóng cửa vì quá xây dựng bởi Tetrad ♦
Thomas Eding

1
@ThomasEding Vâng, quá rộng có thể phù hợp hơn, vì đây rõ ràng là một câu hỏi danh sách .
Anko

Câu trả lời:


137

nhiều dạng toán khác hữu ích, nhưng ở mức tối thiểu bạn cần biết:

  • Đại số và số học

Đây là những điều khá cơ bản, nhưng nếu bạn không biết những điều này, bạn sẽ không có cơ hội thậm chí là một lập trình viên chứ đừng nói đến một nhà phát triển trò chơi.

Các đối tượng trong một thế giới trò chơi được thể hiện bằng các vectơ. Một vectơ đại diện cho những thứ như vị trí của đối tượng, hướng nhìn và tốc độ. Các phép tính toán vector như Sản phẩm Dot , Sản phẩm chéo và chuẩn hóa Vector là rất cần thiết.

Làm thế nào để tôi di chuyển đối tượng trò chơi của tôi? Người mới có thể nói:

"Tôi biết! Tôi sẽ chỉ làm:" object.position.x++.

Không không không. Bạn cần sử dụng một phép tính vector. Đối tượng cần một vị trí, hướng và vectơ gia tốc mà bạn có thể sử dụng để di chuyển đối tượng. Nếu bạn làm điều mới, bạn sẽ bị mắc kẹt trong một mớ hỗn độn không thể nhận ra, và làm thế nào để bạn di chuyển theo hướng không thẳng hàng với trục XYZ của thế giới?

Các lý do chính khiến các trò chơi sử dụng tứ phương là bởi vì chúng đại diện cho các phép quay gần như không gian hiệu quả như các góc Euler, mà không bị khóa Gimbal . Khóa Gimbal bắt đầu khi bất kỳ góc Euler nào đạt tới góc xoay 90 độ quanh bất kỳ trục nào: bạn ngay lập tức mất một mức độ tự do. Đệ tứ giải quyết vấn đề này bằng cách thêm một chiều thứ tư. Nếu bạn bị kẹt với các góc Euler, bạn sẽ phải hạn chế một trục để không bao giờ xoay quá ~ 89 độ.

Nếu bạn định lập trình toán học cho các phản ứng vật lý trong một trò chơi, thì việc tham gia một lớp vật lý sẽ không phải là một ý tưởng tồi.

Lý do tại sao bạn sẽ cần phải biết các phương trình vật lý:

  1. Làm cho một quả bóng nảy (xem: đồng hiệu quả của sự phục hồi)
  2. Làm cho một quả bóng di chuyển theo một hướng với lực 'x' newtons lực
  3. Làm cho một cái gì đó có ma sát nhiều hơn hoặc ít hơn để nó sẽ trượt ở một tốc độ khác
  4. Phản ứng va chạm: Đối tượng sẽ xoay theo hướng nào khi tôi nhấn nó 'đây'?

Nếu bạn sử dụng một công cụ vật lý (hoặc một công cụ trò chơi có sẵn công cụ vật lý) thì bạn có thể thoát khỏi việc biết rất ít về vật lý. Tuy nhiên, thật tốt khi biết bạn cần làm bẩn tay vì động cơ vật lý không hoạt động tốt.


1
Đối với vật lý, các bài viết của Chris Hecker về động lực học cơ thể cứng nhắc, bao gồm phản ứng va chạm và phục hồi, là tuyệt vời: chrishecker.com/Rigid_Body_Doperics
tenpn

25
Bạn đã đề cập đến tứ phương nhưng không phải ma trận biến đổi ??
Andrew Russell

8
"Khóa Gimble [sic] là hiệu ứng mà khi bạn di chuyển chuột để nhìn xuống, nó sẽ dừng lại khi bạn nhìn thẳng xuống ...." Thật ra điều đó thường được thực hiện cho sự tỉnh táo của người chơi và không liên quan gì đến khóa gimbal.

4
Nó làm tôi ngạc nhiên khi tần suất các mối quan hệ được liên kết với khóa gimble. Tôi đã viết các trò chơi 3D không có bất kỳ mối quan hệ nào và không bao giờ có vấn đề về khóa. Nếu bạn thực sự hiểu toán học 3D và biết khóa gimble thực sự là gì, thì bạn sẽ không gặp phải vấn đề đó.
Skizz

7
Khóa Gimbal thực sự được gây ra bởi sự xoay tròn ngây thơ với các góc Euler (thường là các góc Tait hay Bryan: Yaw, Pitch, Roll). Các biểu diễn thay thế như Trục-Góc cũng có thể được sử dụng để ngăn chặn sự xuất hiện của nó. Tuy nhiên, Đệ tứ có lợi ích của phép nội suy dễ dàng và thường được ưa thích vì lý do đó.
Jason Kozak

51

Tôi mơ về một ngày khi phát triển trò chơi được định hướng dữ liệu như sản xuất nghệ thuật. Tôi không nhìn thấy nó ở bất cứ đâu trên đường chân trời vì vậy bây giờ biết một số toán học dường như là một điều cần thiết.

Toán học giống như kỹ thuật, càng nhiều càng tốt, miễn là bạn có thể áp dụng nó.

Đây là thứ tự quan trọng tôi thấy.

  • Môn số học
  • Đại số tuyến tính (với các giải thích hình học)
  • Giải tích (vật lý)
  • Kết hợp (mức ngẫu nhiên)
  • Xác suất (cân bằng)
  • Thống kê (đặc biệt Bayes cho AI)

Tôi có thể tiếp tục đi. Bạn càng biết nhiều thì càng tốt, nhưng học một loạt toán không có nghĩa là bạn sẽ tạo ra một trò chơi tuyệt vời, nhưng nó có thể giúp ích.


4
Giải tích là một lĩnh vực rất lớn. Có lẽ chỉ cần một lượng nhỏ để phát triển trò chơi.
Noldorin

2
@Noldorin vâng. Trong hầu hết các tình huống, hiểu được mối quan hệ giữa đạo hàm, gia tốc, vận tốc và vị trí có thể là đủ ... nhưng tính toán là tuyệt vời.
Jonathan Fischoff

AI của Bayes có xu hướng không được sử dụng cho các trò chơi vì sử dụng bộ nhớ tương đối lớn, khả năng sửa lỗi và dự đoán kém và không gian vấn đề được xác định rõ. Một triển khai tốt của tìm kiếm cổ điển với các heuristic thông minh thường là (nhưng không phải luôn luôn) một công cụ tốt hơn.

1
Đối với tôi nó không phải là một thuật toán Bayes cụ thể mà tôi thấy quan trọng, nhưng hiểu được quá trình suy luận được đặc biệt bởi ET Jaynes. Tôi không nghĩ rằng bất cứ điều gì vốn đã chậm về lý luận Bayes.
Jonathan Fischoff

1
Thống kê thật tuyệt vời khi bạn đang phát triển AI, hoặc nói chung là đang phát triển một trò chơi quản lý / ông trùm. Mặt khác, tôi không có chút quen thuộc nào với tính toán cả. Tôi tranh luận về thống kê và xác suất về cơ bản là giống nhau cho mục đích học tập vì lĩnh vực thống kê bắt nguồn từ công việc dựa trên xác suất. Nó rất chủ quan.
Rushyo

25

Một điều rất cơ bản là định lý Pythagore. Còn được gọi là công thức khoảng cách.

a ^ 2 + b ^ 2 = c ^ 2trong đó ablà các cạnh của một tam giác vuông và clà cạnh huyền. Điều này có nghĩa là để tìm độ dài của vectơ, bạn làm điều này:

khoảng cách = sqrt (a ^ 2 + b ^ 2)

Một lưu ý khác là nếu bạn chỉ so sánh khoảng cách, bạn không phải lấy căn bậc hai (có thể tương đối tốn kém). Đó là lý do tại sao hầu hết các khung có chức năng "bình phương khoảng cách" hoặc "bình phương chiều dài" cho các vectơ của chúng.


1
Tôi khá chắc chắn rằng tôi đã đọc cái này ở một nơi khác trên trang web này trước đây :)
Ricket

Chắc chắn, bài viết này được lấy cảm hứng từ chủ đề / bình luận đó.
Tetrad

Tôi sẽ nhận được một số déjà vu ở đây ... :)
mmyer

2
Tổng quát hơn, độ dài của vectơ là căn bậc hai của sản phẩm chấm với chính nó. Vì vậy, sqrt(V dot V)là chiều dài của nó. Vì vậy, khoảng cách giữa hai điểm là:sqrt((A-B) dot (A-B))
greyfade

Cũng tuyệt vời là hiểu nó trong bối cảnh của danh tính trig sin² (x) + cos² (x) = 1.

19
  • Các vectơ cả 3D và 4D và thành phần W nên được đặt thành
  • Hệ thống tọa độ tay trái và tay phải, và trò chơi nào của bạn
  • Sản phẩm chấm và những gì nó hữu ích cho
  • Sản phẩm chéo và những gì nó hữu ích cho
  • Ma trận, cách chúng thể hiện định hướng và vị trí và cách bạn có thể kết hợp chúng
  • Đệ tứ

Ngay cả khi bạn không phải là The Graphics Guy, bạn sẽ sử dụng các vectơ và toán học vectơ 80% thời gian. Chúng là hành của bolognese vui vẻ của chúng tôi.


4
Đây không phải là một danh sách xấu, nhưng tôi đã hy vọng cho một câu trả lời mô tả hơn. Tức là công thức sản phẩm chấm là gì, ý nghĩa của nó và mức độ hữu ích của nó.
Tetrad

3
@Tetrad Không wikipedia cung cấp cho bạn điều đó? vi.wikipedia.org/wiki/Dot_product#DefDef .
Jonathan Fischoff

1
Không dành cho các trò chơi cụ thể, không.
Tetrad

5
Nó làm. Nó cho bạn biết sản phẩm chấm là cosin của góc. Đó là tất cả những gì bạn cần biết (và có thể biết), vì ứng dụng vẫn phụ thuộc vào mục đích bạn muốn sử dụng. Định hướng AI? Bạn cần góc, vì vậy dấu chấm là bạn của bạn. Kết xuất ánh sáng? Bạn cần góc. Tất cả những gì có thể nói là nó (sản phẩm chấm trong trường hợp này) xác định cosin của độ dài lần góc của vectơ a, chiều dài của vectơ b. Đó là kiến ​​thức có thể được đưa ra. Phần nào của nó để sử dụng, và làm thế nào, không thể nói vì các ứng dụng là vô hạn.
Kaj


10

Một nắm vững +, -, *, và /. Không có họ, bạn hoàn toàn sai lầm.


12
Tôi nghĩ rằng tất cả chúng ta có thể đồng ý đây không phải là những gì câu hỏi đang hỏi. (bạn cũng quên%).
coderanger

2
Các câu trả lời khác được bình chọn cho điều này (số học cơ bản) ....
RCIX

7
Không chỉ là số học cơ bản, mà còn hiểu cách thức hoạt động của tất cả các hoạt động trong hai môi trường bổ sung, điểm cố định và điểm nổi IEEE. Nếu không nắm vững lý do tại sao 0,1 * 3! = 0,3 hoặc tại sao -x có thể không phải là những gì bạn mong đợi, bạn sẽ bị lừa.

1
@ user744 Tôi thực sự bị lừa, cái phép thuật này là gì?
Cuộc chiến tranh

9

Vâng, lập trình trò chơi có xu hướng khá chuyên sâu về toán học. Toán học bạn cần phụ thuộc vào những gì bạn đang làm việc. Tất nhiên, số học cơ bản là điều bắt buộc, giống như trong tất cả các chương trình. Ngoài ra:

Hình học là rất quan trọng đối với bất kỳ công việc đồ họa. Nếu bạn muốn hiển thị mọi thứ trên màn hình, bạn cần hiểu hệ tọa độ. Và nếu bạn muốn di chuyển chúng xung quanh trong bất cứ thứ gì ngoại trừ các hướng hồng y, bạn sẽ hoàn toàn lạc lối nếu không nắm vững các sin, cosin và vectơ (trig cơ bản). Và nếu bạn cần làm việc trong 3D, các yêu cầu hình học và trig trở nên phức tạp hơn rất nhiều.

Nếu bạn muốn mô hình hóa bất kỳ loại vật lý thực tế từ xa nào, bạn cần tính toán cho điều đó. (Đó là những gì đã thúc đẩy Newton phát minh ra phép tính, sau đó.)

Bất kỳ loại tính toán xác suất nào cũng cần có kiến ​​thức về thống kê và lý thuyết xác suất để có được kết quả lành mạnh mà không có số lượng thử nghiệm và sai sót điên rồ.

Có lẽ có nhiều hơn thế, nhưng đó là những gì tôi nghĩ đến ngay trên đỉnh đầu của tôi.


Tôi nhớ khi em trai tôi cố gắng tạo ra một trò chơi Bang-Bang như một dự án cho lớp VB ở trường trung học của mình. Anh ta đã làm mọi việc, ngoại trừ anh ta không biết làm thế nào để làm cho những quả đạn đại bác bay theo hình vòng cung dựa trên góc và sức mạnh, vì anh ta chưa lấy Trig 1. Sau khi tôi giải thích những điều cơ bản, nó hoạt động tốt.
Mason Wheeler

Không có Trig cần thiết cho hồ quang, chỉ cần sử dụng s=u.t + a.t.t/2. Bạn cần trig để có được vận tốc ban đầu mặc dù (u).
Skizz

Tại sao điều này không cao hơn? Một nửa số lập trình viên mà tôi đã làm việc không thể sử dụng sin và cosin cho cuộc sống của họ.
zaratustra

@Skizz: Vâng. Bạn cần trig để biến một góc và một sức mạnh thành một vectơ ban đầu. Sau đó, bạn chỉ cần một vòng lặp hoạt hình và một hằng số hấp dẫn.
Mason Wheeler

9

Ít nhất bạn sẽ cần.

  • Đại số học
  • Hình học cơ bản
  • Lượng giác cơ bản

Bạn cũng sẽ muốn có ít nhất một kiến ​​thức làm việc về các hoạt động của Vector và bạn sẽ muốn biết Ma trận là gì và nó có thể được sử dụng để làm gì, mặc dù các chi tiết sẽ không thực sự cần thiết.

Nếu bạn muốn tham gia vào lập trình đồ họa, bạn sẽ cần nhiều kiến ​​thức toán học hơn, nhưng thực hiện lập trình trò chơi nói chung không cần phải quá chuyên sâu về toán học.


9

Hệ thống đánh số nhị phân thập lục phân , và cách chuyển đổi chúng thành / từ số thập phân.

Mặc dù bạn thường không cần phải làm việc với các số nhị phân thô , chúng thường được sử dụng cho các biến Flag, đòi hỏi logic boolean và dịch chuyển bit.

Hex không quan trọng lắm (trừ khi bạn muốn xử lý 0xDEADBEEF ), nhưng ở mức tối thiểu, bạn muốn nhận ra khi nào chúng được sử dụng và tại sao.


1
Nếu bạn không thể đọc hex, bạn không thể lập trình hiệu quả. Hầu hết các hằng bitwise trong C và C ++ sẽ được chỉ định làm giá trị hex.

Tôi nghĩ rằng bạn đã có Booleanbinarytrộn lẫn. Không chắc chắn chúng thực sự cần thiết cho lập trình trò chơi.
Skizz

@Skizz, điểm tốt - đã sửa. (Và một điểm nhỏ khác, đó là wiki - không có gì ngăn bạn thay đổi nó. :)
Cyclops

Nếu bạn không thể đọc hex, thì hãy sử dụng một công cụ để chuyển đổi nó cho bạn.
Thomas Eding

6

Không đề cập đến toán học nền tảng của lập trình máy tính? Lý thuyết đồ thị, lý thuyết số, lý thuyết tập hợp và toán học cụ thể, thường tất cả được gộp lại thành lớp học đau đớn và được dạy kém gọi là "toán học rời rạc" tại trường đại học.

"Thủ thuật bit ngu ngốc" tiết kiệm mọi loại thời gian của chương trình (và chúng cũng thường tương đương với một số thủ thuật chuỗi và đặt thủ thuật), các loại biểu đồ và giao dịch được sử dụng ở mọi nơi (ngay cả khi bạn chỉ chọn các thùng chứa STL), và độ phức tạp thuật toán là chìa khóa để tối ưu hóa khi các ngôn ngữ đạt đến cấp độ cao hơn.


5

Tôi nghĩ rằng ma trận xuất chi là một công cụ khá cần thiết. Các trò chơi thường thú vị hơn khi chúng tiếp cận một số cân bằng chơi không công bằng thú vị và ma trận xuất chi giúp bạn định lượng điều đó trong các trường hợp phức tạp. Tôi đoán bài viết trên wikipedia này cũng tốt như bất kỳ và có khái niệm cần thiết cơ bản trên: http://en.wikipedia.org/wiki/N normal-form_game


Điều này xuất hiện cực kỳ không thực tế với tôi. Bạn có nghĩ Starcraft hay Warcraft 3 đã được cân bằng bằng phương pháp như thế này không? Tôi không nghĩ vậy, tôi tin rằng đó là sự lặp đi lặp lại và chơi đùa, và vá liên tục.
bobobobo

Uh, họ gần như chắc chắn là, các đội quân chiến binh ban đầu đã được sửa đổi các bản sao của nhau có thể được tạo ra với ma trận xuất chi được thiết kế để làm cho chúng cân bằng tổng thể. Sau đó, họ có thể đơn giản dựa trên những gì họ học được để điều chỉnh mọi thứ, nhưng có lẽ họ phải làm lại với starcraft để có được mức cân bằng hợp lý bây giờ khi có ba đội quân khác nhau tham gia, và một lần nữa khi các đơn vị starcraft II được thêm vào. Rõ ràng là bạn không chỉ dừng lại ở mô hình, playtesting thường hiển thị các thuộc tính mới nổi, nhưng ma trận xuất chi là cách ban đầu bạn mô hình phức tạp.
Kzqai

[cần dẫn nguồn]?
bobobobo

1
Đó là cái này: amazon.com/Game-Arch architecture-Design- New-Edition / dp / 0735713634 /. Mặc dù có thể tìm kiếm trong sách của amazon không hoạt động theo cách đó. Dù sao, đó là nơi họ đã vượt qua các ma trận hoàn trả, sử dụng warcraft làm ví dụ và lợi thế để quản lý sự phức tạp rất rõ ràng khiến tôi chuyển đổi ngay lập tức. Điều đó không đảm bảo rằng Blizzard thực sự đã sử dụng phương pháp đó, nhưng họ là những người thông minh, vì vậy họ có thể có một giải pháp toán học ...
Kzqai

... ít nhất là để có thể hiểu được sự cân bằng trong nháy mắt. Rõ ràng bạn cũng muốn thêm thử nghiệm vào đó. Tôi thực sự đã mua cuốn sách về sức mạnh của một cuốn sách nhỏ hơn, cắt giảm có nội dung liên quan đến trò chơi tuyệt vời, bao gồm thảo luận về ma trận xuất chi và các mối quan hệ kéo giấy và tất cả các loại công cụ tuyệt vời, và thất vọng khi thấy rằng trận chung kết cuốn sách là một cuốn sách và đề cập rất nhiều đến lập trình C ++ (không phải là vấn đề của tôi), cũng như các vấn đề quản lý tiêu đề AAA. Mặc dù vậy, mọi thứ trong cuốn sách nhỏ đều rất tuyệt.
Kzqai

4

Hiểu sản phẩm chấm: Nếu hai vectơ có cùng hướng, (theta <90 độ), thì sản phẩm chấm là dương, hoặc nếu không, âm. Nó có thể được sử dụng để kiểm tra bất cứ khi nào người chơi ở trong tầm nhìn (giả sử FOV là 90 độ).

Và khái quát trò chơi 2D của bạn lên kích thước cao hơn. (sử dụng tính toán véc tơ)

Nếu bạn có thể tự thực hiện một công cụ 3D, bạn sẽ ổn.


4

Nó phụ thuộc vào những gì bạn đang làm .

Tất cả các lập trình viên trò chơi nên biết ít nhất là đại số trung học. Điều đó có nghĩa là:

  • Ý thức tốt về số
  • Thoải mái với toán cơ bản (thêm, phụ, nhiều, chia)
  • Lượng giác (sin và cos)
  • Các vectơ, góc giữa các vectơ, sản phẩm chấm, sản phẩm chéo

Lập trình viên đồ họa của bạn phải biết:

Lập trình viên vật lý của bạn phải biết:

  • Tất cả những điều trên và
  • Phương trình vi phân
  • Phương pháp số

3

Bên cạnh các sin và cosin (mà 50-75% lập trình viên mà tôi đã gặp không biết cách sử dụng), hãy tìm hiểu hàm arc-tan ma thuật và cách sử dụng nó để có được góc của bất kỳ vectơ nào.


5
trong hầu hết các trường hợp bạn muốn atan2vì điều này sẽ tự xử lý góc phần tư.
CodeInChaos

0

Tôi ngạc nhiên khi không ai nhắc đến Đệ tứ . Tôi không có nhiều kinh nghiệm với các động cơ khác nhau nhưng ít nhất JME sử dụng nó ở mọi nơi và tôi có ấn tượng rằng chúng là một khái niệm khá quan trọng.


2
er tôi đã đề cập đến tứ phương.
tenpn

Ahh, xin lỗi, tôi đã bỏ lỡ nó
Raoul

3
Đối với 1% lập trình viên trò chơi viết mã hoạt hình cấp thấp trong công cụ kết xuất, bộ tứ là một công cụ hữu ích. Đối với 99% lập trình viên trò chơi khác, họ không thực sự cần thiết.
Skizz

-1

Làm game là mang lại cuộc sống "thực" cho thực tế ảo. Nó là tốt hơn để biết nhiều hơn về thế giới thực / vũ trụ hơn ít hơn :) .. Toán học chỉ là công cụ. Và nếu bạn đang lập một kế hoạch, bạn cũng phải dành thời gian cho việc học trong các kế hoạch.

EDITED: Tôi đã thấy một số hiểu lầm :) .. Tôi nghĩ rằng tập hợp các bài toán mà bạn cần để cai trị, phụ thuộc vào những điều cụ thể những gì bạn muốn mô tả. Không ai biết tất cả mọi thứ. Và cách tốt hơn để làm điều đó là. Không phải để học mọi thứ khi bắt đầu, mà học từng mảnh nhỏ, sử dụng, học hỏi, sử dụng, vv Sau đó, bạn có thể làm điều đó trong quá trình phát triển, nếu bạn có kế hoạch tốt.


1
Có bao nhiêu cuộc sống thực sự trong tetris?
tenpn

Rất nhiều :). Tetris là về tư duy logic dưới sức thuyết phục. Giống như các trò chơi logic khác. Đó là về thực hành. Thực hành nhiều hơn, nhiều khả năng hơn bạn có thể xử lý và vẫn có niềm vui từ nó. Nó có vẻ như là cuộc sống thực đối với tôi :) ...
samboush

3
bạn không có ý nghĩa khi bạn không giải quyết câu hỏi một cách công bằng.
Heath Hunnicutt

@Heath Hunnicutt, Bạn nói đúng.
samboush

3
Tôi thực sự tôn trọng phản ứng đó.
Heath Hunnicutt

-2

Câu trả lời đơn giản: RẤT NHIỀU!

Câu trả lời chi tiết:

Số học, Đại số sơ cấp & tuyến tính, trong hầu hết các trường hợp, Trig, nếu bạn đang tạo một trò chơi 3D, DEFINITELY Giải tích và Vật lý (Vật lý yêu cầu Giải tích)!


3
Bạn có thể làm rõ danh sách một chút? Bạn đang nói "Trig nếu bạn đang tạo một trò chơi 3D" hay "Nếu bạn đang làm một trò chơi 3D, HÃY TỰ TIN tính toán"?
yoozer8
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.