시 에르 핀 스키 화살촉 곡선 그리기


14

소개

시어 핀 스키 화살촉 곡선은 한계가 시어 핀 스키의 삼각형의 곡선이다.

먼저 다음과 같이 시작합니다.

 _
/ \

그런 다음 각 줄은 첫 번째 줄의 회전 버전으로 바뀝니다.

  _
 / \
 \ /
_/ \_

다음:

     _
    / \
    \ /
   _/ \_
  /     \
  \_   _/
 _  \ /  _
/ \_/ \_/ \

시 에르 핀 스키 화살촉 곡선 진화

당신의 작업

숫자 n이 주어지면 Sierpinski Arrowhead Curve 의 n 번째 반복을 출력하십시오 .

0 또는 1 색인을 선택할 수 있지만 답변에 지정하십시오.

위의 형식으로 이미지를 생성하거나 Ascii Art를 사용할 수 있습니다.

이 곡선을 생성하기 위해 내장 기능을 사용할 수 없습니다.

이것은 이므로 바이트 수가 가장 적은 코드가 이깁니다.

답변:


14

옥타브 240 236 221 바이트

이것은 여기에 사용 된 것과 동일한 아이디어로 만들어 졌지만 sierpinsky 화살촉 곡선에 맞게 변경해야했습니다.

m=input(0);g=2*pi/6;u=cos(g);v=sin(g);A=[1,0];B=[u,v];C=[-u,v];D=-A;E=-B;F=-C;for k=1:m;f=[E;F;A];b=[A;B;C];A=[B;A;F];d=[C;D;E];C=[D;C;B];E=[F;E;D];B=b;D=d;F=f;end;A=[0,0;cumsum(A)];plot(A(:,1),A(:,2));axis off;axis equal

여기에 이미지 설명을 입력하십시오


u=.5;v=3^u/2;B=[u,v];C=[-u,v];A=C<0;16 바이트가 짧습니다 axis off equal.
Stewie Griffin

3

Haskell + 다이어그램, 176 바이트

import Diagrams.Prelude
import Diagrams.Backend.SVG
g n=renderSVG"a"(mkWidth 99).strokeT.a n
a 0=hrule 1
a n|b<-a(n-1)=b%6<>b<>b%(-6);a%n=rotateBy(1/n).reflectY$a::Trail V2 Double

"a"라는 투명한 배경으로 svg 파일을 만듭니다.

g 0수평 라인 출력 g 1이다 /¯\.

여기에 이미지 설명을 입력하십시오


좋아요, 몰랐어요 Diagrams!
flawr

@flawr, 훌륭하지만 일반적인 Haskell 그래픽 프로그램 경고가 적용됩니다. plot() 창을 열 때와 동등한 것을 호출하는 것이 좋습니다 .
Angs

2

MSWLogo (버전 6.5b), 102 바이트

두 함수 걸린다 shapeL, shapeR주어진를여기 추가 인수를 추가하여 병합합니다 :a.이 함수는 부정 될 때 반대 함수를 호출합니다.

to s :n :a :l
if :n=0[fd :l stop]
rt :a
s :n-1(-:a):l
lt :a
s :n-1 :a :l
lt :a
s :n-1(-:a):l
rt :a
end

s반복 횟수가 걸리는 함수 가 정의되었습니다.:n (1 기반), angle :a, length:l . :a방향이 올바른지 확인하기 위해 두 인스턴스에서 부정 된 각도로 더 낮은 반복을 호출하는 것이 재귀 적 입니다.

  • rt :a, lt :a왼쪽으로 거북이 (경로가 추적 된 삼각형)를 오른쪽으로 회전:a 도.
  • fd :l 거북이를 앞으로 움직입니다 :l 단계별로 입니다.

이 함수는 :a60과 같이 호출됩니다 .

화살촉

여기에, repeat내장 된 카운터, 기본적으로 FOR 루프입니다 repcount.pu그리고 pd그 위치가 세트되는 동안 사용 도면에서 거북 중지 평균 "펜 업"및 "펜 다운"setxy .

각 반복의 도면은 길이 호출 된 :l동일한 power 2 (7-repcount)기하 급수적으로 감소하는; 이는 :l재귀 단계에서 정의가 동일하게 사용되기 때문에 고정 된 :l출력의 전체 크기는로 기하 급수적으로 증가하기 때문입니다 :n.


이것은 작업에 적합한 언어이지만 기술적으로는 추가 데이터가 허용되지 않으므로 답에 60을 인코딩하는 것이 이상적입니다.
Neil

@Neil 그래서 나는 60바이트 수에 포함합니까?
Monica

나는 그것이 그렇게 단순하다는 것을 확신하지 못하지만, 나는 언어를 스스로 모른다.
Neil

1

파이썬 2, 124 바이트

Wikipedia 기사의 코드를 기반으로합니다.

from turtle import*
def c(o,a):
 if o:o-=1;c(o,-a);lt(a);c(o,a);lt(a);c(o,-a)
 else:fd(9)
n=input()
if n%2==0:lt(60)
c(n,60)

차수 0은 직선입니다.


60도 각도를 사용하도록 코드를 변경해야합니다. 그렇지 않으면 Sierpinsky 삼각형과 비슷하지 않습니다. 또한 방향은 순서에 따라 변경되며, 생각하지 않습니다. trinket.io/python/a803546939
mbomb007

로고 답변은 각도를 매개 변수로 사용하는 기능도 제공하므로 괜찮습니다. 오리엔테이션이 진행되는 한 회전 한 그대로의 커브입니다.
BookOwl

그러나 로고 답변은 항상 같은 회전입니다. 귀하의 주문은 각 주문마다 다른 회전이며 모두 동일하지는 않습니다. 이건 괜찮아요 질문에 포함 된 그림을보십시오.
mbomb007

도전은 회전이 동일해야한다는 것을 어디에서 말하는가?
BookOwl

1
모든 수학 전공은 한계가 수렴해야 함을 알 수 있습니다. 당신은하지 않습니다.
mbomb007

1

Mathematica / Wolfram 언어 73 바이트

s=1;Region@Line@AnglePath[Nest[Join@@({#,s=-s,s}&/@#)&,{#~Mod~2},#]Pi/3]&

간단한 설명 :
AnglePath [{θ1, θ2, θ3 ,…}]는 {0,0}에서 시작하는 경로에 해당하는 2D 좌표 목록을 제공 한 다음 연속 상대 각도 θi에서 일련의 단위 길이 단계를 수행합니다.

n = 1

Graphics@Line@AnglePath[60°{1,-1,-1}]

n = 2

Graphics@Line@AnglePath[60°{0,1,1, -1,-1,-1, -1,1,1}]

n = 3

Graphics@Line@AnglePath[60°{1,-1,-1, 1,1,1, 1,-1,-1, -1,1,1, -1,-1,-1, -1,1,1, -1,-1,-1, 1,1,1, 1,-1,-1}]

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오



0

자바 스크립트 (ES6), 180 바이트

f=(n,d=0,r=n=>` `.repeat(n))=>n?f(--n,d=3-d%3).map(s=>r([l=s.length/2,0,1,~n&1][d]+l)+s+r([,1,0,~n&1][d]+l)).concat(f(n,d+1).map(s=>s+r(!(d%3))+a.shift(),a=f(n,d+2))):[`_/\\`[d%3]]
<input type=number min=1 oninput=o.textContent=f(this.value).join`\n`><pre id=o>

문자열 배열을 반환합니다. 간격을 제대로 확보하는 것이 가장 어려운 부분이었습니다! 205 바이트의 순수 문자열 버전 :

f=(n,d=0,r=n=>` `.repeat(n))=>n?f(--n,d=3-d%3).replace(/.+/g,s=>r([l=s.length/2,0,1,~n&1][d]+l)+s+r([,1,0,~n&1][d]+l))+`\n`+f(n,d+1).replace(/.+/g,s=>s+r(!(d%3))+a.shift(),a=f(n,d+2).split`\n`):`_/\\`[d%3]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.