首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >徽标中的反射(几何变换)

徽标中的反射(几何变换)
EN

Stack Overflow用户
提问于 2020-03-17 17:13:40
回答 1查看 51关注 0票数 1

在徽标中可以进行几何变换吗?

特别是水平反射是否可能?

首先:

代码语言:javascript
复制
to ngon :n :s
  repeat :n [ fd :s lt 360/:n]
end

ngon 5 50

我想要一个可以在行的另一边反射的命令y=0,它可以工作如下

代码语言:javascript
复制
reflect ngon 5 50

并且会产生与

代码语言:javascript
复制
repeat 5 [ fd 50 rt 360/5]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-18 02:09:55

你不能改变ltrt的行为。但也有一些选择。

选项1

您可以编写自己的可逆版本的ltrt,并在以前使用常规版本的过程中使用这些版本:

代码语言:javascript
复制
make "reversed 0

to lt1 :a
    ifelse :reversed [rt :a] [lt :a]
end

to rt1 :a
    ifelse :reversed [lt :a] [rt :a]
end

to reflect :fn
    make "reversed 1
    run :fn
    make "reversed 0
end

to ngon :n :s
    repeat :n [ fd :s lt1 360/:n]
end

ngon 5 50
reflect [ngon 5 50]

选项2

您可以在过程中包装命令,包装器在需要时交换ltrt之后执行命令:

代码语言:javascript
复制
make "reversed 0

to reflect :fn
    make "reversed 1
    run :fn
    make "reversed 0
end

to replace_all :s :find :replace
   make "head first :s
   make "tail butfirst :s
   if (list? :head) [make "head (list replace_all :head :find :replace)]
   if (:head = :find) [make "head :replace]
   if (count :tail) = 0 [output :head]
   output (se :head replace_all :tail :find :replace) 
end

to wrapper :func
    if :reversed [
        make "func replace_all :func "lt "lt1
        make "func replace_all :func "rt "lt
        make "func replace_all :func "lt1 "rt
    ]
    run :func
end

to ngon :n :s
    wrapper [ repeat :n [ fd :s lt 360/:n] ]
end

ngon 5 50
reflect [ngon 5 50]

理想情况下,应该有一个Logo命令来获取现有过程的主体,然后我们可以动态地将包装器应用到过程的每一行,而不需要修改过程定义本身。但是,我认为Logo中不存在这样的命令。

还值得注意的是,还有其他命令可以更改海龟的标题或x坐标。但是我们可以想象类似于上面的代码,它也更新了sethxcorsetxpossetpos等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60727142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档