KR0147440B1 - 폭 1의 선을 묘화하기 위한 방법 및 장치 - Google Patents

폭 1의 선을 묘화하기 위한 방법 및 장치

Info

Publication number
KR0147440B1
KR0147440B1 KR1019940018967A KR19940018967A KR0147440B1 KR 0147440 B1 KR0147440 B1 KR 0147440B1 KR 1019940018967 A KR1019940018967 A KR 1019940018967A KR 19940018967 A KR19940018967 A KR 19940018967A KR 0147440 B1 KR0147440 B1 KR 0147440B1
Authority
KR
South Korea
Prior art keywords
point
pixel
line
current
width
Prior art date
Application number
KR1019940018967A
Other languages
English (en)
Other versions
KR950009408A (ko
Inventor
가주노리 다까야나기
노부요시 다나까
마사야 모리
Original Assignee
윌리엄 티. 엘리스
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 윌리엄 티. 엘리스, 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 윌리엄 티. 엘리스
Publication of KR950009408A publication Critical patent/KR950009408A/ko
Application granted granted Critical
Publication of KR0147440B1 publication Critical patent/KR0147440B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/203Drawing of straight lines or curves
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/20Function-generator circuits, e.g. circle generators line or curve smoothing circuits

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

본 발명은 래스터 스캔 그리팩 디스플레이 상에서 폭 1의 직선 및 원호를 고속으로 그리는 것을 목적으로 한다.현재 점으로부터 X 좌표를 1 증분한 점과 Y 좌표를 1 증분한 점 양쪽에 대해 폭 1의 선을 규정하는 윤곽선(f1과 f2) 사이에 있는지를 판단한다.. 만약 X 좌표를 1 증분한 점이 윤곽선(f1과 f2)사이에 있다면 그 점을 플롯하고 다음 픽셀로서 선택한다. 만약 그렇지 않고 Y 좌표를 1 증분한 점이 윤곽선(f1과 f2) 사이에 있다면 그 점을 플롯하고 다음 픽셀로서 선택한다. 그 어느것도 윤곽선(f1과 f2) 사이에 있지 않다면 X 좌표와 Y 좌표 양쪽을 1 증분한 점을 플롯하고 다음 픽셀로서 선택한다.

Description

폭 1의 선을 묘화하기 위한 방법 및 장치
제1도는 브레젠함의 알고리즘(Bresenham's algorithm)에 따라 그려진 직선의 픽셀을 플롯한 도면.
제2도는 폭 1의 직선 픽셀을 플롯한 도면.
제3도는 본 발명을 실시하기 위한 하드웨어 구성 블럭도.
제4도는 특정 직선에 대한 상하 범위를 판정하는 처리를 나타내는 도면.
제5도는 특정 점이 폭을 갖는 직선의 상한(f1)과 하한(f2) 사이에 있는 지를 판정하는 처리를 나타내는 도면.
제6도는 폭 1의 직선에 대응하는 상한(f1)과 하한(f2)을 판정하는 처리를 나타내는 도면.
제7도는 폭 1의 직선에 대응하는 상한(f1)과 하한(f2)을 판정하는 처리를 나타내는 도면.
제8도는 시작점(P)에 대해 다음으로 진행해야 할 점을 판정하기 위해 상한(f1)과 하한(f2) 사이에 있는지의 여부를 조사할 점(A와 B)을 나타내는 도면.
제9도는 본 발명에 따라, 현재의 점(x,y)에 대해 다음 점을 선택하는 처리를 나타내는 도면.
제10도는 본 발명에 따라, 현재의 점(x,y)에 대해 다음 점을 선택하는 처리를 나타내는 도면.
제11도는 본 발명에 따라, 현재의 점(x,y)에 대해 다음 점을 선택하는 처리를 나타내는 도면.
제12도는 본 발명에 따라, 순차적으로 픽셀을 플롯하는 처리를 나타내는 도면.
제13도는 본 발명에 따라, 폭 1의 직선을 그리는 동작을 처리 순서도.
제14도는 본 발명에 따라, 폭 1의 원호(a circular arc)를 그리는 처리도.
제15도는 본 발명에 따라, 폭 1의 원호를 그리는 처리도.
제16도는 본 발명에 따라, 폭 1의 원호를 그리는 동작의 처리 순서도.
제17도는 본 발명에 따라, 폭 1의 타원호(an elliptic arc)을 그리는 처리도.
제18도는 본 발명에 따라, 폭 1의 타원호를 그리는 동작의 처리 순서도.
제19도는 본 발명에 따라, 폭 1의 타원호를 그리는 동작의 처리 순서도.
* 도면의 주요부분에 대한 부호의 설명
1 : 묘화용 칩 1a : 인터페이스 논리회로
1b : 전용 CPU 1c,1d,3,4 : 논리회로
5 : 래스터 스캔 디스플레이
본 발명은 래스터 스캔 그래픽 디스플레이(a raster scan graphic display)등의 픽셀을 임의의 좌표점에서 개별적으로 플롯할 수 있는 디스플레이에 컴퓨터의 연산 처리에 의해 선을 그리기 위한 방법 및 장치에 관한 것으로, 특히, 1 이상의 폭을 갖는 굵은 선을 고속으로 그리기 위한 방법 및 장치(a method and device for rapidly drawing wide lines with a width of 1 or more)에 관한 것이다.
종래부터, 컴퓨터 디스플레이 상에서, 선을 그리기 위한 여러가지 방법이 알려져 있다. 그 중에서 대표적인 방법으로서 브레젠함의 알고리즘이라고 하는 것이 있다. 이 기법은 임의의 기울기를 갖는 직선 또는 원호의 묘화(the drawing of any gradient lines or circular arcs)를 실수(부동소수점수)를 사용하기 않고 정수 범위에서 가산, 감산 및 쉬프트 연산하여 구현함으로써, 고속으로 하고 또한 선상의 각 점의 좌표를 일시적으로 저장하기 위한 테이블 또는 메모리 영역도 필요하지 않는 점이 독특하다.
한편, 그래픽 디스플레이 상의 선의 묘화에 있어서, 1픽셀 이상의 폭을 갖는 굵은 선(wide lines)을 그리고자 하는 바램이 있다. 왜냐하면, 굵은 선은 가는 선(thin lines) 보다 시각적으로 명료하고, 더욱 장점으로서는 굵은 선을 조금씩 이동시켜 묘화함으로서 보다 굵은 선을 그리기도 하고, 특정 영역을 효율적으로 채우는 것이 가능하기 때문이다.
그러나, 상기 브레젠함의 알고리즘을 굵은 선의 묘화에 적용하는 것은 원리적으로 불가능하다. 왜냐하면, 브레젠함의 알고리즘은 본질적으로 폭 0인 선 밖에 묘화할 수 없기 때문이다. 더욱 서술하면, 굵은 직선에 대해 이 분야의 기술자가 요구하는 기준으로서, 윤곽에 그 굵은 직선이 더해질 때, 그 윤곽내에 존재하는 모든 픽셀을 결과적으로 묘화되는 굵은 선에 포함시키지 않으면 안된다고 하는 것이다. 브레젠함의 알고리즘을 중첩시켜 적용하여도 도저히 이와 같은 기준을 충족시키기가 불가능하고 윤곽내에 그려지지 않는 픽셀 결함이 발생하고 만다.
그래서, 종래 기술에 있어서, 굵은 선의 직선 또는 원호를 효율적으로 그리기 위해, 이하에 도시되는 바와 같은 여러가지 기술이 개시되어 있다.
우선, 특개소63-14286호 공보는, 원 안쪽으로 원의 중심을 이동시키면서 동일 반경의 원호를 묘화시키고, 이것을 순차적으로 반복함으로서 굵은 선의 원을 그리는 알고리즘을 개시한다.
또한, 특개소63-180182호 공보는, 윤곽선 좌표 정보와 굵은 도형 윤곽선 좌표 정보로부터 임의 도형의 굵은 윤곽선을 묘화하고 나서, 내부를 채워 칠함으로써 고속으로 굵은 선을 묘화하는 것이 가능하다는 것을 개시한다.
더욱이, 특개소63-282583호 공보는, 굵은 선의 중심선과 폭 정보 이외에 1점 만큼의 외각 프레임의 좌표 정보를 추가함으로써, 굵은 선의 고속 표시가 가능하다는 것을 개시한다.
더욱이, 특개평2-35580호 공보는, 선 지정 데이타 및 선 폭 데이타를 기억하고, 선폭이 그 선폭 데이타에 대응하도록 문자 전체의 윤곽을 이동시켜 아웃라인 데이타(outline data)를 비트 데이타로 변환함으로서 선폭을 정규값(normal value)으로하는 것을 개시한다.
더욱이, 특개평2-208694호 공보는, 굵은 선 묘화 화소 데이타를 작성하고, 굵은 선 묘화 화소 데이타를 프레임 버퍼 상에서 비트맵 데이타로서 묘화선 방향(drawing direction)으로 합성하여, 일정한 선폭의 굵은 선을 묘화함으로서 일정 선폭의 굵기를 갖는 선을 묘화할 수 있다.
또한, 특개평4-137287호 공보는, 상위 비트 범위, 중간 비트 범위, 및 하위 비트 범위를 구하여 복수의 비트를 함께 처리함으로서 묘화 속도가 정확히 굵은 임의의 선을 그릴 수 있다는 것을 개시한다.
그러나, 이들 굵은 선 묘화 기법은, 부동 소수점 연산이나 묘화한 점의 좌표 데이타 등을 메모리중의 테이블에 순차적으로 저장하여 처리할 필요성이 있으므로 큰 연산능력이 필요하기 때문에 최근의 고성능 프로세서로서도 묘화 속도가 상당히 떨어질 수 밖에 없다.
본 발명의 목적은, 실질적으로 정수연산만을 이용하여 고속으로 굵은 선을 묘화하는 방법 및 장치를 제공하는 것이다.
본 발명의 다른 목적은, 실질적으로 정수연산만을 이용하여 고속으로 폭 1의 직선을 묘화하는 방법 및 장치를 제공하는 것이다.
본 발명의 또 다른 목적은, 실질적으로 정수연산만을 이용하여 고속으로 폭 1의 원호를 묘화하는 방법 및 장치를 제공하는 것이다.
본 발명의 또 다른 목적은, 실질적으로 정수연산만을 이용하여 고속으로 폭 1의 타원호를 묘화하는 방법 및 장치를 제공하는 것이다.
상기 목적은 직선인 굵은 선의 경우, 다음과 같은 처리로서 달성할 수 있다.
묘화하고자 하는 굵은 선의 상한 선과, 묘화하고자 하는 굵은 선의 하한 선을 설정하는 단계. 이것은 묘화할 굵은 선의 시작점과 종료점이 주어지기 때문에, 이들 시작점과 종료점을 연결하는 직선 방정식을 구하여, 굵은 선의 Y축 방향 폭을 W라고 했을 때, 이 직선의 Y축 절편을 ±W/2만큼 오프셋함으로서 구할 수 있다. 본 발명은 W=1의 경우에 따른다.
다음에, 시작점으로부터, 종료점에 근접하도록 X축을 따르는 좌표값을 1만큼 변화시킨 제1 픽셀과, 시작점으로부터 종료점에 근접하도록 Y축을 따른 좌표값을 1만큼 변화시킨 제2 픽셀에 주목하여, 이들 2개의 픽셀과 상기 상한 선과 상기 하한선의 위치관계를 판정한다.
이 때, 다음과 같은 경우가 실행된다.
(a)제 1 픽셀이 굵은 선의 범위에 있는 경우: 이 경우 다음 픽셀로서 제1 픽셀을 선택한다.
(b)제1 픽셀이 굵은 선의 범위내에 없고 제2 픽셀이 굵은 선 범위내에 있는 경우: 이 경우 다음 픽셀로서 제2 픽셀을 선택한다.
(c)상기(a)와 (b)가 모두 불가능한 경우, X축과 Y축의 양쪽에 대해 좌표값을 모두 1만큼 변화시킨, 기울기 방향의 제3 픽셀을 다음 픽셀로서 선택한다.
이와 같이 선택된 다음 픽셀을 플롯(plot)하고, 이 다음 픽셀을 기준으로 하여 상기 제1 픽셀 및 제2 픽셀을 구하고, 이것에 대해 상기와 같이 굵은 선 범위내에 있는 지의 여부를 판단함으로서, 플롯할 이 다음 픽셀 및 또 다음 픽셀 등을 결정한다.
본 발명의 신규한 특징에 따르면, 픽셀이 굵은 선 내에 있는지의 여부의 판단도 실질적인 정수 연산으로서 실현할 수 있다.
본 발명의 신규한 특징에 따르면, 윤곽선이 원호 또는 타원인 경우에도 상기 픽셀 선택 기법을 적용할 수가 있고, 그리하여 실질적인 정수 연산함으로서 폭 1의 원호 또는 타원도 고속으로 그릴 수 있다.
[실시예]
1. 배경 기술
1-1.브레젠함의 직선
제1도는 브레젠함의 직선 플롯을 도시한다. 브레젠함의 직선 묘화 알고리즘은 실질적으로 정수 연산으로서 직선의 묘화가 가능하다는 점에서 특이하다. 이와 같이 묘화하기 위한 알고리즘은 이미 주지되었기 때문에 상세히 서술하지 않지만, 제1도에서 X축 좌표가 한개씩 증가하도록 플롯점이 선택되어 간다고 가정하면, 플롯할 다음 점은 정수연산되는 특정 파라메타 값에 기초하여 X축 좌표만을 1만큼 증가시키거나, X축 좌표와 Y축 좌표 양쪽을 1만큼 증가시키는 지가 선택된다.
1-2.폭을 갖는 직선
브레젠함의 직선 묘화 알고리즘은, 매우 고속이고, 래스터 스캔 그래픽 디스플레이에 있어서 단순히 직선만 묘화하기 위한 목적뿐이라면 충분히 실용적이다. 그러나, 제2도에 도시된 바와 같은 폭 1의 직선을 묘화하는 것은, 브레젠함의 직선 묘화 알고리즘으로서는 불가능하다. 이것은 을 갖는 직선의 정의에 기초하여 다음과 같이 예시될 수 있다. 즉, 폭을 갖는 직선에 있어서, 묘화할 시작점과 종료점을 연결하고 이 선을 중심으로 해서 폭(W)(이 경우, W=1)의 장방형 윤곽을 정한다. 그러면, 폭1의 직선은 (a)시작점과 종료점을 플롯하고, (b)정해진 장방형 윤곽선 상과 윤곽선 내부에 있는 픽셀을 전부 플롯한다고 하는 조건을 충족시킨다. 여기서, 제2도의 픽셀(P1과 P2)에 주목하면, P2는 P1에 대해 바로 위에 있는 관계에 있는 것으로 보인다. 그러나, 제1도에서는 임의의 픽셀 바로 위의 픽셀은 결코 플롯되지 않는다. 이것으로부터, 브레젠함의 직선 묘화 알고리즘은 원리적으로 폭을 갖는 직선의 묘화에 적용할 수 없다는 것을 알 수 있을 것이다.
2.하드웨어 구성
다음에, 본 발명을 실시하기 위한 하드웨어 구성 예를 제3도를 참조하여 설명한다. 제3도에서 묘화용 칩(drawing chip)(1)은 메인 프로세서(도시하지 않음)로부터의 묘화 명령을 수신하고 실제로 묘화하기 위한 픽셀 데이타를 발생하는 것이다. 예를 들면, 직선을 그리기 위해 메인 프로세서가 단순히 그리는 것이 직선이라는 명령을 직선의 시작점과 직선의 종료점 데이타를 묘화용 칩(1)으로 전달하면, 묘화용 칩(1)은 그 시작점과 종료점을 연결하는 각 픽셀 좌표 점의 값을 발생하고, 디스플레이의 APA[모든점 어드레스 가능(all point addressable)] 메모리의 좌표점에 대응하는 픽셀을 플롯한다.
묘화용 칩(1) 내부를 도식적으로 도시하면, 프로세서에서 나오는 명령/데이타를 수신하는 인터페이스 논리 회로(1a), 전용 CPU(1b), 본 발명과 관련된 묘화 알고리즘을 하드 와이어드 논리로서 실장한 논리회로(1c), 본 발명과 관련된 묘화 알고리즘 이외의 묘화 기능을 총체적으로 포함한 논리회로(1d), 디스플레이의 APA와의 사이에서 데이타를 취하기 위한 디스플레이 버스에 대응하는 인터페이스 기능을 부여하는 인터페이스 논리회로(1d)로 구성되어 있다. 흔히, 논리회로(1c)와 논리회로(1d)는 실제는 개별적으로 분리되어 실장되어 있는 것으로 해석해서는 않되고 설명의 편의상 도시된 블럭도 구성으로서 나타나 있다는 것을 알아야 한다.
V1-V4는 디스플레이의 APA 메모리의 다른 플레인(plains) 마다 준비된 비디오 칩으로, 각각의 개별적인 APA 메모리(M1-M4)에 접속되고, 묘화용 칩(1)으로부터 수신된 픽셀 데이타를 APA 메모리 기입할 뿐만아니라, APA 메모리로부터 픽셀 데이타를 판독하기도 하고, 픽셀 데이타에 대해 연산을 실시하기도 하고, 다른 플레인 간에 픽셀 데이타를 이동시키기도 하는 기능을 갖는다.
논리회로(3)는, V1-V4에서 나오는 네 개의 플레인에 걸친 픽셀 컬러 데이타를 합성하고, 표시하기 위해 논리회로(4)에 전달한다. 논리회로(4)는 프로그래머블 논리 어레이(PLL) 및 디지탈 아날로그 변환 기능(DAC)을 가지며, 픽셀 컬러 데이타를 아날로그 디지탈로서 표시하기 위해 래스터 스캔 디스플레이(5)에 제공한다.
제3도에 도시하는 하드웨어 구성은 본 발명을 실시하기 위한 구성의 일예에 지나지 않으므로 더 이상의 상세한 설명은 생략한다. 본 발명의 실시는 이와 같은 구성에 한정되어 있지 않는다는 것에 유의하여야 한다. 즉, 발명자에 의한 실험에 따르면, 이와 같은 하드웨어 구성뿐아니라, 범용 프로세서 상에서 소프트웨어적으로 본 발명을 구현하여도 실용적으로 충분히 고속으로 폭을 갖는 선을 그릴 수가 있다.
3.발명의 원리
다음에, 제4도를 참조하여, 본 발명의 원리를 설명한다. 제4도에서, 지금 우측 위쪽으로 향하는 직선(f)을 그려보자. 그러면, 이 직선 방정식은 일반적으로 y=(△y/△x)x+b로 표현된다. 이 방정식에서, (△y/△x)는 기울기이다. 이 직선 상의 동일하지 않은 임의의 2점 (X1,Y1) 및 (X2,Y2)(단, X2X1)에 의해, △x=X2-X1, △y=Y2-Y1이라고 가정한다. b는 절편이다. 이식을 변형하면,
이라는 방정식을 작성해보면, 임의의 점(x0,y0)이 직선(f) 상에 놓인다면 명백히 f(x0,y0)=0이고, 한편 점(x0,y0)이 직선(f) 보다 위에 있다면 f(x0,y0)0이고, 더욱이 점(x0,y0)이 직선(f)보다 밑에 있다면 f(x0,y0)0이라는 것을 간단히 계산하여 확인할 수 있다.
다음에, 제5도에 있어서, f1을 폭을 갖는 선의 상한 윤곽선(상기 f와 동일함) 방정식, f2를 폭을 갖는 선의 하한 윤곽선 방정식이라고 가정한다. 그러면, 임의의 픽셀을 폭을 갖는 선으로서 플롯할 필요 조건은, f1≤0 또는 f2≥0이라는 것을 알 수 있다.
다음에, 제6도를 참조하면, 시작점(Xs,Ys)에서 종료점(Xe,Ye)까지 본 발명에 따라 폭 1의 선을 직선으로 그리는 처리에 대해 서술한다. 제6도에 있어서, f는 시작점(Xs,Ys)와 종료점(Xe,Ye)을 연결하는 직선 방정식, f1은 상한 윤곽선, f2은 하한 윤곽선이다.
우선, △x=Xe-Xs, △y=Ye-Ys라면, 식 1로 도시한 바와 같이, f(x,y)=y△x-x△y-b△x이지만, f(Xs,Xs)=f(Xe,Ye)=0을 b에 대해 구하면, b△x=YsXe-YeXs=YsXe-YsXs+YsXs-YsXs =Ys△x-Xs△y에 의해,
그러면, 임의의 양의 정수(N)로서 f1=f-N, f2=f+N으로 표현되게 된다. f1과 f2를 이와 같은 식으로 표현할 때 f와 f2, 및 f와 f2의 y절편의 차는 N/△x로 표현된다. 여기서, 절편이 △x로 나눈 값으로 표현되는 것은, 식 1에서 그 상수항이 -b△x와 같이 △x를 곱하여 된 것이기 때문이다.
그런데, 시작점(Xs,Ys)와 종료점(Xe,Ye)를 연결하는 길이(L)를,
으로서 구한다. 여기서 유의하여야 할 것은 이 L의 계산은 부동 소수점 연산이 필요하지만, 본 발명에 따르면 이것에 후속하는 픽셀 좌표점을 구하기 위한 계산은 실질적으로 정수연산만 필요로 한다.
이렇게 하여 L을 구하면, 직각 삼각형의 유사성에 기초하여 다음과 같은 비례식이 성립된다.
이 비례식으로부터, N=WL/2이라고 하는 식이 구해진다. 또한, 본 발명에서는 W=1로서 설명한다. 따라서, N=L/2이 된다. 식 3의 연산결과에 도시된 바와 같이 L은 부동 소수점수이고, 따라서 N도 부동 소수점수이지만 후술하는 바와 같이 N은 정수값에 대해 값의 대소가 비교되는 값이기 때문에 이하에서는 소수점이하는 생략하여 정수값으로 처리할 수 있다.
시작점(Xs,Ys)을 좌표 변환하여 원점(0,0)으로 이동시키면, 상하 및 하한 그래프는 제7도에서 도시하는 바와 같이 간단해진다. 이와 같이 간략화해도 범용화에 지장이 없다.
상기와 같은 준비에 기초하여, 본 발명에 따른 폭1의 직선을 묘화하기 위해 어떻게 해서 플롯할 픽셀 좌표점을 구하는 것에 대해서는 제8도 이하를 참조하여 설명한다.
제8도에서, P=(x,y)를 출발점으로 한다. 그러면, 본 발명의 기본적인 착상에 따라 P(x,y)에 대해 y를 1만큼 증가한 점 A=(x,y+1)와, x를 1만큼 증가한 점 B=(x+1,y)의 양쪽에 대해 상한 윤곽선(f1)과 하한 윤곽선(f2) 사이에 있는지의 여부가 판정된다. 제5도에 따르면, f1과 f2의 사이에 있다라는 조건은 f1≤0 또한 f2≥0이지만, 한편 제6도로부터 명확한 바와 같이 출발점은 반드시 f1과 f2의 사이에 있기 때문에 A=(x,y+1)에 있어서 f1≤0인지 어떤지, B=(x+1,y)에 있어서 f2≥0인 지 어떤지에 대해 판정한다는 것을 알 수 있다.
이 때, A가 범위내에 있는(경우 1), A가 범위내에 없고 B가 범위내에 있는(경우 2), A도 B도 모두 범위내에 없는(경우 3)이라고 하는 세 가지 경우가 있다. A와 B중 어느 것이 범위내에 있는 지를 판정하기 위해 우선 A쪽을 조사한 후 B쪽을 조사해도 좋고 우선 B쪽을 조사한 후 A쪽을 조사해도 좋다라는 것은 폭1의 선에 있어서 A도 B도 범위내에 있다라는 것은 문제가 되지 않기 때문이다.
경우 1 :
제9도는 경우 1의 예를 도시한다. 제9도 이하에서는 y를 1만큼 증가한 점 A=(x,y+1)을 (Xa,Ya), x를 1만큼 증가한 점 B=(x+1,y)를 (Xb,Yb)로 표현한다. 더욱이, 판정용 파라메타로서 f1(Xa,Ya)의 값을 d1, f2(Xb,Yb)의 값을 d2라고 한다. 이들 값은, P=(x,y)를 출발점으로 한 시작점으로 미리 계산되어 있다. 제9도의 예에서는 f(Xa,ya)0, 즉 점 A가 f1보다 밑에 있기 때문에 점A가 플롯됨과 동시에 다음 픽셀로서 선택된다.
점 A가 새로운 픽셀로서 선택된 것에 응답해서 그 새롭게 선택된 픽셀에 대해 더욱 다음으로 진행할 픽셀을 판정하기 위해 상기 f1(Xa, Ya) 및 f2(Xb,Yb)에 대응하는 값을 구한다. 그런데, 점 A는 제8도의 점 P에 대해 y 좌표값을 1만큼 증가한 것이기 때문에, 이 새롭게 선택된 픽셀에 대응하는 상기 판정용 파라메타는 f1(Xa, Ya+1) 및 f2(Xa,Ya+1)로 된다. 그러나, 이들 계산은 식 1으로 복귀하여 값을 계산할 필요는 없다. 즉, 식 1을 참조하면, y를 1만큼 증분하는 것은 f값을 △x만큼 증가시킨 것과 같고, x를 1만큼 증분하는 것은 f의 값을 △y만큼 감소시키는 것과 같다. 따라서, f1=f1+△x, f2=f2+△x,과 같이 판정용 파라메타가 갱신된다.
경우 2 :
제10도는 경우 2의 예를 도시한다. 이 경우, f1(Xa,Ya)0이기 때문에, 점A는 실격이고, 한편 f2(Xb,Yb)0이므로 점 B는 합격이다. 따라서 점 B가 다음 픽셀로서 선택된다. 그런데, 점B는 제8도의 점 P에 대해서, x 좌표값을 1만큼 증가시킨 것이므로 이 새롭게 선택된 픽셀에 대응하는 상기 판정용 파라메타는 f1(Xa+1,Ya) 및 f2(Xa+1, Ya)가 된다, 그래서, 이미 서술한 바와 같이 f1(Xa+1,Ya)=f1-△y, f2(Xa+1,Ya)=f2-△y로 계산할 수 있다.
경우 3 :
제11도는 경우 3의 예를 도시한다. 이 경우, f1(Xa,Ya)0이기 때문에, 점A는 실격이고, 한편 f2(Xb,Yb)0이기 때문에 점B도 실격이다. 따라서, 본 발명에 따르면, x 좌표와 y 좌표를 함께 1만큼 증가시킨 점 C가 다음 점으로서 선택되어 플롯되고, 점C는 제8도의 점P에 대해 x 좌표값 및 y 좌표값을 모두 1만큼 증가한 것이기 때문에 이 새롭게 선택된 픽셀에 대응하는 상기 판정용 파라메타는 f1(Xa+1,Ya+1) 및 f2(Xa+1,Ya+1)로 된다. 그래서, 이미 설명한 바와 같이 f1(Xa+1,Ya+1)=f1+△x-△y, f2(Xa+1,Ya+1)=f2+△x-△y라고 계산할 수 있다.
제12도는 본 발명의 방법에 따라 원점(0,0)으로부터 폭 1의 직선을 그리도록 픽셀을 순차적으로 플롯하는 모양을 도시한다. 이와 같이 픽셀을 순차적으로 플롯하고, 종료점인(Xe,Ye)가 플롯되면 직선의 묘화가 종료한다.
4. 폭1의 직선 묘화 동작의 순서도
이하, 상기한 본 발명에 따라 폭1의 직선 묘화 동작의 순서도를 도시한다. 당 기술분야의 기술자라면 이 순서도에 따라 C, PASCAL, C++, BASIC등 임의의 컴퓨터 프로그래밍 언어로서 컴퓨터 상에서 본 발명의 폭1의 직선 묘화 동작을 수행하는 프로그램을 용이하게 구현할 수 있을 것이다. 혹은, 하드웨어화된 논리로서 이 순서도와 등가인 논리를 LSI에 용이하게 구현할 수 있을 것이다.
제13도의 순서도를 참조하면, 단계(1302)에서 우선 △x에 정수로서 종료점의 x좌표로부터 시작점의 x좌표를 뺀 값이 저장되고, 게다가 △y에 정수로서 종료점의 y 좌표로부터 시작점의 y 좌표를 뺀 값이 저장된다. 또한, N이라고 하는 정수에 시작점으로부터 종료점 길이(L)의 절반값이 저장된다. 이와 같은 정수를 사용하는 의미는 제6도와 연관하여 설명한다. 본 발명에 따르면, 부동소수점 연산을 요하는 것은 이 길이(L)를 구하는 단계뿐이고, 나머지는 정수연산으로서만 처리될 수 있다.
단계(1304)는 변수x에 시작점의 x좌표가 저장되고, 변수y에 시작점의 y 좌표가 저장된다. 이것에 따라, 현재의 점(x,y)가 시작점으로 세트된다. 게다가, 다음 점을 결정하기 위한 판정용 파라메타 변수로서 f1에 -N+△x-1이 저장되고, f2에 N-△y가 저장된다. 이들 값 f1,f2의 의미는 제6도와 연관하여 설명한다.
f1에 -N+△x-1을 저장하는 의미는 제6도를 참조하여 설명한다. 즉, 제6도에 따르면,
인 데, f1은 현재의 점 바로 위의 픽셀에 대응하는 판정용 파라메타이기 때문에 초기에는 f1(x,y)=f1(Xs,Ys+1).
이것을 계산하면, f1=-N+△x.
그러나, 상기 f1은 이것에 대해 -1이라고 하는 여향(extra term)을 포함하고 있다. 이와 같은 항은 다음 단계(1310)의 f10이라고 하는 비교연산을 f1≥0으로 교체하는 데 부가된다. 이것은 임의의 특정 하드웨어화된 논리회로에서는 f10보다도 f1≥0의 쪽이 고속으로 처리될 수 있기 때문이다. 그러나, 일반적으로 f1=-N+△x을 사용하여 단계(1310)의 비교연산을 f10으로 치환할 수도 있을 것이다.
이와 유사하게
인 데, f2는 현재의 점 바로 우측 픽셀에 대응하는 판정용 파라메타이기 때문에 초기에 f2(x,y)=f2(Xs+1,Ys).
이것을 계산하면, f2=N-△y.
단계(1306)에서는 현재 점인(Xs,Ys)의 픽셀이 플롯된다. 다음에 단계(1308)에서는 f2≥0인지 아닌지가 판단되고, 만약 그렇다면 f1값을 조사하지 않고 제10도의 경우에 대응하는 것이 결정된다 라는 것은 현재 점(x,y)이 제10도의 f1과 f2 사이에 있을 때, f2≥0, 즉 (x+1,y)의 점이 f1과 f2사이에 있다면, f1의 값에 따라 조사할 (x,y+1)의 점은 그릴 선의 폭이 1이기 때문에 이미 f1과 f2사이에 존재하지 않기 때문이다.
단계(1308)가 긍정이면, 단계(1312)로 진행하고, 제10도에 도시된 바와 같이 f1과 f2로부터 각각 △y이 빼짐과 동시에 x 좌표가 1만큼 증가된 점이 다음 점으로서 선택된다.
단계(1308)에서 f2≥0이 성립되지 않으면, 단계(1310)에서 f1≥0인지의 여부가 결정되고, 이 판단이 부정이면 f10, f20라는 조건이 성립되는 것이므로 제9도의 경우에 대응한다. 이 때, 처리는 단계(1314)로 진행하고, 제9도에 도시하는 바와 같이 f1과 f2에 각각 △x가 더해져 y좌표가 1만큼 증분된 점이 다음 점으로서 선택된다.
단계(1310)의 판단이 긍정이면 처리는 단계(1316)로 진행한다. 이 경우, f1≥0 또는 f20이 성립되기 때문에 제11도의 경우에 대응한다. 이때, 제11도에 도시하는 바와 같이 f1과 f2에 각각 △x-△y가 더해져 x 좌표 및 y좌표가 1만큼 증분된 점이 다음 점으로서 선택된다.
단계(1318)에서는, 단계(1312,1314 또는 1316)에서 새롭게 선택된 점(픽셀)이 플롯되고, 다음에 단계(1320)에서는 지금 막 플롯한 점이 종료점인지의 여부를 판단할 수 있다. 그리고, 만약 그렇다면 처리는 종료하고, 그렇지 않다면 단계(1308)의 f2≥0인지 여부의 판단으로 복귀한다.
제13도의 순서도는 XsYe 또한 YsYe이라는 전제하에 기술되어 있지만, 본 발명은 이와 같은 조건에 제약되지 않고, 제13도의 순서도를 다음과 같이 변경함으로서 Xs와 Xe, Ys와 Ye의 대소 관계에 제한없이 폭1의 직선을 그리도록 확장할 수 있다.
즉, 우선 X값의 절대값을 부여하는 함수 ABS(X)=|X|과, X의 부합을 부여하는 함수 SGN(X)을 정의한다. SGN(X)값은 X≥0이라면 1, X0이라면 -1이다. 그래서 제13도의 단계(1302)에서 △X : ABS(Xe-Xs),
△Y:=ABS(Ye-Ys)으로 변경한다. 게다가 단계(1302)에서, sx:=SGN(Xe-Xs), sy:=SGN(Ye-Ys)를 구한다.
다음에, 단계(1312,1314 및 1316)에서의 x:=x+1을, x:=x+sx, y=y+1을 y:=y+sy로 변경한다.
이상의 변경으로, Xs와 Xe, Ys와 Ye의 대소 관계에 상관없이 폭 1의 직선을 그릴 수 있게 된다.
5. 폭 1의 원호 묘화
원의 방정식은, x2+y2+r2이다. 이 원을 따라 폭 1의 원을 그리고자 하는 경우를 고려한다.
그러면, 외측의 윤곽 방정식은,
로 되고, 외측 윤곽 방정식은,
이 된다. 이때,
f1(x,y)≥0은 점(x,y)이 그리고자 하는 폭 1의 원 외측 윤곽의 외측에 있는지(즉, 픽셀을 플롯하지 않는다)를 도시하고,
f1(x,y)0 또한 f2(x,y)≥0은, 점(x,y)이 그리고자 하는 폭 1의 원 위에 있는지(즉, 픽셀을 플롯한다)를 도시하고,
f2(x,y)0은, 점(x,y)이 그리고자 하는 폭 1의 원 내측 윤곽 위에 있는 지(즉, 픽셀을 플롯하지 않는다)를 도시한다.
다음에, 제1상한(the fourth quadrant)에서, 본 발명의 기법을 사용하여 (r,0)의 점으로부터 반시계 방향으로 회전하여 (0,r)의 점까지 4분의 1 원호를 그리는 경우에 대해 제14도를 참조하여 설명한다. 명확히 x 좌표값은 단조 감소이고, y 좌표값은 단조 증가로 된다. 따라서 픽셀의 진행 방향은 다음 세가지 경우가 고려된다.
(ⅰ) x 좌표값이 한개 감소
(ⅱ) y 좌표값이 한개 증가
(ⅲ) x 좌표값이 한개 감소, 또한 y 좌표값이 한개 증가
본 실시예에서는, 처리를 감단히 하기 위해, (ⅰ)과 (ⅱ)중 어느 하나를 선택하고, (ⅲ)의 경우는 고려하지 않기로 한다. 그러나, 기술분야의 숙련자라면 이하의 설명으로부터 (ⅲ)의 경우를 고려한 처리도 가정할 수 있을 것이다.
그런데, 도면을 참조하여 실제의 원호 묘화 동작에 대해 설명하면, 1개의 픽셀을 플롯한 후, 다음 플롯할 픽셀을 선택하는 방법은 다음과 같다.
(a) 현재 픽셀 바로 위의 픽셀은 외측 윤곽선(f1)보다 밑에 있는가.
만약 그렇다면 다음 픽셀로서 바로 위의 픽셀을 선택하고 그것을 플롯한다.
(b)(a)의 판정 결과가 부정이라면 다음 픽셀로서 현재 픽셀의 좌측 픽셀을 선택한다. 그러나, 이것을 바로 플롯하지 않고 그 위치가 내측 윤곽선(f2) 보다 위에 있는지의 여부를 판정하고, 만약 그렇다면 플롯하고, 만약 그렇지 않다면 플롯하지 않는다. 이와 같은 여분의 판정을 행하는 것은 제14도의 점(P3)과 같은 경우가 있기 때문이다. 이 경우, 바로 위의 픽셀(Px)는 외측 윤곽선(f1)보다 위에 있기 때문에 바로 위의 픽셀을 다음 픽셀로서 선택할 수 없고, 따라서 좌측 픽셀을 선택하지만, 이것은 폭1의 원호 내부에 존재하지 않는 점이기 때문에 플롯할 필요는 없다. 따라서 여기서는 현재의 픽셀 바로 위의 픽셀에 대해 우선 판정하고, 다음에 현재 픽셀의 좌측 픽셀에 대해 판정하지만, 픽셀의 좌측 픽셀쪽을 우선 판정할 수 있다라는 것은 폭 1의 원호에서는 현재의 픽셀 바로 위의 픽셀과 현재 픽셀의 좌측 픽셀 모두가 범위내에 포함되는 것은 있을 수 없기 때문이다.
제14도에서, 점(P0)으로부터 시작하여 이와 같은 방법으로 순차적으로 P1-P10과 픽셀의 플롯이 진행하는 것을 알 수 있다(단, P3,P6,P8은 f2의 내측에 위치하기 때문에 실제로는 플롯되지 않는다).
(c) x 좌표값이 0에 도달하고 또한 y 좌표값이 r에 도달한 단계에서 묘화를 완료한다.
6. 폭 1의 원호 묘화의 처리 순서도.
설명의 편의상, (x,y)=(0,-r)에서 (x,y)=(r,0)까지, 폭 1의 1/4 원호를 그리는 경우를 고려한다. 이것을 위해 제14도를 원점으로 중심으로 90˚ 시계 방향으로 회전한 도면을 고려하기 바란다. 그러면, P0 점의 좌표는 (0,-r)이 된다. 또는 x축 좌표와 y축 좌표는 역으로 된다. 이것을 제15도로서 도시한다.
이고, 이 경우, f1은 시작점 바로 우측 픽셀에 대한 판정 파라메타이므로 초기에 f1=f1(1,-r)=-r-0.25.
그러나, f1을 정수로 정의하기 때문에 이것을 -r로 치환할 수 있다 라는 것은, 외측 윤곽선에 대해 윤곽선 위의 점은 플롯하지 않기로 한다면 f10이 픽셀을 플롯하기 위한 필요조건이다. 그래서 f1보다 0.25 큰 값에 대해 0보다 작다 라는 조건이 성립한다면 f1 그것에 대해서도 0보다 작다 라는 조건이 성립하기 때문이다.
한편, f2는 다음 식으로 주어질 수 있다.
이고, 이 경우, f2는 시작점 그것에 대한 판정 파라메타이기 때문에 초기에
f2=f2(0,-r)=r-0.25.
그러나, f2를 정수로 정의하기 때문에 이것을 r-1로 치환할 수 있다 라는 것은 내측 윤곽선에 대해 윤곽선 위의 점은 플롯한다고 하기로 하면 f2≥0가 픽셀을 플롯하기 위한 필요조건이다. 그래서 f2보다 0.75 작은 값에 대해 0이상 이라는 조건이 성립한다면 f2 그것에 대해서도 0이상 이라는 조건이 성립하기 때문이다.
상기를 고려하여, 제16도의 단계(1502)에서 f1의 초기값인 f1_init에 -r이 저장되고, f2의 초기값인 f2_init에 r-1이 저장된다.
다음에, f1과 f2의 증분에 대해 고려한다.
일반적으로, f(x,y)=x2=y2-r2이라는 방정식에 대해 x 좌표값을 1개 증가시키는 것은 x에 x+1을 대입한다는 것을 의미한다. 그러면, 간단히 계산함으로서 f(x+1,y)=f(x,y)+2x+1.
따라서, x 좌표값이 1개 감소하는 것은 2x+1을 더한다는 것을 의미한다.
이와 유사하게, f(x,y+1)=f(x,y)+2y+1
이제는 플롯 시작점으로서 (x,y)=(0,-r)을 고려하기 때문에, f1 내지 f2 증분의 초기값은 각각 -2*r+1과, 1이다. 이들 값은 각각 incy_init과 incx_init에 저장된다.
단계(1504)에서, x와 y에 시작점 좌표가 세트됨과 동시에 x 방향 카운터(ct_x)와, y 방향 카운터(ct_y)에 r이 세트된다. ct_x는 다음에 선택되는 픽셀의 좌표가 x방향으로 1개 변화하는 정도로 1만큼 감소되고, ct_y는 다음에 선택되는 픽셀의 좌표가 y방향으로 1개 변화하는 정도로 1만큼 감소된다. 단계(1516)에서, 이들 카운터가 동시에 0으로 될 때에 묘화 처리가 완료하도록 되어 있다.
게다가 단계(1504)에서는 f1에 f1_init가 세트되고, f2에 f2_init가 세트된다. 이들 f1 및 f2는 제13도에 도시한 직선을 그리기 위한 순서도에서 f1 및 f2에 대응하는 움직임을 갖는 변수이다.
또한 단계(1504)에서 incy에 incy_init에 저장됨과 동시에 inclx에 incx_init+2가 저장된다. incy는 f1,f2 증분의 공용이다. inclx는 f1의 증분에 사용된다. 여기서 +2라는 항이 존재하는 것은 제15도에서 f1에 대해 비교되는 점(P1)이 f2에 대해 비교할 점(Pz)보다 x좌표가 1개 전진하여 있다. 이 x좌표의 1개 선행은 +2이다. inc2x에는 incx_init가 저장된다. inc2x는 f2의 증분으로 사용된다.
단계(1506)에서 f2≥0인지의 여부가 판단된다. 만약 f2≥0이라면, (x,y)에 도시되어 있는 픽셀을 바로 플롯한다. 이 단계에서, f1 값을 판정하지 않고 바로 플롯해서 좋은 이유는 다음 단계(1510)에서 f1≥0이라고 판단될 때 즉, x방향으로 1개 증분한 점이 원 외측의 윤곽으로부터 바깥에 외연한다고 판단될 때 단계(1514)에서 x좌표를 1개 증분한 점이 아니고 y좌표를 1개 증분한 점이 다음 픽셀로서 선택되기 때문에 f10의 조건을 만족시키도록 궤도 수정되기 때문이다.
단계(1506)에서 f2≥0의 판단이 부정이면, 단계(1509)에서 (x,y)의 점으로 오프된다. 즉, 화면의 배경색을 플롯한다. 또는 단계(1509)는 특별히 제공될 필요는 없고 간단히 생략할 수도 있다. f2≥0의 판단이 부정으로 되는 경우에 해당하는 것은 제15도에서 P3,P6 및 P8이다.
단계(1510)에서는, 현재 픽셀에 대해 x축 좌표를 1개 증가한 점(제15도에서) 이 f1보다 내측에 있는 지가 판단된다. f1≥0이라고 하면, 즉 현재 픽셀에 대해 x축 좌표를 1개 증가한 점이 f1보다 외측에 있다면 단계(1514)로 진행한다. 이 경우에 f1,f2 모두 incy만큼 증분하고, incy자체도 2개 증가한다. 이것은
에 있어서, f1(x,y+1)=f1(x,y)+2y+1 또한 f2(x,y+1)=f2(x,y)+2y+1이고, 따라서 incy=2y+1.
따라서, y가 1개 증가할 때마다 incy도 2개씩 증가하기 때문이다. 이와 같은 상분량 자체의 증가(increase in an incremental quantity)는 x축 방향과 관련해도 동일하다.
게다가 단계(1514)에서, 새로운 픽셀을 지정하기 위해 y가 1만큼 증분됨에 따라 ct_y가 1만큼 감소된다. 이것은 제15도에서 예를 들면 P2에서 P3로 진행하는 처리에 대응한다.
단계(1510)에서, f1≥0의 판정 결과가 부정이면 즉 f10이라고 판정되면, 제15도에서 예를 들면 P1에서 P2로 진행하도록 다음 픽셀이 선택된다. 그러면, 처리는 단계(1512)로 진행하고 f1에 inclx가 가산됨과 동시에 f2에 inc2x가 가산된다. 단계(1514)와 단계(1512)를 비교하면, 단계(1514)에서 f1과 f2가 보조를 취해 incy만큼 증분됨에 대해, 단계(1512)에서는 f1의 증분은 f2의 증분보다 2개 크다. 그 이유는 단계(1504)와 관련하여 설명한 바와 같이 f1은 f2보다 흔히 x좌표가 1개 큰 점을 참조하고 있기 때문이다. 이와 같은 처리는 inc2x:=inclx,inclx:=inclx+2이다. 게다가 단계(1510)에서 새로운 픽셀을 지정하기 위해 x가 1만큼 증분됨으로서 ct_x가 1만큼 감소된다.
단계(1516)에서는, ct_x 및 ct_y가 동시에 0에 도달하는 가가 판단되고, 만약 그렇다면 처리를 종료하고, 그렇지 않다면 단계(1506)의 판단 블럭으로 복귀한다.
재16도의 순서도는 제15도에 도시한 바와 같이 x축 및 y축 양방향을 따라 좌표값이 증분하도록 1/4원호를 그리는 경우에 대응[즉, 제4 상한(fourth quadrant)]하지만, 이것은 물론 임의의 상한(quadrant)으로 확장할 수 있다. 예를 들면 제14도에 도시한 제1 상한에 대응된다면 변경을 요하는 것은,
(i)시작점을, x:=Xr+r,y:=Yr로 한다.
(ii)x:=x+1을 y:=y-1로 치환한다.
(iii)y:=y+1을 x:=x+1로 치환한다.
제2 상한이라면,
(i)시작점을, x:=Xr,y:=Yr+r로 한다.
(ii)x:=x+1을 x:=x-1로 치환한다.
(iii)y:=y+1을 y:=y-1로 치환한다.
제3 상한이라면,
(i)시작점을, x:=Xr-r,y:=Yr로 한다.
(ii)x:=x+1을 y:=y-1로 치환한다.
(iii)y:=y+1을 x:=x+1로 치환한다.
어느 것으로서 f1,f2를 변화시켜 f1≥0, f2≥0 판단을 행하는 처리는 상한에 의존하기 않는다는 것을 알아야 한다.
더욱이, 부분적인 원호를 그린다면, 시작점을 지정함과 동시에 ct_x, ct_y값을 r보다 작은 값으로 설정할 수도 있다.
7.폭 1의 타원호
폭 1의 타원호의 묘화는, 본질적으로 제14도의 f1 및 f2의 원 방정식을 타원 방정식으로 치환하기만 해도 된다.
그런데, 제17도를 참조하면, 제1 상한에 있어서 x 축과의 교점이 (a,0)이고 y축과의 교점이 (0,b)인 타원이 도시되어 있다. 이와 같은 타원 방정식은 다음과 같다.
따라서, 폭1의 타원 선의 외측 윤곽 방정식(f1)과, 내측 윤곽 방정식(f2)은 제17도에 도시한 바대로 된다. 우선, f1에 있어서, 양변에 (a+0.5)2(b+0.5)2을 곱하고, 게다가 0.5이라는 항이 정수가 되도록 양변을 16배로 하여 좌변으로부터 우변을 빼면, f1을 다음과 같이 변형된다.
이것을, d1(x,y)이라고 한다. f2도 비슷하게 변형하면,
이것을 d2(x,y)이라고 한다. 그러면, 제16도의 폭 1의 원호를 그리기 위한 순서도에서의 f1을 d1으로, f2를 d2로 치환함으로서 제16도의 순서도를 폭 1의 타원호을 그리기 위한 순서도로 확장할 수 있다.
그래서, 이하, 제18도 및 제19도의 순서도, 및 제17도의 타원도를 참조하면, 폭 1의 타원호를 그리는 처리를 설명한다. 제17도에서 (0,-b)에서 (0,a)까지 1/4의 타원호를 그리기로 한다.
단계(1802)에서, d1_init=d1(0,-b), d2_init=d2(0,-b)에 따라 d1 및 d2의 초기값을 각각 구한다. 게다가,
따라서, d1의 x방향 및 y방향 증분함수를 각각 inclx(x,y) 및 incly(x,y), d2의 x방향 및 y방향의 증분함수를 각각 inc2x(x,y) 및 inc2y(x,y)로 하면,
그래서, 단계(1802)에서, inc1x_init=inc1x(0,-b), inc1y_init=inc1y(0,-b), inc2x_init=inc2x(0,-b)및 inc2y_init=inc2y(0,-b)가 계산되고, 초기값으로 저장된다.
단계(1804)에서, x 및 y에 각각 시작점의 좌표인 Xr 및 Yr-b가 저장된다. 여기서, inclx(x,y)의 x좌표를 1증분하였을 때의 증가량을 d_inc1x, inc1y(x,y)의 y좌표를 1증분하였을 때의 증가량을 d_incly, inc2x(x,y)의 x좌표를 1증분하였을 때의 증가량을 d_inc2x, inc2y(x,y)의 y좌표를 1증분하였을 때의 증가량을 d_inc2y라고 정의하면, d_inclx, d_incly, d_inc2x 및 d_inc2y 각각은 단계(1804)에 도시한 바와 같이 된다.
더욱이 단계(1804)에서, 변수(d1)에는 d1_init에 inclx_init를 더한 값이 저장된다. 이것은 d1(제17도에서는 f1으로 도시되어 있다)에 대해 위치를 비교한 점이 현재의 점(초기에는 P0)에 대해 x좌표를 1증분시킨 점이기 때문이다. 또한, 변수(d2)에는 d2_init에 inc2y_init를 더한 값이 저장된다. 이것은 d2(제17도는 f2로서 도시되어 있다)에 대해 위치를 비교한 점이 현재의 점(초기에는 P0)에 대해 y좌표를 1증분시킨 점이기 때문이다.
또한, 단계(1804)에서는, inclx에는 inclx_init에 d_inclx를 더한 값이 저장된다. d_inclx가 추가되는 것은 상기 d1에 대해 서술한 것과 같은 이유이다. incly에는 단지 inlcy_init가 저장된다. inc2x에는 단지 incly_init가 저장된다. inc2y에는 inc2y_init에 d_inc2y를 더한 값이 저장된다. d_inc2y가 추가되는 것은 상기 d2에 대해 서술한 것과 같은 이유이다.
제19도로 진행하여, 단계(1902)에서는 d2≥0인지의 여부가 판단된다. d2≥0이라는 것은 제17도에서 현재의 픽셀로부터 x좌표를 1만큼 증분되 점이 내측 윤곽선(f2)보다 외측에 있다는 것을 의미한다. 그래서, 만약 그렇다면 단계(1906)에서 (x,y)에 대응하는 픽셀이 플롯되고, 그렇지 않다면 단계(1904)에서 (x,y)에 대응하는 픽셀이 배경색으로 플롯되거나 또는 단지 어느 것도 플롯하지 않는다. 이 의미에서 단계(1904)는 생략할 수도 있다.
단계(1908)에서는 d1≥0인지의 여부가 판단된다. d1≥0이라는 것은 현재의 픽셀로부터 x좌표를 1만큼 증분시킨 점이 외측 윤곽선(f1)보다 외측에 있다는 것을 의미한다. 만약 그렇다면 현재의 픽셀로부터 x좌표를 1만큼 증분시킨 점은 폭 1의 타원호 범위내에 있지 않기 때문에 다음 픽셀로서 선택되지 않는다. 따라서, y:=y+1이 행해져 현재의 픽셀로부터 y좌표를 1만큼 증분시킨 점이 픽셀로 선택된다. 이 y좌표의 증분과 함께 d1에는 incly가 가산되고, d2에는 inc2y가 가산되고, 게다가 다음 처리에 대비하여 증분량인 inc1y 자체가 d_incly만큼 증분되고, inc2y자체가 inc2y만큼 증분된다. 더욱이, y방향의 증분 카운터(ct_y)가 1개 감소된다.
단계(1908)에서 d1≥0의 판단이 부정이라면, 그것은 현재의 픽셀로부터 x좌표를 1만큼 증분시킨 점이 외측 윤곽선(f1)보다 내측에 있다는 것을 의미하고, 따라서, x:=x+1이 행해지고, 현재의 픽셀로부터 x좌표를 1만큼 증분시킨 점이 다음 픽셀로서 선택된다. 이 x좌표의 증분과 함께 d1에는 inclx가 가산되고, d2에는 inc2x가 가산되고, 게다가 다음 처리에 대비하여 증분량인 inclx자체가 d_inclx만큼 증분되고, inc2x자체가 d_inc2x만큼 증분된다. 게다가, x방향의 증분 카운터(ct_x)가 1개 감소된다.
단계(1910)에서 카운터(ct_x) 및 카운터(ct_y)가 동시에 0인지가 판단되고, 만약 그렇다면 처리는 종료하고, 그렇지 않다면 단계(1902)의 판단 단계로 복귀한다.
제18도 및 제19도의 순서도는, 제4 상한에 타원호를 그리는 처리와 관련하여 설명하였지만, 상기 원호의 경우에 설명한 것과 같이 변경시킴으로서 임의의 상한에 폭 1의 타원호을 그릴 수 있게 된다.
이상 서술한 바와 같이, 본 발명의 한 가지 특징에 따르며, 폭 1의 직선을 실질적으로 정수 연산만 함으로서 브레젠함의 알고리즘에 의한 것과 동등한 속도로 플롯할 수 있게 된다. 폭 1의 직선은 브레젠함의 알고리즘에 의해 그려진 직선보다도 명료하고 표시품질에서 우수하기 때문에, 본 발명에 따라 폭 1의 직선을 실질적으로 정수 연산만으로 그리는 것이 가능한 것은 여러가지 그래픽스 어플리케이션에 있어서도 특히 의의가 크다고 생각된다.
더욱이, 종래부터 원호를 그리기 위한 브레젠함의 알고리즘은 공지되어 있는데, 이것에 따르면 실질적으로 정수 연산만으로 원호를 그릴 수 있다. 그러나, 직경이 1씩 다른 동심의 복수의 원을 그림으로써 원의 내부를 채우려고 하면, 브레젠함의 알고리즘으로 그려진 원호는 아무리해도 얼룩(spots)으로 원의 내부에 채워지지 않는 픽셀이 발생하고 만다. 폭 1의 원호는 직경이 1씩 다른 동심의 복수의 원으로서 원의 내부를 완전히 채울 수 있다. 따라서, 표시 품질상, 폭 1의 원호는 장점이 크지만, 종래의 방법으로서 폭 1의 원호는 복잡한 평방근 계산을 포함하는 극히 계산량이 많아 저속 처리로 그려지게 되고, CUP의 속도로서는 거의 허용할 수 없는 저속으로 밖에 폭 1의 원호를 그릴 수 없었다. 그런데, 본 발명의 다른 특징에 따르면 폭 1의 원호를 실질적으로 정수 연산함으로서 고속으로 그릴 수 있게 된다. 실제로, 동일한 하드웨어 구성으로서 발명자가 실험한 결과, 종래의 방법보다 수 십내지 수 백배정도 본 발명의 폭 1의 원호 묘화 방법이 고속이었다.

Claims (4)

  1. 픽셀을 디스플레이상의 임의의 좌표점에서 개별적으로 플롯할 수 있는 디스플레이 상에 컴퓨터 연산처리에 의해 선을 묘화하는 방법(A method for drawing a line)에 있어서,(a)선을 그려야 할(a line to be drawn)시작점과 종료점을 지정하는 단계-상기 선은 그 길이의 적어도 일부분에 대하여 0˚보다 크고 90˚보다 적은 양(+)의 기울기를 갖음-,(b)위쪽 윤곽선및 아래쪽 윤곽선을 결정하는 단계-상기 위쪽 윤곽선 및 아래쪽 윤곽선은 상기 선으로부터 선택된 양 W만큼 간격을 두고 그려지는데, 여기에서 W는 0보다 큰 양임-,(c) 상기 시작점을 현재의 점으로 세팅하는 단계,(d) 상기 디스플레이 상의 상기 현재의 점에 대응하는 픽셀을 플롯(plotting the pixel)하는 단계,(e) 제1점과 제2점이 상기 위쪽 윤곽선과 상기 아래쪽 윤곽선 사이의 영역내에 존재하는지의 여부를 결정하고 - 상기 제1점 및 제2점 각각은 X성분 및 Y성분을 갖고, 상기 제1점의 X성분은 상기 현재의 점보다 상기 종료점에 더 근접하도록 소정값 만큼 증분되고, 상기 제2점의 Y성분은 상기 현재의 점보다 상기 종료점에 더 근접하도록 소정값 만큼 증분됨-, 만약 상기 제1점이 상기 영역내에 존재한다면, 상기 제1점을 현재의 점으로 세팅하고 상기 단계(d)로 복귀하는 단계,(f)만약 상기 제1점은 상기 영역내에 존재하지 않고 상기 제2점이 상기 영역내에 존재한다면, 상기 제2점을 현재의 점으로 세팅하고 상기 단계(d)로 복귀하는 단계, (g)만약 상기 제1점과 상기 제2점의 어느 것도 상기 영역내에 존재하지 않는다면, 제3점이 상기 현재의 점보다 상기 종료점에 더 근접하도록 X성분과 Y성분 양쪽 모두가 소정값만큼 증가된 제3점을 현재의 점으로 세팅하고 상기 단계(d)로 복귀하는 단계, 및 (h) 현재의 점이 상기 종료점 또는 그 근처에 도달할 때까지 상기 단계(d)내지 단계(g)를 반복하는 단계를 포함하는 선 묘화 방법.
  2. 제1항에 있어서, 상기 값은 +1인 것을 특징으로 하는 선 묘화 방법.
  3. 픽셀을 임의의 좌표점에서 개별적으로 플롯할 수 있는 디스플레이 상에 컴퓨터 연산처리에 의해 선을 묘화하는 장치에 있어서, (a)선을 그려야 할(a line to be drawn)시작점과 종료점을 지정하는 수단-상기 선은 그 길이의 적어도 일부분에 대하여 0˚보다 크고 90˚보다 적은 양(+)의 기울기를 갖음-, (b) 위쪽 윤곽선 및 아래쪽 윤곽선을 결정하는 수단-상기 위쪽 윤곽선 및 아래쪽 윤곽선은 상기 선으로부터 선택된 양 W만큼 간격을 두고 그려지는데, 여기에서 W는 0보다 큰 양임-, (c) 상기 시작점을 현재의 점으로 세팅하는 수단, (d)상기 디스플레이 상의 상기 현재의 점에 대응하는 픽셀을 플롯(plotting the pixel)하는 수단, (e)제1점과 제2점이 상기 위쪽 윤곽선과 상기 아래쪽 윤곽선 사이의 영역내에 존재하는지의 여부를 결정하고-상기 제1점 및 제2점 각각은 X성분 및 Y성분을 갖고, 상기 제1점의 X성분은 상기 현재의 점보다 상기 종료점에 더 근접하도록 소정값만큼 증분되고, 상기 제2점의 Y성분은 상기 현재의 점보다 상기 종료점에 더 근접하도록 소정값만큼 증분됨-,만약 상기 제1점이 상기 영역 내에 존재한다면, 상기 제1점을 현재의 점으로 세트하고 상기 단계(d)로 복귀하는 수단,(f) 만약 상기 제1점은 상기 영역내에 존재하지 않고 상기 제2점이 상기 영역내에 존재한다면, 상기 제2점을 현재의 점으로 세트하고 상기 단계(d)로 복귀하는 수단,(g) 만약 상기 제1점과 상기 제2점의 어느 것도 상기 영역 내에 존재하지 않는다면, 제3점이 상기 현재의 점보다 상기 종료점에 더 근접하도록 X성분과 Y성분 양쪽 모두가 소정값만큼 증가된 제3점을 현재의 점으로 세트하고 상기 단계(d)로 복귀하는 수단, 및 (h) 현재의 점이 상기 종료점에 도달할 때까지 상기 단계(d) 내지 단계(g)를 반복하는 수단을 포함하는 선 묘화 장치.
  4. 제3항에 있어서, 상기 값이 +1인 묘화 장치.
KR1019940018967A 1993-09-01 1994-08-01 폭 1의 선을 묘화하기 위한 방법 및 장치 KR0147440B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP1993-217262 1993-09-01
JP93-217262 1993-09-01
JP5217262A JP2571662B2 (ja) 1993-09-01 1993-09-01 線描画方法及び装置

Publications (2)

Publication Number Publication Date
KR950009408A KR950009408A (ko) 1995-04-21
KR0147440B1 true KR0147440B1 (ko) 1998-09-15

Family

ID=16701389

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019940018967A KR0147440B1 (ko) 1993-09-01 1994-08-01 폭 1의 선을 묘화하기 위한 방법 및 장치

Country Status (4)

Country Link
US (1) US5502801A (ko)
EP (1) EP0642101A3 (ko)
JP (1) JP2571662B2 (ko)
KR (1) KR0147440B1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5627957A (en) * 1995-01-31 1997-05-06 Compaq Computer Corporation Run slice line draw engine with enhanced processing capabilites
JPH09120450A (ja) * 1995-10-25 1997-05-06 Ricoh Co Ltd 画像処理装置
KR100435258B1 (ko) * 1997-09-03 2004-07-16 삼성전자주식회사 컴퓨터 그래픽의 3차원 직선 그리는 방법
JP6604087B2 (ja) * 2015-08-20 2019-11-13 大日本印刷株式会社 パターン編集プログラム、ショットデータ作成プログラム、パターン編集装置、ショットデータ作成装置、パターン編集方法
CN108168456B (zh) * 2017-12-27 2020-06-12 南京鑫业诚智能科技有限公司 一种激光扫描检测中的取点方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4620287A (en) * 1983-01-20 1986-10-28 Dicomed Corporation Method and apparatus for representation of a curve of uniform width
NL8502643A (nl) * 1985-09-27 1986-04-01 Oce Nederland Bv Werkwijze voor het genereren van lijnstukken.
US5202960A (en) * 1988-11-02 1993-04-13 Digital Equipment Corp Method and apparatus for plotting polygon edges on a pixelized grid
US5095520A (en) * 1990-06-07 1992-03-10 Ricoh Company, Ltd. Method and apparatus for drawing wide lines in a raster graphics system
US5309553A (en) * 1990-06-15 1994-05-03 Mitsubishi Denki Kabushiki Kaisha Apparatus for and method of generating a straight line of pixels in a discrete coordinate system
US5293472A (en) * 1991-04-22 1994-03-08 International Business Machines Corporation Method of generating lines and curves of user specified thicknesses on a raster device
JPH056431A (ja) * 1991-06-27 1993-01-14 Matsushita Electric Ind Co Ltd 輪郭線特徴点検出装置

Also Published As

Publication number Publication date
JPH0793569A (ja) 1995-04-07
EP0642101A3 (en) 1995-09-27
KR950009408A (ko) 1995-04-21
US5502801A (en) 1996-03-26
EP0642101A2 (en) 1995-03-08
JP2571662B2 (ja) 1997-01-16

Similar Documents

Publication Publication Date Title
US6693637B2 (en) Method and apparatus for determining bins to be updated for polygons, including lines
US6833835B1 (en) Method and apparatus for antialiased imaging of graphical objects
US5666520A (en) Graphics display system including graphics processor having a register storing a series of vertex data relating to a polygonal line
US5621827A (en) Image processing method and apparatus for obtaining object data to reconstruct the original image
JPH05307610A (ja) テクスチャマッピング方法およびその装置
US5581796A (en) Processing method and graphics processor for skip drawing a figure
JP3786995B2 (ja) オブジェクトにテクスチャを表示するためにテクセル値を計算する方法及び装置
US20090309898A1 (en) Rendering apparatus and method
US5295234A (en) Apparatus for displaying a three dimensional object which appears substantially the same in different display directions by modifying stored image data by a scale factor
KR0147440B1 (ko) 폭 1의 선을 묘화하기 위한 방법 및 장치
JP2634851B2 (ja) 画像処理装置
JP3060761B2 (ja) 描画装置
JP3338484B2 (ja) アウトラインフォント変形装置
JPH0350686A (ja) 図形処理方式
JP2888270B2 (ja) 図形処理装置及びその方法
JP2613653B2 (ja) 画像処理装置
JP2641790B2 (ja) ベクトルのラスタ変換装置
JPH06168337A (ja) 塗り潰し処理方法
JPH087794B2 (ja) 画像処理方法
JPH0260034B2 (ko)
JPH0612497A (ja) 画像処理方法及びその装置
JPH0520468A (ja) 画像処理方法及びその装置
JPH01152583A (ja) 直線近似処理装置
JPS63223981A (ja) 任意多角形の内部点算出装置
JPH0636049A (ja) 図形のハイライト表示方法及びグラフィックス装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee