繪製(描述)多邊形
此示例嘗試模仿內建路徑構造運算子(如 arc
)的行為。
如果存在當前點,則 poly
首先繪製一條線到(x, y)+(r, 0),否則它將通過移動到該點開始。
而不是 gsave
… grestore
(它具有丟棄我們想要的當前路徑的非常改變的不良效果),它儲存了當函式開始時存在的當前變換矩陣(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