1. Introduction
초보자용 Repeat문과 setFloodColor 컬러링 연습입니다. 대부분 이전 예제에 포함된 내용들입니다만.
FMSLogo에서는 두 개의 함수를 사용해서 색을 칠합니다. 선색 함수와 면색 함수.
1) setPenColor 함수 : 선 색을 결정합니다.
예 :
setPenColor [ 255 0 0]
2) setFloodColor 함수 : 면 색을 결정합니다.
Fill 명령이 추가로 필요합니다.
예 :
setFloodColor [ 0 0 255 ]
......
Fill
※ 면색을 칠할 때에는 Fill이 포함된다는 점에 주의하세요.
뒤에 따라 나오는 숫자 세 개는 각각 R, G, B 값을 나타냅니다.
0 ~ 255까지 허용됩니다.
이 값들은 R, G, B 각각의 빛의 량, 즉 광량을 뜻합니다.
세 값을 서로 섞어서 표현할 때, 빛은 많아지면 많아질수록 흰색이 되고 빛의 양이 적어지면 적어질수록 어두운 검은색이 됩니다.
[ 0 0 0 ] : Black
[ 255 0 0 ] : Red
[ 0 255 0 ] : Green
[ 0 0 255 ] : Blue
[ 0 0 128 ] : 좀 더 어두워진 Blue, 남색.
[ 0 0 45 ] : Black에 Blue 찔끔. 흑청색.
[ 0 0 0 ] : Black
원하는 정확한 색상 선택에 PicPick 소프트웨어가 도움이 됩니다.
.
.
2. Code
to box1
repeat 4 [ fd 15 rt 90 ]
end
to box16
repeat 16 [ box1 coloring1 move1 move2 ]
end
to coloring1
make "R random 255
make "G random 255
make "B random 255
pu rt 45 fd 3
setFloodColor (List :R :G :B ) Fill
bk 3 lt 45
pd
end
to draw
repeat 59 [ box16 move3 ]
HT
end
to main
setup
draw
end
to move1
pu rt 90 fd 15+5 lt 90
pd
end
to move2
rt 5.8
end
to move3
pu lt 120 + 90 fd 120 rt 90 fd 200
rt 15
pd
end
to setup
Home CS PPT PD ST
pu lt 90 fd 300 rt 90 fd 0
pd
end
3. Result
....
4. Notes
FMSLogo에서는 두 개의 함수를 사용해서 색을 칠합니다. 선색 함수와 면색 함수.
1) setPenColor 함수 : 선 색을 결정합니다.
용례 :
setPenColor [ 255 0 0] ;; 선 색이 RED.
repeat 4 [ fd 100 rt 90 ]
2) setFloodColor 함수 : 면 색을 결정합니다.
용례 :
setFloodColor [ 0 0 255 ] ;; 면 색이 Blue.
repeat 4 [ fd 100 rt 90 ]
rt 45 pu fd 3 pd FILL pu back 3 pd lt 45
※ 면색을 칠할 때에는 Fill이 포함된다는 점에 주의하세요.
■ 그리기 과정 정리 ::
선 색을 칠할 때는
1) 펜컬러를 설정하고
2) 그냥 그리기 시작하면 됩니다.
면 색을 칠할 때에는
1) 면 색을 결정하고
2) 도형(※ 닫힌 도형이어야 함)을 그리고,
3) 펜을 들고 그 도형 내부로 이동한 다음,
4) 펜을 내리고(=그리기 시작 대기 상태임)
5) Fill 명령을 실행합니다.
아래 세 개의 숫자는 각각 R(red), G(green), B(blue) 값을 나타냅니다.
[ 255 0 0 ]
255는 가장 큰 값이며, 0 가장 작은 값입니다. 이 값들은 해당 색을 표현하는 데 사용됩니다.
이 값들은 빛의 양, 즉 광량을 뜻합니다. 빛은 광량이 클수록(255에 가까울수록) 흰색에 근접합니다.
R 255, G 255, B 255 상태라면 흰색
R 0, G 0, B 0 상태는 검은색을 의미합니다.
[ 255 0 0] : Red
[ 0 255 0 ] : Green
[ 0 0 255 ] : Blue
[ 0 0 0 ] : Black
[ 255 255 255 ] : White
기타 색상들은 이 값들을 적당히 변경해서 사용합니다.
참고. 정확한 색상 선택에 PicPick 이라는 무료 공개 소프트웨어는 큰 도움이 됩니다.
Q. 1. 위 코드 중 실제 색칠을 담당하고 있는 컬러링 함수(coloring1)는 다음과 같습니다.
to coloring1
make "R random 255
make "G random 255
make "B random 255
pu rt 45 fd 3
setFloodColor (List :R :G :B ) Fill
bk 3 lt 45
pd
end
setFloodColor 명령을 실행하기 전에 PenDown(=PD)이 없습니다. PenUp 상태입니다. 그 상태로 Fill 명령을 적용하면 색이 칠해질까요? 결과에 대한 이유를 생각해 보세요.
■ 컬러링 함수의 이해
to coloring1
make "R random 255
make "G random 255
make "B random 255
pu rt 45 fd 3
setFloodColor (List :R :G :B ) Fill
bk 3 lt 45
pd
end
1) make "R random 255
R은 변수입니다. random 255는 정수 0부터 255 중에서 하나의 숫자를 컴퓨터가 임의로 골라줍니다. random 255는 실제로 실행될 때까지 어떤 숫자가 선택될지 결과를 미리 알 수는 없습니다. 하지만 지정된 범위 내에서 선택됩니다. 여기서는 0과 255를 모두 포함합니다. make "R random 255는 변수 R에 선택된 숫자 값을 저장합니다.
만약 random 255가 209를 선택했다면,
make "R random 255는
make "R 209와 같습니다.
이 명령은 변수 R에 숫자 209를 저장합니다.
■ LOGO의 리스트와 Python의 리스트
(not yet tested. FMSLOGO)
;; 문자열 변수
make "name "James
;; 정수형 숫자 변수
make "x 209
;; 리스트형 변수, 형태는 문자열 변수와 비슷.
make "hello [Hello James]
■ setFloodColor (List :R :G :B )
(List :R :G :B) 표현은 LOGO 리스트를 만드는 표현입니다. 세 변수 R, G, B를 리스트로 만들라는 뜻입니다. 그럼 의미는 다음과 같아집니다.
setFloodColor [ :R : G :B ]
;; 로고에서 리스트는 대괄호를 사용합니다.
setFloodColor 함수는 뒤에 리스트가 옵션으로 반드시 주어져야 합니다.
예를 들면 다음과 같습니다.
setFloodColor [ 0 255 0 ]
;; Green 색으로 칠함.
■ 응용 연습 과제
1) 랜덤 컬러링과 변수 연산의 연결(이전 예제 참고할 것)
2) 채색할 구역이 겹쳐질 때의 Fill 결과는?
■ 응용 연구 과제
1) Alpha 채널을 구현할 수 있는가?
2) Python.Tkinter에서는 .PNG 포맷의 사용이 가능한가? 가능하다면 역시 알파 채널을 구현할 수 있는가?
3) Processing에서의 PNG, SVG 사용 가능 여부와 알파채널의 활용 문제.
4) Julia와 GO 언어는 최근에 이르러 그래픽 처리 영역에서 놀라운 성취를 보여주고 있습니다. Julia.Makie, GO.Fyne.. 등등, 관련 패키지 웹사이틀 참고하세요.
5. 응용 연습 1.
""" 이하 아래 코드는 LOGO가 아니라 파이썬 코드입니다. 파이썬 카테고리에 같은 코드를 올려두었으니 참고하세요.
"""
# Python Turtle Graphic Coloring
# Coded by HiSun. ^.^;
import turtle
win1 = turtle.Screen()
win1.tracer(0)
# For hispeed drawing.
# or win1.tracer(2, 10)
# 스크린 윈도 크기 설정을 생략 시,
# 안드로이드 폰에서는 윈도 모양이
# 기대와는 다를 수도 있다. ^.^;
t = turtle.Pen()
# turtle.tracer(0) not supported
# turtle.delay(0) "
def tri1():
t.fd(20)
t.lt(150)
t.fd(17.3)
t.lt(90)
t.fd(10)
def intotri():
t.pu()
t.rt(10)
t.bk(3)
t.pd()
def outtotri():
t.pu()
t.fd(3)
t.lt(10)
t.pd()
def windmill():
r = 0.2
g = 0.6
b = 0
t.fillcolor(r, g, b)
for _ in range(4): # i to _
t.begin_fill()
tri1()
t.end_fill()
t.lt(30)
r = r + 0.15
b = b + 0.2
t.fillcolor(r, g, b)
def move1():
t.pu()
t.fd(45)
t.pd()
def move2():
t.pu()
t.rt(90)
t.fd(45)
t.rt(90)
t.fd(675)
t.rt(180)
t.pd()
def ready():
t.pu()
t.lt(90)
t.fd(300)
t.lt(90)
t.fd(320)
t.rt(180)
t.pd()
def main():
t.speed(100)
ready()
for _ in range(15): # i to _
for _ in range(15): # i to _
windmill()
move1()
move2()
t.ht()
turtle.done()
# reWritten by J.
main()
6. Files
응용 연습 1의 파이썬 코드는 파이썬 카테고리 포스팅 참고할 것.
7. Ref.
1) Python 내장 도움말.
Happy Programming!
^.^;
'Programming > LOGO' 카테고리의 다른 글
LOGO 중급 연습 : repCount - 003 - if 조건문과 AND (0) | 2025.01.27 |
---|---|
LOGO 중급 연습 : repCount - 002 - 별 그리기 (0) | 2024.12.21 |
LOGO 중급 연습 : repCount - 001 (0) | 2024.11.20 |
LOGO : 변수(Variables) - 018 - 별이 흐르는 밤과 음악 연습 - 1 (0) | 2024.09.08 |
LOGO : 변수(Variables) - 017 - 정오각형(Pentagon) 연습 - 2 (0) | 2024.08.18 |