在徽标中可以进行几何变换吗?
特别是水平反射是否可能?
首先:
to ngon :n :s
repeat :n [ fd :s lt 360/:n]
end
ngon 5 50我想要一个可以在行的另一边反射的命令y=0,它可以工作如下
reflect ngon 5 50并且会产生与
repeat 5 [ fd 50 rt 360/5]发布于 2020-03-18 02:09:55
你不能改变lt和rt的行为。但也有一些选择。
选项1
您可以编写自己的可逆版本的lt和rt,并在以前使用常规版本的过程中使用这些版本:
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
您可以在过程中包装命令,包装器在需要时交换lt和rt之后执行命令:
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坐标。但是我们可以想象类似于上面的代码,它也更新了seth、xcor、setx、pos、setpos等等。
https://stackoverflow.com/questions/60727142
复制相似问题