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