簡體   English   中英

在后記中遮蔽三角形

[英]Shading a triangle in postscript

我想寫一些后記代碼來遮蔽三角形。 這是我從幾個生成陰影正方形的谷歌搜索中拼湊而成的一些代碼:


%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 400 400

/square{
 0 0 40 40 rectclip
<< /ShadingType 2
    /ColorSpace [ /DeviceRGB ]
    /Coords [ 0 0 40 40 ]
    /Function <<
    /FunctionType 2
    /Domain [ 0 1 ]
    /C0 [ 0.9 0.2 0.0 ]
    /C1 [ 0.0 0.2 0.9 ]
    /N 1
    >>
   >> 
} bind def
save gsave
200 200 translate 45 rotate
square shfill
grestore restore    
100 100 translate  300 rotate
square shfill showpage  

現在,如果我用這段代碼創建一個純文本文件並將文件名命名為 shade.ps --- 重要的是 .ps --- 並在 Mac 上雙擊打開,然后 Apple Preview 應用程序將打開該文件並制作一張帶有陰影正方形的兩個副本的圖片。 偉大的!

但現在我想以類似的方式遮蔽一個三角形。 我的目標是本着上面的精神編寫幾行代碼來生成陰影三角形。

誰能幫忙? 這甚至是提出這個問題的正確論壇嗎?

2023 年 1 月 16 日添加的注釋:我刪除了下面答案中提到的冗余代碼行。

我的目標是繪制一個帶有薄菱形和厚菱形的 Penrose 瓷磚,然后對菱形進行陰影處理,以幫助呈現出傾斜的屋頂,體現了 John Conway 的名為 Penrasia 的城市的精神。

描述正方形的部分是這一行(在原始代碼中不必要地重復):

0 0 40 40 rectclip

要將其更改為三角形,您需要編寫一個 function 來創建一個三角形路徑,然后對其調用clip 如果您查看rectclip的擴展版本,這可能更容易理解,它看起來像這樣:

/rectclip {
  4 dict
    /height exch def
    /width exch def
    /y exch def
    /x exch def
    x y moveto
    width 0 rlineto
    0 height rlineto
    width neg 0 rlineto
    closepath
    clip
  end
} def

對於三角形,你需要做更多類似的事情,這取決於你想如何描述三角形:

/triclip {
  4 dict
    /height exch def
    /width exch def
    /y exch def
    /x exch def
    x y moveto
    width  0  rlineto
    width 2 div neg  height  rlineto
    closepath
    clip
  end
} def

你會像原來調用rectclip一樣調用這個 function。

0 0 40 40 triclip

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM