Đa giác xoắn ốc


8

nhập mô tả hình ảnh ở đây

Vẽ một loạt các đa giác được kết nối như hình đa giác ở trên.

Tuy nhiên, những gì hình ảnh trên không hiển thị là hình xoắn ốc được hình thành bởi các đỉnh liên tiếp:

nhập mô tả hình ảnh ở đây

Hạn chế của những điều này là chỉ có 1 vòng xoắn được đánh dấu. Bạn nên đánh dấu tất cả các hình xoắn ốc. Điều này có thể được thực hiện bằng cách xoay từng vòng xoắn ốc được hiển thị ở trên để có một vòng xoắn bắt đầu từ mỗi đỉnh của đa giác lớn nhất.

Tất cả các hình xoắn ốc nên là một màu, trong khi phần còn lại của hình ảnh khác.

Đa giác trong cùng nên hoàn toàn là màu của hình xoắn ốc.

Quy tắc

  • Bạn sẽ nhận được các đối số {n, s, p, a} trong một hàm hoặc chương trình
  • n = số lần lặp vào trong (số đa giác)
  • s = các cạnh của đa giác (thông thường) (bạn có thể giả sử n> = 3)
  • p = (khoảng cách tuyến tính từ một đỉnh của đa giác A đến đỉnh "bên trong" tương ứng ngược chiều kim đồng hồ của nó) / (tổng chiều dài của cạnh A). Vì vậy, đối với sơ đồ, p sẽ là khoảng 1/3 vì mỗi đa giác bên trong gặp cạnh đa giác lớn hơn ở khoảng 1/3 đường đi qua phía đó.
  • a = bán kính (đăng ký) của đa giác bên ngoài

Giới hạn của bất kỳ giá trị nào của n, s, p hoặc a đều dựa trên những gì có thể được coi là loại hình vẽ này của con người. (ví dụ: không có vòng tròn bóng mờ) cũng như ý nghĩa thông thường (s> = 3, n> = 1)

Chúc bạn chơi golf vui vẻ! Chương trình ngắn nhất sẽ thắng.


1
Là tham số ptuyến tính theo góc hoặc trong khoảng cách giữa hai đỉnh?
TheSpiniteInquisition

Xin lỗi vì sự nhầm lẫn, hy vọng các chỉnh sửa sẽ làm sáng tỏ mọi thứ.
Căng thẳng Maniac

Bạn nên tô màu nó một màu khác với các dòng khác. Vì vậy, mỗi bên sẽ có 2 màu - một màu đi qua nó và phần còn lại là một màu khác nhau.
Căng thẳng Maniac

@ MartinBüttner Tôi nghĩ rằng anh ta có nghĩa là tất cả các hình xoắn ốc (phần theo chiều kim đồng hồ của tất cả các mặt) phải là màu nổi bật (như màu đỏ) và phần còn lại của bên phải là màu nền trước (như màu đen.) Điều này sẽ tạo ra shình xoắn ốc màu đỏ ngược chiều kim đồng hồ . Tuy nhiên, những gì còn lại sẽ là hình xoắn ốc màu đen s theo chiều kim đồng hồ ! StretchManiac, đây là một câu hỏi hay nhưng chúng tôi thực sự cần một hình ảnh ví dụ để xem ý của bạn là gì. Nâng cao và đóng cửa.
Cấp sông St

Mở rộng, mặc dù sẽ rất hữu ích khi xác nhận nếu đa giác trong cùng nên được lấp đầy (tôi hiểu là không nên.)
Level River St

Câu trả lời:


13

Toán học, 218 206 byte

{n,s,p,a}=Input[];t=0;Graphics[(c=Array[a{Cos[u=t+2Pi#/s],Sin@u}&,s+1];m=(f=p#2+(1-p)#&)@@c;a=Norm@m;t=ArcTan@@m;k=#;{Line@{#,x=f@##},If[k<n,Red],Line@{x,#2}}&@@@Thread@{c,RotateLeft@c})&~Array~n,Axes->1>0]

Yêu cầu đầu vào là một mảng như được định nghĩa trong câu hỏi, ví dụ {20, 7, 0.5, 100}:

nhập mô tả hình ảnh ở đây

hoặc là {20, 5, 0.333, 100}

nhập mô tả hình ảnh ở đây

Những hình ảnh này vẫn sử dụng màu đỏ và xám từ phiên bản trước, nhưng phiên bản mới sử dụng màu đen cho các hình xoắn ốc ngược chiều kim đồng hồ và màu đỏ cho phần còn lại.

Tôi đã bao gồm một trục, bởi vì nếu không thì atham số này là vô nghĩa với đồ họa vector. Tôi cũng đã giải thích pnhư một phép nội suy tuyến tính ở vị trí, không phải theo góc.

Ung dung:

{n, s, p, a} = Input[];
t = 0;
Graphics[
 (
    c = Array[a {Cos[u = t + 2 Pi #/s], Sin@u} &, s + 1];
    m = (f = p #2 + (1 - p) # &) @@ c;
    a = Norm@m;
    t = ArcTan @@ m;
    k = #;
    {Line@{#, x = f@##}, If[k < n, Red], Line@{x, #2}} & @@@ 
     Thread@{c, RotateLeft@c}
    ) &~Array~n
 ,
 Axes -> 1 > 0]
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.