我在编写器课程的后记上编写了一个高级语言,我想创建两个函数:concatenate和union,它应该采用两个路径并将它们联系起来 . 连接通过将第一个路径的终点连接到第二个路径的起点来工作 . Union工作不会连接 endpoints .
玩了一段时间后,我设法自动执行这些操作 . 在某些情况下我得到了预期的结果,但在其他情况下没有 . 我将给出我的解决方案的具体示例,以及它们失败的地方 .
WORKING: 如果我想采用两条路径,一条由弧线构成,另一条通过连接三个点,我可以采取以下基本路径:
newpath 100 200 70 0 45 arc %create an arc path
newpath 100 100 moveto 200 200 lineto 200 300 lineto %create a polygon
并通过让我的编译器编写代码来连接它们(从弧的 endpoints 到行的起点创建一条线):
newpath 100 100 moveto 200 200 lineto 200 300 lineto reversepath currentpoint newpath %stores the startpoint of the polygon to be used later
newpath 100 200 70 0 45 arc % creates the arc
lineto %takes the saved information about start of the polygon and creates a line to it
100 100 moveto 200 200 lineto 200 300 lineto %finishes by adding the polygon to the path
STILL MISSING:
我正在操作我用来创建这些路径的原始字符串,但是在用户为路径创建绑定的情况下如何继续,现在我想加入它们 . 例如,假设用户创建绑定:
/p1 { newpath 100 200 70 0 45 arc } bind def
/p2 { newpath 100 100 moveto 200 200 lineto 200 300 lineto } bind def
如何在不修改绑定的情况下根据需要继续加入这两个路径?
我试过类似的东西
p1 uappend p2
,但它没有奏效 . 在寻找了很多天之后,我找不到任何帮助 .
谢谢
1 回答
您可以加载函数的定义,然后查看可执行数组的内容 .
会告诉你看起来像什么 . 或者,您可以定义存储其操作数的每个路径运算符的版本,并只执行这些过程 .
像往常一样,编程问题有多种可能的解决方案 .