metapost patatoid 生成器

metapost patatoid 生成器

为了在我的文档中稍微修饰一下所有集合的表示,我一直在寻找如何生成 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

相关内容