用乌龟绘制一个超椭圆

时间:2016-09-20 13:44:15

标签: netlogo computational-geometry ellipse

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

rt 1 fd .0

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

超椭圆不是那么多。 (常规椭圆也不是微不足道的。) The Wikipedia article on super-ellipses如果您需要刷新该主题。

任何输入都表示赞赏。

使用日落龟是否可以制作出来自乌龟运动的超椭圆?

2 个答案:

答案 0 :(得分:1)

我有1/4,我想你可以将其他三个放在一起。此处未测试其他n值。 (使用Wiki表示法,加上phi作为旋转整个事物的角度。)我知道,复位标记的位置,下笔,是草率的。

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

答案 1 :(得分:0)

另一个答案的概括形式似乎产生了我想到的那种东西。笔越接近其中一个焦点,绘图越接近正方形。 n< 1超椭圆未实现。

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