繪製(描述)多邊形

此示例嘗試模仿內建路徑構造運算子(如 arc)的行為。

如果存在當前點,則 poly 首先繪製一條線到(x, y)+(r, 0),否則它將通過移動到該點開始。

而不是 gsavegrestore(它具有丟棄我們想要的當前路徑的非常改變的不良效果),它儲存了當函式開始時存在的當前變換矩陣(CTM)的副本。

然後它對每個後續點進行切換,通過縮放和旋轉矩陣始終為(0,1)。最後,它呼叫 closepath 然後將儲存的矩陣恢復為 CTM。

% x y n radius  poly  -
% construct a path of a closed n-polygon
/poly {
    matrix currentmatrix 5 1 roll  % matrix x y n radius
    4 2 roll translate             % matrix n radius
    dup scale                      % matrix n
    360 1 index div exch           % matrix 360/n n
    0 1 {lineto currentpoint moveto}stopped{moveto}if   % start or re-start subpath
    {                              % matrix 360/n
        dup rotate                 % matrix 360/n
        0 1 lineto                 % matrix 360/n
    } repeat                 % matrix 360/n
    pop                      % matrix
    closepath                % matrix
    setmatrix                %
} def