Thuật toán xây dựng các góc của đa giác đều, n mặt


10

Tôi đã giải quyết vấn đề này bằng cách sử dụng nhiều kết hợp từ khóa, nhưng thật ngạc nhiên, tôi không thể tìm thấy thuật toán xây dựng một đa giác đều, một mặt đều đặn thành một vòng tròn đã cho, nghĩa là tìm tọa độ cho các điểm góc n . Tất cả những gì tôi có thể tìm thấy là hướng dẫn cách thực hiện bằng la bàn vật lý và thước thẳng hoặc trình cắm trình duyệt tương tác mà không cần nguồn.

Vậy tôi có thể tìm thấy một thuật toán như vậy ở đâu?


2
Hãy để tôi khôi phục niềm tin của bạn vào Google. ;-) Thứ tư nhấn cho "thuật toán đa giác thường xuyên": gamedev.net/topic/... "Sau đó, sử dụng lượng giác cơ bản, chọn n điểm cách nhau equidistantly xung quanh chu vi của vòng tròn (tức là - nếu n là 3, chọn 3 điểm trên chu vi cách nhau 120 độ). " Đó chính xác là những gì mã của Kevin làm.
Eric

Câu trả lời:


15

Với iviệc đi từ 0 to n-1bao gồm:

pointX[i] = ( sin( i / n * 2 * PI ) * radius ) + xOffset;
pointY[i] = ( cos( i / n * 2 * PI ) * radius ) + yOffset;

Chỉnh sửa: Như Lars Viklund đã đề cập trong các nhận xét, điều này chỉ an toàn trong các ngôn ngữ như javascript trong đó phép chia số nguyên trả về số dấu phẩy động thay vì số nguyên. Trong các ngôn ngữ khác, trước tiên bạn nên bỏ iqua một float.


3
Coi chừng cái bẫy của phép chia tích phân trong i / n trong các ngôn ngữ trong đó phép chia số nguyên mang lại một số nguyên.
Lars Viklund

Aah một điểm rất tốt, tôi sẽ thêm lời cảnh báo đó vào câu trả lời.
Elva

Điều này không cần phải nói, nhưng bạn cũng sẽ muốn đề phòng trường hợp n * 2 * PI == 0hoặc bạn sẽ có một đa giác không vui :(.
Zack The Human

Chặn kỳ lạ tràn ra n duy nhất với n * 2 * PI == 0tôi có thể nghĩ là 0, theo như tôi biết là không xác định, giống như i / 0. Vì vậy, không có vấn đề gì phải không? :)
Elva
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.