꽃의 그래프 Florets


31

이 카모마일 꽃을 살펴보십시오.

예쁘지 않나요? 음, 이것이 실제로 하나의 꽃이 아니라고 말하면 어떻게 될까요?

많은 꽃 (해바라기, 카모마일, 데이지 등)은 실제로 꽃 머리에 많은 매우 작은 꽃 (해바라기의 검은 점들)으로 구성됩니다. 이 미니어처 꽃은 작은 꽃이라고 불리며 매우 특별한 방식으로 배열됩니다.

기본적으로 꽃 머리에서 n 번째 작은 꽃의 위치는 (극좌표)입니다.

여기서 c = 1 (137.508도 = 황금 각입니다.이 정확한 정밀도를 사용할 필요는 없습니다.)

이것은 작은 꽃이 Fermat 's Spiral이라고하는 나선으로 형성되게합니다. 작은 꽃의 위치는 피보나치 숫자와도 관련이 있지만, 그것은 또 다른 이야기입니다.

여기 도전이 있습니다. 입력으로 정수 n이 주어지면, 처음 n 플로 렛의 위치를 ​​계산하고 플로팅합니다 . 이것은 이므로 실제로 일종의 창에 점을 표시하거나 일반적인 이미지 형식의 데이터로 STDOUT 또는 파일에 출력하려고합니다. 그 외에도이 과제는 매우 간단해야합니다. 그것은의 , 너무 짧은 코드 승리. GLHF!

출력 결과는 다음과 같습니다.


나선을 거꾸로 그릴 수 있습니까?
lirtosiast

1
파인애플, agauje 및 pinecone과 같은 많은 과일이이 패턴을 표시합니다. 과일이 꽃에서 자라기 때문에 이것은 놀라운 일이 아닙니다. 흥미롭게도 일부 선인장 몸체 도이 패턴을 표시합니다. 내가 가장 좋아하는 것은 Romanesco 브로콜리 프랙탈 : en.wikipedia.org/wiki/Romanesco_broccoli#/media/…
user151841

1
멋지다! 나는 전에 Romanesco 브로콜리를 보았습니다. 프랙탈 패턴이 정말 멋지다고 생각합니다. 어쩌면 나는 그것에 대해 도전 할 수 있습니다 ...
스파게티

답변:


21

TI-BASIC, 34 바이트

TI-83 + / 84 + 시리즈 계산기 용.

Input N
2πe^(-2sinh⁻¹(.5→θstep
AnsN→θmax
"√(θ→r₁
Polar                      ;Displays polar mode graphs to graph screen
Dot                        ;Prevents lines from connecting points
DispGraph                  ;Displays graph screen

이것은 원점의 점을 0 점으로 간주합니다.

1 바이트 sinh⁻¹(토큰 덕분에 2πe^(-2sinh⁻¹(.5황금 각을 라디안으로 표시하는 짧은 방법입니다. 이것은 e^(sinh⁻¹(.5황금비 라는 사실에서 비롯됩니다 .

다음은 N = 50의 스크린 샷입니다.

(예, TI-84 + 의 96x64 흑백 디스플레이 입니다. 최신 컬러 계산기의 해상도는 업그레이드되었지만 여전히 iPhone의 픽셀은 3.7 %에 불과합니다.)

좌표가 표시되지 않은 경우

를 눌러 TRACE각 지점을 단계별로 진행하십시오.

좌표로


5
TI-BASIC은 극좌표를위한 자연스러운 선택입니다.
Conor O'Brien

바이트 수를 어떻게 결정 했습니까? 34 개가 넘는 것 같습니다. sinh⁻¹설명 된 대로 미리 프로그램 된 키 는 1 바이트 이상으로 계산됩니다.
DavidC

@DavidCarraher TI-BASIC은 토큰 화됩니다 . 이 토큰 은 모두 계산기 메모리에서 각각 1 바이트입니다.
lirtosiast

1
Mem (2nd-> +)-> 7로 이동하여 프로그램의 바이트 수를 결정할 수 있습니다. 그런 다음 계산기의 모든 프로그램 목록과 차지하는 바이트 수를 볼 수 있습니다. 모든 TI-BASIC 프로그램은 9 바이트 헤더 + 이름의 바이트 수를 가지므로 적절한 바이트 수를 얻으려면 빼십시오.
스파게티

-2sinh ^ -1의 구문 오류
username.ak

15

파이썬 2, 85 82 81 바이트

from pylab import*
for i in arange(0,input(),2.39996):polar(i,sqrt(i),'o')
show()

마리 누스로 1 바이트 단축

라디안의 황금 각 사용. 137.508을 대신 사용하면 바이트 길이는 동일하지만 어떻게 든 좋아 보이지 않습니다. pylab을 사용하여 극좌표 플롯을 생성합니다. 아래는 300 (이전 버전의 경우)이 입력이고 7000 (최신 버전의 경우)이 입력 인 경우입니다. 바이트 수를 77로 낮추기 위해 각도를 2.4로 올릴 수 있습니다.

입력이 300 일 때 이전 버전

입력이 7000 일 때 최신 버전

다음은 그리드와 축을 제거하여 깔끔한 모양을 만드는 더 긴 버전입니다.

from pylab import *
def florets(n):
    for i in arange(0, n, 2.39996):polar(i, sqrt(i), 'o')
    grid(0)#turn off grid
    xticks([])#turn off angle axis
    yticks([])#turn off radius axis
    show()

색상이 다른 이유는 각 점이 개별적으로 그려지고 자체 데이터 세트로 취급되기 때문입니다. 각도와 반지름이 목록으로 전달되면 하나의 세트로 취급되고 하나의 색상이됩니다.


1
나는 이것이 가장 예쁜 대답이라고 생각합니다. 중앙에 선명한 나선 패턴이있는 것이 매우 좋습니다.
El'endia Starman

for리스트 이해 대신 일반 루프를 사용하여 바이트를 저장할 수 있습니다. 그것은 자신의 줄에해야하지만 것 ;그리고 \n그것은 중요하지 않습니다, 그래서 같은 길이입니다. 즉 : from pylab import*- for i in arange(0,input(),2.39996):polar(i,sqrt(i),'o')-show()
스 marinus

@ marinus 그러나 더 이상 슈퍼 쿨 한 라이너가 아닙니다! 감사합니다. 추가했습니다.
상태

14

블리츠 2D / 3D , 102 바이트

(이 사이트에서 가장 최초의 블리츠 2D / 3D 답변!)

Graphics 180,180
Origin 90,90
n=Input()
For i=1To n
t#=i*137.508
r#=Sqr(t)
Plot r*Cos(t),r*Sin(t)
Next

입력은 50창 을 채 웁니다. (예,을 수행하여 2 바이트를 줄일 수는 Graphics 99,99있지만 시각적으로 흥미 롭거나 유용하지는 않습니다.)

50 개의 작은 꽃

더 예쁜 버전 (그리고 더 멋지게 종료) :

Graphics 400,400
Origin 200,200

n=Input("How many florets? ")

For i = 1 To n
    t# = i * 137.508
    r# = Sqr(t)

    Oval r*Cos(t)-3,r*Sin(t)-3,7,7,1
Next

WaitKey
End

200 개의 작은 꽃 예


이봐 요! 나는 이것을 읽기 전에 기습에 대해 몰랐다.
Timothy Groote

와우, Blitz3D는 약 15 년 전에 저의 첫 언어였습니다. : D ... sigh .. : '(
noncom

기본으로 학위? "흥미로운"...
lirtosiast

1
@noncom : 8 년 전 제가 정말로 중요한 프로그램을 만든 최초의 언어였습니다. 오늘날에도 여전히 최고의 2 대 언어 중 하나입니다 (다른 하나는 Python).
El'endia Starman

1
@noncom, 저도 제 첫 언어였습니다. 나는 지금 그것을 전문적으로 사용하는 느낌이 궁금합니다.
James Webster

12

매스 매 티카, 43 42 바이트

ListPolarPlot@Array[(2.39996#)^{1,.5}&,#]&

이것은 정수 인수를 취하는 명명되지 않은 함수입니다.

여기에 이미지 설명을 입력하십시오
스크린 샷은 이전 버전을 사용하지만 출력은 동일하게 보입니다.

Mathematica에는 실제로 GoldenAngle보다 정확한 결과 를 위한 내장 기능이 있지만 그보다 깁니다 2.39996.


GoldenAngle! Mathematica 10.2의 새로운 기능입니까?
alephalpha

@alephalpha p.
Martin Ender

11

MATLAB, 42 바이트

t=2.39996*(1:input(''));polar(t,t.^.5,'.')

입력 숫자를 가져오고 1에서 해당 숫자까지의 범위를 만듭니다.

범위에 라디안의 황금 각을 곱합니다 (사용 된 값은 137.508도에서 6sf보다 실제 값에 더 가깝습니다).

그런 다음 점을 사용하여 극좌표 차트에 세타r 을 플로팅 합니다. 여기에 2000 포인트가 표시됩니다

극선

약간 더 예쁘게 보이는 그래프 (격자 선 없음)는 다음 코드입니다.

t=2.39996*(1:input(''));[x,y]=pol2cart(t,t.^.5);plot(x,y,'.');axis equal

비록 31 바이트를 희생해야합니다. 여기 다시 2000 포인트로 표시됩니다

음모


나는 polar해결책을 좋아한다 . t.^.5instad of sqrt(t)! 를 사용하여 2 바이트를 절약 할 수 있다고 생각합니다 !
flawr

@flawr 감사합니다. 실제로 2 바이트가 저장되었습니다.
Tom Carpenter

8

R, 58 55 54 바이트

x=2.39996*1:scan();plotrix::radial.plot(x^.5,x,rp="s")

plotrix패키지를 설치 해야 하지만 네임 스페이스를 명시 적으로 참조하므로 패키지를 가져올 필요가 없습니다.

언 골프 드 :

# Read a number of STDIN
n <- scan()

x <- 2.39996*(1:n)

# The rp.type = "s" option specifies that we want to plot points rather
# than lines (the default)
plotrix::radial.plot(lengths = sqrt(x), radial.pos = x, rp.type = "s")

n = 1500의 출력 예 :

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

plannapus 덕분에 3 바이트가 절약되었습니다!


8

R, 55 54 바이트

t=1:scan()*2.39996;r=t^.5;plot(r*cos(t),r*sin(t),as=1)

n = 1000의 결과는 다음과 같습니다.

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

편집 : @AlexA 덕분 에 인수 as대신 부분 일치 () 대신 1 바이트 asp를 절약했습니다!


6

R, 48 47 바이트

나는 이것이 지금까지 다른 R 솔루션과 충분히 다르다고 생각합니다. 이것은 복잡한 벡터를 사용하여 좌표를 구성합니다. t와 t의 sqrt는 계수와 인수 매개 변수에 들어가고 x, y는 실수와 허수에서 가져옵니다. @AlexA에게 감사합니다. 바이트.

plot(complex(,,,t^.5,t<-1:scan()*2.39996),as=1)

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


1
다를뿐 아니라 더 짧습니다! +1.
El'endia Starman

함수 매개 변수의 부분 일치를 사용하여 바이트를 저장할 as수 있습니다 asp. 대신 사용될 수 있습니다 .
Alex A.

@AlexA. 고마워 알렉스, 나는 그 것들을 테스트하는 것을 잊고있다 :)
MickyT

3

HTML + 자바 스크립트 179

<canvas id=C></canvas><script>n=1500,C.width=C.height=400,T=C.getContext('2d');for(n=prompt(M=Math);n--;)r=M.sqrt(t=n*2.4)*9,T.fillRect(M.cos(t)*r+200,M.sin(t)*r+200,2,2)</script>


2

줄프, 25 바이트

yG@@KyoΜzXDyOUH*Hm°yT'.}

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

(n = 5000 출력)

온라인으로 사용해보십시오. (나선형은 작음에 유의하십시오)

이 도전 후에 Jolf가 시작된 이후 비경쟁. ISO-8859-7로 인코딩 된 경우 25 바이트이며 인쇄 할 수없는 하나 (여기서는 16 진 덤프)가 포함됩니다.

0000000: 7947 4096 404b 796f cc7a 5844 794f 5548  yG@.@Kyo.zXDyOUH
0000010: 2a48 6db0 7954 272e 7d                   *Hm.yT'.}

설명

yG@@KyoΜzXDyOUH*Hm°yT'.}
yG@@K                      goto (150,75) (center of the canvas)
     yo                    set current location as the origin
       MzX                 map over range 1...input
          D                start of function
           yO              goto polar coordinates ....
             UH            radius: square root of argument
               *Hm°        angle: argument times golden angle
                   yT'.    draw a dot there
                       }

2
잘. 이상한 인코딩에도 불구하고 지금 Jolf를 살펴 봐야한다고 생각합니다.
lirtosiast


1

MATL , 20 바이트 (비경쟁)

언어가 도전 과제를 게시하기 때문에 경쟁이 아닌 것으로 표시

:2.4*tX^wJ*Ze*'.'&XG

MATL Online 에서 사용해보십시오 !

황금 각 137.708deg = pi*(3-sqrt(5))rad = 2.39996...rad는 rad로 근사됩니다 2.4.

다음 버전 ( 25 바이트 )은 double부동 소수점 정밀도 까지 정확한 값을 사용합니다 .

:YPI5X^-**tX^wJ*Ze*'.'&XG

MATL Online 에서 사용해보십시오 !


1

Tcl / Tk, 114

grid [canvas .c]
proc P n {time {incr i
.c cr o [lmap h {cos sin cos sin} {expr sqrt($i*2.4)*$h\($i*2.4)+99}]} $n}

사용 예 :

P 1024

창을 출력

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.