2017-05-29 113 views
0

我在python的烏龜模塊中製作一個向量來控制一隻烏龜的移動。我想知道是否有可能找到矢量的旋轉角度以便用於烏龜的旋轉。我想從其中一個端點找到旋轉角度。感謝您的幫助。尋找一隻烏龜的標題Vec2D

回答

0

Vec2D實例僅包含X值&。要知道烏龜朝哪個方向前進,您需要一個包含在烏龜內的第三個方向值,而不是在Vec2D中。 (從技術上講,你可能需要知道傾斜以及但是這很少使用。)

旋轉一個Vec2D的是相對於它與原點所成的角度,無關的標題的turle。簡單地通過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() 

:例如,我們可以繪製一個正方形這種方式,忽略了龜的標題。 Vec2D相對於原點的角度被稱爲自變量但我沒有看到任何Vec2D方法來獲取它。 This vector package有一個,我們可以爲我們的目的修改:

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() 

請注意,我用mode('logo')簡化我的數學,因爲我們已經沒有具體的目的也主要在此代碼。雖然這會打印出烏龜相對於原點的位置的角度,但是如果我們執行forward()命令,它不會告訴我們烏龜的朝向。

如果你想記錄和/或播放烏龜的動作,你可以使你自己的數據結構,包括一個Vec2D和烏龜的方向。

然而,圍繞保持龜的方向,只是用Vec2D位置的列表方式,是指設置龜的列表中的一個Vec2D位置的位置,使用組合turtle.setheading(turtle.towards(position))下一個 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

+0

@ rbhog,相對於原點(或其他任意的點)確定。但是矢量的旋轉不是烏龜的標題。兩件不同的事情。對於一條路徑上的龜,龜的朝向朝向路徑中的下一個位置。 – cdlane

+0

我想知道的是如何找到旋轉角度與任意點相比較,以在另一個命令中設置烏龜的標題。 – rbhog