2017-07-26 19 views
0

私はPythonでタートルモジュールを使用して楕円を描画しようとしている、私の計画は以下の通りである:予期しない結果

  1. は、出発点は、楕円
  2. の焦点としますそれをしてみましょう
  3. 転送の距離は*(1-E E)/(1-E math.cos(シータ))であるとする、前方亀をしてみましょう0
  4. に初期シータ値を設定し
  5. 元の場所に戻って戻って
  6. はシータ値
  7. 繰り返し上記のプロセスを、非常に小さなターンして更新

ここに私の実際のコードです:

import turtle 
import math 
wn = turtle.getscreen() 
wn.bgcolor("red") 
My_Turtle = turtle.Turtle() 
My_Turtle.penup() 
My_Turtle.speed(9) 
i=0 
j=0 
a=200 
e=0.5 
x_0 = 20 
theta = 0 
while(i<5000): 
    #Plotting squares 
    My_Turtle.penup() 
    ellipse = a*(1-e*e)/(1-e*math.cos(theta)) 
    My_Turtle.forward(ellipse) 
    My_Turtle.pendown() 
    My_Turtle.forward(1) 

    My_Turtle.left(180) 
    My_Turtle.penup() 
    My_Turtle.forward(ellipse+1) 

しかし、結果は次のように本当にオフにした:(未完全なイメージが、それは既にオフだと見ることができる)

enter image description here

ことができます誰もどこに間違っているのか教えてください。どうもありがとうございました!

+0

おっと、2番目の画像のタイトルを修正するのを忘れてしまった、それは明らかに楕円ではない私のプログラムの出力です。 –

+0

あなたの質問にコードを投稿する必要があります。イメージとしてではありません。 –

+0

@ JeroenHeier、解決策を見つけるための副作用として、彼のコードのテキストを質問に追加しました。 – cdlane

答えて

1

私は1つの焦点からではなく、中心から楕円を描くのに慣れています。そのため、私は楕円の数学を読んで、この周りに頭を浮かべています。あなたの主要な計算式は正しいと思われます:

ellipse = a*(1-e*e)/(1-e*math.cos(theta)) 

問題はあなたの作図の仕方です。まず、タートルを正しい方向に向けるためにsetheading()を追加する必要があります。 (デフォルトではそれは度であるので、カメのデフォルトを変換または変更する必要があることに注意してください)。第二に、あなたの図のステップ間をどのように橋渡しするかでは不十分です。

私は以下のコードを作り直してきた、そしてそれは同じ楕円を生成し確認するために、中心ベースのソリューションにそれを比較しています

import math 
from turtle import Turtle, Screen 

my_screen = Screen() 

my_turtle = Turtle(visible=False) 
my_turtle.speed('fastest') 
my_turtle.radians() 
my_turtle.penup() 

e = 0.5 # linear eccentricity 
a = 200 # semi major axis 
c = e * a # distance from center to focal point 

my_turtle.goto(-c, 0) # starting at a focal point 
there = (2 * c, 0) # initialize previous point visited 

step = 0.1 

theta = step # already at starting point, so calculate next point 

while theta < math.pi * 2 + step: # overshoot to close curve 

    # draw ellipse from one focus point 
    my_turtle.setheading(theta) 

    distance = a * (1 - e * e)/(1 - e * math.cos(theta)) 

    my_turtle.forward(distance) 
    here = my_turtle.position() 
    my_turtle.pendown() 
    my_turtle.goto(there) # draw line from last position to this one 
    my_turtle.penup() # comment out to demonstrate algorithm 
    my_turtle.goto(-c, 0) # return to focal point 
    there = here 

    theta += step 

my_screen.exitonclick() 

OUTPUT

enter image description here

私はこのイラストレーションのためにペンを下に置いたので、1つの焦点から楕円を形成していることは明らかです。

+0

Thx a lot !!最後に、私が持っていることが見出しの方向の問題であることを確認します。 –