본문 바로가기
Programming/LOGO

LOGO : 변수(Variables) - 014 - LevelMeterBox

by The Programmer 2024. 6. 16.

1. Introduction

향후 애니메이션을 가정하고 레벨 미터를 만들어보겠습니다. 상자Box를 그리는데 가로 세로 길이가 다릅니다. 대략 다음과 같이 생겼습니다.

 

 

 

2. Code

2-1. Level Meter Basic

 

;; 레벨 미터를 그리기 위한 가장 기본 코드입니다.

 

 ▶ 소스 코드는 다음 '더보기' 클릭.

 

더보기

;; 2-1. Level Meter Basic

 

to box1
    repeat 2 [ fd 100 rt 90 fd 12 rt 90 ]
end

to box24
    repeat 24 [ box1 move1 ]
end

to draw
    box24 HT
end

to gotoStartingPosition
    pu lt 90 fd 470 rt 90 pd
end

to main
    setup
    draw
end

to move1
    pu rt 90 fd 17 lt 90 pd
end

to setup
    Window CS Home PPT PD ST
    gotoStartingPosition
end

 

2-2. Result

 

[ 그림 14-2-2. Level Meter Basic ]

 

 

2-3. Level Meter Curved

 

;; 기본 레벨 미터의 쉬운 변화형입니다. 곡선 형태로 약간 휘어지게 이렇게 만들 수 있습니다.

;; 좀 더 각도를 크게 하면 원형에 가깝게도 할 수 있을 듯.

 

 ▶ 소스 코드는 다음 '더보기' 클릭.

더보기

;; 2-3. Level Meter Curved

 

to box1
    repeat 2 [ fd 100 rt 90 fd 12 rt 90 ]
end

to box50
    repeat 50 [ box1 move1 ]
end

to draw
    vLine1
    returnLeft
    lineFeed
    rt 49 box50 HT
end

to goStartingPosition
    pu lt 90 fd 470 rt 90 pd
end

to lineFeed
    pu back 65
    pd
end

to main
    setup
    draw
end

to move1
    pu rt 90 fd 20 lt 90 pd
    lt 2
end

to returnLeft
    pu lt 90 fd 920 rt 90 pd
end

to setup
    Window CS Home PPT PD ST
    goStartingPosition
end

to vLine1
    rt 90 fd 940 lt 90
end

 

2-3. Level Meter Curved 결과

 

[ 그림 14-2-2. Level Meter Curved ]

 

 

2-4. Level Meter Animation A

 

;; 레벨 미터를 활용한 간단한 컬러 애니메이션입니다.

;; 같은 자리 덮어쓰기 방식으로 색상만 바꾸어서 반복 그리기 방식의 애니메이션입니다.

;; 반복 횟수만큼만 애니메이션이 진행됩니다.

;; 단순하게 색상만 바꾸는 예제입니다.

;; 색상 관련 코드는 이전 예제의 것과 거의 같습니다.

 

 ▶ 소스 코드는 다음 '더보기' 클릭.

더보기

;; 2-4.  Level Meter Animation A

 

to box1
    repeat 2 [ fd 100 rt 90 fd 12 rt 90 ]
end

to box24
    repeat 24 [ box1 fillColor1 move1 ]
end

to boxBlock1
repeat 300 [ box24 move2 ]    ;; 필요에 따라 이 숫자를 줄이거나 늘리세요.
end

to draw
    boxBlock1 HT
end

to fillColor1
  moveIn setColor1 Fill moveOut
end

to gotoStartingPosition
    pu lt 90 fd 470 rt 90 fd 200 pd
end

to main
    setup
    draw
end

to move1
    pu rt 90 fd 17 lt 90 pd
end

to move2
    pu lt 90 fd 408 rt 90 pd
end

to moveIn
    PU RT 45 FD 3 PD
end

to moveOut
    PU BK 3 LT 45 PD
end

to setColor1
    make "cR random 256    ;; 0~255 사이의 아무 값이나 뽑아서 cR 변수에 저장합니다. 나머지도 거의 비슷합니다.
    make "cG random 256    ;; 주의. 256은 포함되지 않습니다.
    make "cB random 256
    make "myList (List :cR :cG :cB)
    setFC :myList
end

to setup
    Window CS Home PPT PD ST
    gotoStartingPosition
end

 

2-5. Level Meter Animation A 결과

 

 

 

(tbc ......)

 

 

3. Extended A

여기서는 위 코드를 이용한 다양한 응용 연습을 해보겠습니다.

 

 

3-1. 응용 연습 A 

 

 ▶ 소스 코드는 다음 '더보기' 클릭.

 

더보기

;; 3-1. 응용 연습 A 

 

to box1
    repeat 2 [ fd 50 rt 90 fd 12 rt 90 ]
end

to box24
    repeat 24 [ box1 fillColor1 move1 ]
end

to boxBlock1
    repeat 13 [ box24 lt 15 move2 ]
end

to draw
    boxBlock1 HT
end

to fillColor1
  moveIn setColor1 Fill moveOut
end

to gotoStartingPosition
    pu lt 90 fd 650 rt 90 fd 100 pd
end

to main
    setup
    draw
end

to move1
    pu rt 90 fd 17 lt 90 pd
end

to move2
    pu lt 90 fd 408 rt 90 back 62 pd
end

to moveIn
    PU RT 45 FD 3 PD
end

to moveOut
    PU BK 3 LT 45 PD
end

to setColor1
    make "cR random 256    ;; 0~255 사이의 아무 값이나 뽑아서 cR 변수에 저장합니다. 나머지도 거의 비슷합니다.
    make "cG random 256    ;; 주의. 256은 포함되지 않습니다.
    make "cB random 256
    make "myList (List :cR :cG :cB)
    setFC :myList
end

to setup
    Window CS Home PPT PD ST
    gotoStartingPosition
end

 

3-1. 응용 연습 A Result

 

[ 그림 14-3-1. 응용연습 A ]

 

 

 

3-3. 응용 연습 B

 

특별 전역 변수 repCount를 활용하여, 단색 지정 방식으로 그리면 다음과 같습니다. 이 방법을 잘 알아두세요.

 

 ▶ 소스 코드는 다음 '더보기' 클릭.

 

더보기

;; 3-3. 응용 연습 B

 

to box1
    repeat 2 [ fd 100 rt 90 fd 12 rt 90 ]
end

to box24
    repeat 24 [ box1 fillColor1 move1 ]
end

to draw
    box24 HT
end

to fillColor1
  moveIn setColorBlue Fill moveOut
end

to gotoStartingPosition
    pu lt 90 fd 470 rt 90 pd
end

to main
    setup
    draw
end

to move1
    pu rt 90 fd 17 lt 90 pd
end

to moveIn
    PU RT 45 FD 3 PD
end

to moveOut
    PU BK 3 LT 45 PD
end

to setColorBlue
    make "cR 0
    make "cG 0
    make "cB (255 - (repCount*10))
    make "myList (List :cR :cG :cB)
    setFC :myList
end

to setup
    Window CS Home PPT PD ST
    gotoStartingPosition
end

 

3-4. 응용 연습 B Result

 

[ 그림. 14-3-4 Level Meter Basic - RED ]

 

[ 그림. 14-3-4 Level Meter Basic - RED ]

 

[ 그림. 14-3-4 Level Meter Basic - RED ]

 

 

다음 함수 이름과 컬러값만 바꾸면 위 결과처럼 됩니다.

 

to setColorBlue
    make "cR 0
    make "cG 0
    make "cB (255 - (repCount*10))
    make "myList (List :cR :cG :cB)
    setFC :myList
end

 

 

3-5. 응용 연습 C와 결과

 

마지막으로 LightBlue처럼 여타 다른 색상 조합은 대략 다음처럼 색상을 결정할 수 있습니다. 위에서는 뺄셈을 이용하고, 아래에서는 덧셈을 이용하고 있습니다. 함수 이름도 내용을 반영하여 setColorLightBlue로 변경되었습니다.

 

to setColorLightBlue
    make "cR (0 + (repCount*10))
    make "cG 255
    make "cB 255
    make "myList (List :cR :cG :cB)
    setFC :myList
end

 

이 결과는 다음과 같습니다. 색의 변화 방향을 비교해보세요.

 

[ 그림. 14-3-4 Level Meter Basic - Light Blue ]

 

 

4. 응용 예제 1 - Level Meter Color Animation

;; 색상 변화를 이용한 애니메이션 예제입니다. 바로 위에서 살펴본 3-5 응용 연습 C에서 조금 더 수정된 예제입니다.

 

▶ 소스 코드는 다음 '더보기' 클릭.

더보기

;; 4. 응용 예제 1 - Level Meter Color Animation

 

to box1
    repeat 2 [ fd 100 rt 90 fd 12 rt 90 ]
end

to box24A
    repeat 24 [ box1 setColor1 fillColor1 move1 ]
end

to box24B
    repeat 24 [ box1 setColor2 fillColor1 move1 ]
end

to box24C
    repeat 24 [ box1 setColor3 fillColor1 move1 ]
end

to box24D
    repeat 24 [ box1 setColor4 fillColor1 move1 ]
end

to draw
    repeat 256 [ 
        box24A move2
        box24B move2
        box24C move2
        box24D move2
    ]
    HT
end

to fillColor1
  moveIn Fill moveOut
end

to gotoStartingPosition
    pu lt 90 fd 470 rt 90 pd
end

to main
    setup
    draw
end

to move1
    pu rt 90 fd 17 lt 90 pd
end

to move2
    pu lt 90 fd 408 rt 90 pd
end

to moveIn
    PU RT 45 FD 3 PD
end

to moveOut
    PU BK 3 LT 45 PD
end

to setColor1    ;; LightBlue
    make "cR (0 + (repCount*10))
    make "cG 255
    make "cB 255
    make "myList (List :cR :cG :cB)
    setFC :myList
end

to setColor2    ;; Pink
    make "cR 255
    make "cG (0 + (repCount*10))
    make "cB 255
    make "myList (List :cR :cG :cB)
    setFC :myList
end

to setColor3    ;; Yellow
    make "cR 255
    make "cG 255
    make "cB (0 + (repCount*10))
    make "myList (List :cR :cG :cB)
    setFC :myList
end

to setColor4    ;; White
    make "cR 255
    make "cG 255
    make "cB 255
    make "myList (List :cR :cG :cB)
    setFC :myList
end

to setup
    Window CS Home PPT PD ST
    gotoStartingPosition
end

Make "cb 255
Make "cg 255
Make "cr 70
Make "mylist [70 255 255]

 

 

코드 실행 결과는 다음과 같습니다. 애니메이션의 하나라 코드를 실제로 실행해야 제대로 된 결과를 보실 수 있습니다.

 

[ 그림. 14-4-1. Color Color Level Meter Color Animation ]

 

;; 우하단 Trace 단추를 눌러서 실행 과정을 하나 하나 자세히 살펴볼 수도 있습니다.

 

 

5. Notes

Not yet! ^.^;

 

;; 반복문이 너무 오래 계속되면 강제로 종료할 수 있습니다. Pause 단추, Halt  단추를 이용하세요.

 

 

6. Exercises

■ 응용 연습 과제

 

1) 랜덤 컬러링

2) 좌우 균형 맞추기

3) 위 예제 <3-4. 응용연습 B> 를 애니메이션으로 만들어 보세요.

4) <응용 예제 1 - Level Meter Color Animation>의 코드량을 줄여보세요. 어떤 방법이 가능할까요?

 

 

7. Files

Logo_Pro_003_LevelMeter_Ex_000_Basic_.lgo
0.00MB

 

Logo_Pro_003_LevelMeter_Ex_001_Curve_.lgo
0.00MB

 

Logo_Pro_003_LevelMeter_Ex_002_Color_Animation_.lgo
0.00MB

 

Logo_Pro_003_LevelMeter_Ex_003_Color_Animation_B_.lgo
0.00MB

 

Logo_Pro_003_LevelMeter_Ex_004_Basic_Plus_A_.lgo
0.00MB

 

Logo_Pro_003_LevelMeter_Ex_005_Color_Animation_A_.lgo
0.00MB

 

8. Ref.

 

1) 이전 예제들을 참고했습니다. 대부분의 내용들이 이전 예제에 포함되어 있습니다.

2) 아이디어만 새로. ^.^;

 

 

 

 

Happy Programming!

^.^;