어떻게 작동합니까?
Sierpinski 카펫은 정사각형으로 시작합니다. 이 사각형은 9개의 동일한 부분으로 나뉩니다. 가장 작은 작은 정사각형은 원래의 큰 정사각형에서 제거됩니다. 그런 다음 나머지 사각형을 다시 9개의 동일한 부분으로 나누고 각 사각형에서 가장 중심에 있는 사각형을 제거합니다. 이 과정을 반복하면 아름다운 시에르핀스키 카펫 패턴이 관찰됩니다.
검정색 사각형으로 시작한다고 가정해 보겠습니다.
9등분하여 중앙 사각형을 제거합니다.
이 과정을 반복하면 추가로 이어집니다. 이런 식으로.
이 동영상 .
코드가 어떻게 생겼는지 살펴보겠습니다.
# 필수 모듈 가져오기
가져오기
numpy as np
PIL
가져오기
이미지
# 총 프로세스 반복 횟수
총계
=
7
# 이미지 크기
크기
=
<코드 클래스 = "값"> 3 <코드 클래스 = "키워드"> * <코드 클래스 = "키워드"> * <코드 클래스 = "일반" > 총
# 이미지 생성
정사각형
<코드 클래스 = "키워드"> = <코드 클래스 = "일반"> np.empty ([크기, 크기, <코드 클래스 = "값"> 3 코드> <코드 클래스 = "일반">], dtype <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> np.uint8)
색상
=
np.array ([
255
<코드 클래스 = "일반">, <코드 클래스 = "값"> 255 <코드 클래스 = "일반">, <코드 클래스 = "값 "> 255 <코드 클래스 ="일반 ">], dtype <코드 클래스 ="keyw ord"> = <코드 클래스 ="일반 "> np. uint8)
# 검정색으로 채우기
<코드 클래스 = "일반"> square.fill ( <코드 클래스 = "값"> 0 <코드 클래스 = "일반">)
< br> for
i
in
범위
(
0
, 총계 < /코드> <코드 클래스 = "키워드"> +
<코드 클래스 = " 값 "> 1 <코드 클래스 ="일반 ">):
스텝다운
=
3 코드> <코드 클래스 = "키워드"> * 코드> <코드 클래스 = "키워드 "> *
<코드 클래스 ="일반 "> (총 <코드 클래스 ="키워드 "> - i)
for
x
범위
(
0
<코드 클래스 = "일반">, <코드 클래스 = "값"> 3 <코드 클래스 = "키워드"> * <코드 클래스 = "키워드 "> * i):
# 중앙 사각형 확인
if 코드> <코드 클래스 ="일반 "> x
<코드 클래스 ="키워드 ">% <코드 클래스 = "값"> 3 <코드 클래스 = "키워드"> = <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 1 <코드 클래스 = "일반">:
for
y
범위 코드> <코드 클래스 ="일반 "> (코드> <코드 클래스 = "값"> 0
<코드 클래스 = "일반">, <코드 클래스 = "값"> 3 <코드 클래스 = "키워드"> * <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> i):
if
y
%
3
<코드 클래스 = "키워드"> = <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 1 :
# 색상 변경
정사각형 [y
*
스텝다운: (y
+
<코드 클래스 = "값"> 1 <코드 클래스 = "일반">) <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> 스텝다운, x <코드 클래스 = "키워드"> * <코드 클래스 = "일반"> 스텝다운: (x <코드 클래스 = "키워드" > + < /코드> <코드 클래스 = "값"> 1 코드> <코드 클래스="일반">) 코드> <코드 클래스 ="키워드 "> * <코드 클래스 ="일반 "> 스텝다운] =
색상
# 결과 이미지 저장
save_file
=
"sierpinski.jpg"
Image.fromarray(정사각형) .save(저장 _file)
# 콘솔에 표시
i
=
이미지.
열기
(
" sierpinski.jpg "
<코드 클래스 ="일반 ">)
<코드 클래스 ="일반 "> i.show ()
출력:
7번 반복한 시에르핀스키 카펫입니다. 다른 언어에 대한 코드는 rosettacode 에서 얻을 수 있습니다.