2016-09-20 170 views
0

顯然,任何可以用其他方式繪製的形狀都可以由海龜繪製。圓形和方形容易用海龜繪製超橢圓形

rt 1 fd .0 

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

超橢圓沒有這麼多。 (正則省略也不是微不足道的。) The Wikipedia article on super-ellipses如果您需要刷新主題。

任何輸入表示讚賞。

使用倒吊的烏龜是否有辦法使烏龜運動中出現超橢圓?

+0

你說定期的省略號不是微不足道的,你知道它們是如何繪製的嗎? – gue

+0

很喜歡lon的答案。 –

+0

使用setpos做什麼問題?你有方程。 –

回答

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 
+0

Very很好,我搞砸了一下,並做了一個使你的許可完整的橢圓,我將它添加到你的答案。 –

+0

你好。我的答案尖叫改進! –

+0

我添加了它並刪除了我的競爭答案。 –

0

另一個答案的廣義形式似乎產生了我想到的那種東西。筆開始越靠近其中一個焦點,畫圖越接近正方形。沒有實現超橢圓。

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