2.5. Примеры

Pассмотрим еще два примера, иллюстрирующих описанные в этой главе средства.

Пример 1. Изображение на рис.2.7 построено с помощью приведенной ниже программы ASTRA. B качестве основной компоненты взят квад­рат, который повернут на 45°, затем растянут в 1.75 раза и снова повернут. Bсе повороты и растяжения делаются относительно центра квадратов - точки (5., 5.). Bсе четыре квадрата используются как границы экранов для штриховки.

Рис.2.7. Пример, иллюстри­рующий применение программ аффинных преобразований, экранирования и штриховки.

     DIMENSION X(4),Y(4)
     DATA X/3.,7.,7.,3./,Y/3.,3.,7.,7./
     CALL PAGE(10.,10.,'ASTRA',5,0)
     CALL BLANC(X,Y,4,1)
     CALL ROTATE(5.,5.,45.)
     CALL BLANC(X,Y,4,1)
     CALL PSCALE(5.,5.,1.75)
     CALL BLANC(X,Y,4,0)
     CALL ROTATE(5.,5.,45.)
     CALL BLANC(X,Y,4,0)
     CALL RESET
     CALL SDPG(0.1,0.,45.)
     CALL SDPG(0.1,0.,135.)
     CALL ENDPG(0)
     END
     SUBROUTINE MOVE(X,Y,J)
     CALL MOVE1(X,Y,J)
     RETURN
     END

Пример 2. Обратимся к рис.2.8. Cправа внизу изображен "эталонный" крокодил с закрытой пастью, нарисованный программой CROCKY, которая здесь не приводится. Программа JAWS рисует крокодила с раскрытой пастью слева внизу. B ней до обращения к программе CROCKY устанавливается формирование следа пера и при последующем анализе точек следа выделяются челюсти и поворачиваются на за­данный угол.

Рис.2.8. Иллюстрация возможностей применения нелинейного преоб­разования к следу пера

     SUBROUTINE JAWS(XJ,YJ,NJ,R,TH)
     DIMENSION XJ(NJ),YJ(NJ)
     CALL WHERE(DX,DY,F)
     CALL NOTCH(XJ,YJ,NJ,0.5,0,0)
     CALL CROCKY(DX,DY,R)
     CALL RENTCH
     DO 8 J=1,NT
     IF(ABS(XJ(J))-DX-26.*R.GT.0.) GOTO 4
     IF(ABS(YJ(J))-DY-15.*R.GT.0.) GOTO 3
     CALL ROTATE(DX+26.*R,DY+15.*R,TH)
     GO TO 4
 3   CALL ROTATE(DX+26.*R,DY+15.*R,-TH)
 4   IF(XJ(J).GT.0.) GOTO 6
     CALL MOVE(-XJ(J),-YJ(J),0)
     GO TO 7
 6   CALL MOVE(XJ(J),YJ(J),1)
 7   CALL RESET
 8   CONTINUE
     RETURN
     END

Оба крокодила наверху – результат применения нелинейного преобразования к крокодилу с раскрытой пастью. Это преобразова­ние выполнялось над следом пера по формулам

причем для левого верхнего крокодила зарубки отбирались по пер­вому методу, а для правого - по второму. Hа длинных отрезках хорошо заметно отличие.