为了在我的文档中稍微修饰一下所有集合的表示,我一直在寻找如何生成 patatoid 的方法,并发现这个文件。然而我不太清楚它是如何工作的以及如何实现它。
有人可以解释这个算法并在 metapost 中概述实现(使用 lua(la)tex)吗?
答案1
我认为这个问题与评论中链接的问题不同,因为它要求一种特定类型的路径(patatoid),并且明确要求提供元帖子解决方案(链接问题中不存在)。
我这样解释该算法(你可以取消注释:
\starttext
\startMPpage[offset=1dk]
vardef patatoid(expr w, h) =
hide(
numeric maxi,maxd ; maxd := 0 ;
numeric dist[] ;
pair tmpp[] ;
path sq, p ;
sq := unitsquare xyscaled (w,h) ;
for i = 0 upto 3:
tmpp[i] := point (i + uniformdeviate(1)) of sq ;
endfor ;
tmpp[4] := tmpp[0] ;
for i= 0 upto 3 :
dist[i] := abs(tmpp[i+1] - tmpp[i]) ;
if (dist[i] > maxd) :
maxd := dist[i] ;
maxi := i ;
fi ;
endfor ;
% draw sq ;
% draw tmpp[0]--tmpp[1]--tmpp[2]--tmpp[3]--cycle ;
% drawpoints tmpp[0]--tmpp[1]--tmpp[2]--tmpp[3]--cycle withpen pencircle scaled 4 ;
p := for i = 0 upto maxi : tmpp[i] .. endfor (uniformdeviate(1))[tmpp[maxi],tmpp[maxi+1]] for i = maxi + 1 upto 3: .. tmpp[i] endfor .. cycle ;
% drawpoints p withcolor darkred ;
)
p
enddef ;
draw patatoid(100,75) withpen pencircle scaled 1 ;
\stopMPpage
\stoptext
在下图中,我取消了注释行,显示了矩形和点。
如果使用 进行编译,则上述文件是完整的context
。如果您在其他环境中使用 metapost,则应使用\startMPpage
和之间的部分\stopMPpage
。