【问题标题】:Drawing a super-ellipse with a turtle用乌龟画一个超椭圆
【发布时间】:2017-01-28 11:31:04
【问题描述】:

显然,通过其他方式绘制的任何形状都可以由海龟绘制。圆形和正方形很容易

rt 1 fd .0

if ticks mod 100 = 0 [rt 90]
fd 1

超级椭圆没那么多。 (正则椭圆也不是微不足道的。) The Wikipedia article on super-ellipses 如果您需要更新主题。

感谢任何输入。

使用 pendown turtle 有没有办法制作一个从海龟运动中出现的超椭圆?

【问题讨论】:

  • 你说正则椭圆不是小事,你知道怎么画吗?
  • 有点喜欢 lon 的回答。
  • 使用 setpos 有什么问题?你有方程式。
  • 我们用 setxy 做到了
  • @gue 这就是我在想的那种事情link

标签: netlogo computational-geometry ellipse


【解决方案1】:

另一个答案的概括形式似乎产生了我正在考虑的那种事情。笔开始越接近焦点之一,绘图就越接近正方形。未实现 n

globals[c]  
breed [pens pen] 
breed [foci focus]
foci-own [dist distx disty]
to setup
 ca
 create-pens 1 [set heading 45 fd 10 pendown set C self]
 ;create-foci 1 [setxy (random-xcor / 2) (random-ycor / 2)]
 create-foci 1 [setxy 10 10]
 create-foci 1 [setxy 10 -10]
 create-foci 1 [setxy -10 -10]
 create-foci 1 [setxy -10 10]
end

 to go
 repeat 5100
  [
  ask foci [ 
           set dist distance c 
           set distx xcor - [xcor] of c
           set disty ycor - [ycor] of c
         ]
ask c
 [
       set heading 90 + atan ( sum [distx / dist] of foci / sum [dist] of foci) 
                       ( sum [disty / dist] of foci / sum [dist] of foci) 
       FD .0125
  ]
  ]
end

【讨论】:

    【解决方案2】:

    我有 1/4,我想你可以将其他三个拼凑在一起。其他 n 值在此不做测试。 (使用 Wiki 符号,加上 phi 作为旋转整个物体的角度。)我知道,reset-ticks 的放置,下笔,是草率的。

    to go2
      clear-all
      reset-ticks
      let a 6
      let b 5
      let phi 0
      let n 3.5
      create-turtles 1 [
        let iNdx 1
        repeat 90 [
          show iNdx
          show cos(iNdx)
          if cos(iNdx) > 0 and sin(iNdx) > 0 [
            let tx (a * (cos(iNdx) ^ (2 / n)))
            let ty (b * (sin(iNdx) ^ (2 / n)))
            let tx2 tx * cos(phi) - ty * sin(phi)
            let ty2 tx * sin(phi) + ty * cos(phi)
            setxy tx2 ty2
            ]
          pen-down
          set iNdx iNdx + 1
          ]
        ]
      end
    

    椭圆看起来更简单,但你自己来判断

    to go
      clear-all
      reset-ticks
      let a 6
      let b 5
      let phi 45
      create-turtles 1 [
    
        let iNdx 1
        repeat 360 [
          let tx (a * cos(iNdx))
          let ty (b * sin(iNdx))
          let tx2 tx * cos(phi) - ty * sin(phi)
          let ty2 tx * sin(phi) + ty * cos(phi)
          setxy tx2 ty2
          pen-down
          set iNdx iNdx + 1
          ]
        ]
      end
    

    作为过程的概括和简化。

    to Super-ellipse [x y a b  m n]
     create-turtles 1 [
     let iNdx 1
     repeat 360 [
     setxy  (x + (abs cos iNdx)^(2 / m) * a * (sgn cos iNdx)) 
            (y + (abs sin iNdx)^(2 / n) * b * (sgn sin iNdx))
     pendown
    set iNdx iNdx + 1]
    ]
    end
    

    【讨论】:

    • 非常好,我把它弄乱了一点,并在你的许可下制作了一个完整的椭圆,我会将它添加到你的答案中。
    • 你打赌。我的答案需要改进!
    • 我添加了它并删除了我的竞争答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多