d라이브러리









지난호에 게재되었던 APPLE용 그래픽 처리 프로그램은 APPLE SOFT BASIC 인터프리터를 사용하여 작성하였다. 이번 호에서는 IBM PC 호환기종에서 그래픽을 처리하여 보자. 현재 시장에서 구입할 수 있는 IBM PC 호환기종의 대부분은 모노크롬(monochrome) 허클레스(hercules)보드를 사용하여 그래픽을 처리하고 있기 때문에 주로 이 그래픽 보드를 이용하는 경우를 중심으로 설명하겠다.

 

IBM PC 호환기종의 그래픽 기능
 

대부분의 IBM PC 호환기종에서 사용하는 허클레스 그래픽 보드는 APPLE시스팀과는 달리 가로×세로의 '픽셀' (Pixel : 화소라 부른다)수가 720×348이다. 따라서 흑백 상태를 나타내는 경우 상당히 해상도(resolution)가 높은 화면을 처리할 수 있다.
 

또한 APPLE과는 달리 허클레스 보드로 색을 표현하려면 컬러 허클레스 보드를 사용하여야 한다. 최근에는 여러종류의 표시기능이 갖추어진 그래픽 보드들이 시판되고 있기 때문에 용도에 따라 선택의 폭이 넓어 졌다고 할 수 있다.
 

모노크롬 허클레스 보드의 사용을 위해 시스팀에서 지정된 번지를 그림으로 나타내 본 것이 (그림1)이다. 빗금친 부분이 비디오램(video RAM)이 할당되는 부분이다.
 

(그림1) 시스팀에서 지정된 번지


(그림1)에서 그래픽 페이지가 2개 있기 때문에 프로그램내에서 두개의 화면을 제어할 수 있다. 단 동시에 두개의 페이지를 선택할 수 없고 표시화면과 처리화면을 독립적으로 선택하게 된다. 즉 페이지0의 화면을 모니터에 출력하는 동안 프로그램에서 페이지1에 다른 그림을 그려놓을 수 있다. 이때 페이지1에 그려진 그림이 화면에 출력되지는 않는다. 만일 페이지1에 그려진 화면을 보고 싶다면 페이지1를 표시화면으로 지정하면 된다.
 

본 연재에서 사용하는 GWBASIC 인터프리터도 특별하게 한글과 그래픽을 갖도록 수정된 것이 시판되고 있지만 이를 구입하지 않고 그래픽을 허클레스보드를 이용하여 사용하려면 (그림2)와 같은 작업이 시행되어야 한다. BASIC에서 적용되는 이 방법은 PASCAL, FORTRAN, 어셈블리 언어에서도 똑같이 적용될 수 있기 때문에 더욱더 일반적인 그래픽 처리 방법이라 할 수 있다.
 

(그림2) GWBASIC을 허클레스 보드상에 에서 사용하여 그래픽을 처리할 수 있도록 할때의 과정

 

(그림2)와 같이 작업을 수행하였을 때 사용할 수 있는 그래픽에 관한 기능들은 (그림3)과 같다.
 

(그림3) 허클레스 보드에서 처리가능해진 그래픽 기능(GWBASIC 사용시)


(그림2)에서 입력한 "INT10"은 허클레스 전용 비디오 제어 루틴을 시스팀에 올리는 작업을 의미하고 "HEADER.BAS"는 GWBASIC에서 그래픽 기능을 사용할 수 있도록 하는 프로그램 내부의 인터페이스 부분이다. (그림4)는 HEADER.BAS의 내용이다.
 

(그림4) HEADER.BAS의 내용


이제 GWBASIC에서 그래픽기능을 처리해보자. 먼저 "HEADER.BAS"를 LOAD하여 놓고 400번부터 프로그램을 작성하면 된다. (그림5)를 참조하기 바란다.
 

(그림5) 그래픽 명령의 실행예


사용하려는 그래픽 화면이 GMODE명령에 의해 선택되고 표시화면 페이지가 GPAGE와 DISP에 의해 선택된다. 화면에 직선을 나타내려면 MOVE, DLINE명령을 사용한다.
 

그래픽 화면


그래픽 페이지를 선택하여 다음 명령을 프로그램하여 실행시켜 보라.
 

명령어들


실행결과를 프린터에 복사하면 (그림6)과 같다.
 

(그림6) 허클레스 보드를 사용한 그래픽 화면의 예

 

"HEADER.BAS"에서 볼 수 있듯이 각 명령의 어드레스는 프로그램이 그래픽을 처리하기 전에 미리 계산되어진다는 것을 유의하여야 한다. 사용 가능한 다른 그래픽명령도 한번 실행시켜 보기 바란다. (그림3)에서 설명한 내용이 화면에 그림으로 나타날 것이다.

 

그래프를 그려보자
 

우리는 가끔 신문에서 물가지수 변동이 그래프로 표시되는 것을 볼 수 있다. 가로축에 등간격을 계산하여 좌표축을 분할하여 놓고 세로축은 처리하려는 데이타의 최대값에 따라 좌표축을 분할하도록 한다. (그림7)은 모노크롬 최대값에 따라 좌표축을 분할하도록 허클레스 보드를 사용하였을 때 표시할 수 있는 좌표의 구간을 나타낸 것이다.
 

(그림7) 그래픽 화면의 좌표

 

그래픽 화면의 물리적 한계때문에 무한히 큰 그림을 표현할 수 없다. 따라서 그림을 그리기 전에 고려해야 될 사항은 다음과 같다.
 

그림을 그리기 전에 고려해야 될 사항

 

첫번째 고려할 사항인 그림의 크기는 처리하려는 데이타의 최대, 최소값에 의해 결정된다. 실제값과 화면좌표사이에 비례값을 계산하여 축소 및 확대비를 구한다.
 

(그림9)에 표시된 꺽은선 그래프는 X축의 양의 값과 Y축의 양의 값만 입력되는 것을 가정하고 작성된 프로그램에 의해 출력된 예이다. (그림8)은 꺾은선 그래프를 그리는 프로그램이다.
 

(그림8) 꺾은선 그래프를 그리는 프로그램

 

데이타가 입력되기 전에 최대값을 미리 알려주도록 설계되고 있고 이 최대값에 따라 Y축의 눈금이 표시된다. 처음 입력되는 데이타는 점으로만 표현하면 되니까 MOVE명령으로 처리하고 있다. 그리고 다음 값부터서는 DLINE 명령을 반복 사용하여 꺾은선을 나타내주고 있다. 프로그램이 실행되고 난후 문자표시화면으로 돌아가도록 TOMDE 명령을 사용하고 있다. 만약 그래픽 화면을 프린터로 출력하려면 PrtScr+1을 누르면 되는데 (PrtScr을 누른후 1을 누른다)프린터에 그래프가 출력되는 형태는 PrtScr 다음에 숫자 (1부터 6까지)에 따라 출력되는 그래픽페이지와 출력되는 방식이 달라진다.

(그림9) 꺽은선 그래프의 출력 결과

 

꺾은선 그래프는 X축을 등간격으로 따라가면서 해당되는 Y값을 직선으로 연결해가면 되나 막대그래프를 그릴 때는 막대를 표시하기 위한 알고리즘을 생각해야 한다. 네모(직사각형)을 그릴 수 있는 명령이 사용될 수 있으므로 (그림10)과 같이 프로그램을 작성하여 막대를 나타낼 수 있다.
 

(그림10) 막대그래프용 프로그램의 예


(그림10)의 프로그램을 실행한 예는 (그림11)과 같다.
 

(그림11) 막대그래프를 그려본 예

 

마지막으로 함수그래프에 대해서 살펴보자. 함수그래프도 다른 그래프를 그릴 때와 마찬가지로 그리기 전에 축소, 확대비를 계산하여야 한다. 일반적으로 함수그래프의 표시구간은 음수까지도 포함하기 때문에 좌표축의 중심이 표현구간에 따라 변화하도록 프로그램을 설계하여야 한다. (그림12)은 일반적으로 함수그래프를 그릴 수 있도록 작성된 프로그램이고 (그림13)은 실행예이다.
 

(그림12) 함수그래프 출력용 프로그램


화면에 출력된 함수의 그래프는 y(x)=sin(x)+cos(2x)이다. DEF FN 문으로 주어지는 함수를 여러분이 원하는 함수로 바꾸어서 프로그램을 실행시켜 보기 바란다.
 

(그림13) 출력된 함수그래프(사용된 함수는 y(x)=sin(x)+cos(2x)이다)
 

이 기사의 내용이 궁금하신가요?

기사 전문을 보시려면500(500원)이 필요합니다.

1987년 06월 과학동아 정보

  • 조동섭 교수

🎓️ 진로 추천

  • 컴퓨터공학
  • 정보·통신공학
  • 소프트웨어공학
이 기사를 읽은 분이 본
다른 인기기사는?