2017-05-29 9 views
0

私は、カメの動きを制御するために、Pythonのカメモジュールにベクターを作っていました。私はカメの回転に使用するためにベクトルの回転角を見つけることが可能かどうか疑問に思っていました。私は終点の1つから回転角度を探したい。助けてくれてありがとう。タートルの見出しを探すVec2D

答えて

0

Vec2DインスタンスにはX & Y値のみが含まれます。どのようにカメが向かうかを知るためには、Vec2Dではなく、カメ自身に含まれる3番目の向きの値が必要です。 (技術的には、あなたはおそらく同様にチルトを知っておく必要がありますが、それはほとんど使用されませんです。)

回転Vec2Dのは見出しに関係のない、それが原点となす角度に相対的ですタートルの例えば、我々は亀の見出しを無視して、このよう四角形を描画することができます

from turtle import Turtle, Screen 

screen = Screen() 
yertle = Turtle('turtle') 

yertle.goto(200, 200) 

for _ in range(4): 
    yertle.goto(yertle.position().rotate(90)) 

screen.exitonclick() 

単にorginに対する相対Vec2Dの位置を回転させることによって。 Vec2Dが原点に対してなす角度は、という引数となりますが、取得するVec2Dの方法はありません。私たちは、このコードのために心の中では具体的な目的をしたんので、私の数学を簡素化するためにmode('logo')を使用

import math 
from turtle import Turtle, Screen 

screen = Screen() 
screen.mode('logo') 

def argument(self): 
    """ Returns the argument of the vector, the angle clockwise from 0.""" 
    arg_in_rad = math.acos(self[1]/abs(self)) 
    arg_in_deg = math.degrees(arg_in_rad) 
    if self[0] < 0: 
     return 360 - arg_in_deg 
    return arg_in_deg 

yertle = Turtle('turtle') 

yertle.goto(200, 200) 

for _ in range(4): 
    print(argument(yertle.position())) 
    yertle.goto(yertle.position().rotate(90)) 

screen.exitonclick() 

注:This vector packageは、我々の目的のために修正することができるものがあります。これは起源に対するタートルの位置の角度を印刷しますが、forward()コマンドを実行すると、タートルの見出しについては何も教えてくれません。

タートルの動きを記録したり再生したりする場合は、Vec2Dとタートルの向きを組み込んだ独自のデータ構造を作成できます。あなたは、リスト内Vec2D位置にカメの位置を設定に組み合わせturtle.setheading(turtle.towards(position))を使用する場合

しかし、周りのカメの向きを保ち、そしてちょうどVec2D位置のリストを使用して、一つの方法は、ありますリストのVec2Dの位置。そのようにして、カメは次の場所に向かって常に向いています:

from turtle import Turtle, Screen 

positions = [(-3.0, 10.0), (-2.0, 13.0), (0.0, 17.0), (5.0, 23.0), (6.0, 24.0), 
    (11.0, 27.0), (22.0, 30.0), (49.0, 31.0), (72.0, 26.0), (116.0, 3.0), 
    (135.0, -31.0), (132.0, -52.0), (128.0, -65.0), (122.0, -84.0), 
    (109.0, -118.0), (82.0, -158.0), (20.0, -188.0), (-52.0, -181.0), 
    (-132.0, -136.0), (-213.0, -45.0), (-244.0, 97.0), (-206.0, 225.0)] 

screen = Screen() 
yertle = Turtle('turtle') 

for target, position in enumerate(positions, start=1): 
    yertle.goto(position) 

    if target < len(positions): 
     yertle.setheading(yertle.towards(positions[target])) 


screen.mainloop() 
+0

ベクトルの回転角度を計算する方法はありませんか?原点(または他の任意の点)に対して、@ rbhog、 – rbhog

+0

10が確実です。しかし、ベクトルの回転はカメの見出しではありません。 2つの異なること。パスに沿ったカメの場合、カメの見出しはパスの次の位置に向かっています。 – cdlane

+0

私が理解しようとしたのは、任意の点と比較して回転角を見つけて、他のコマンドでカメの見出しを設定する方法でした。 – rbhog

関連する問題