沿着一条特定角度的所有点

时间:2014-04-02 10:45:45

标签: math line point angle

我有一个点(x0,y0)。我想找到从(x0,y0)开始的线上的所有点,它们相对于x轴成角度θ。我手上只有(x0,y0)和theta。而已。我该怎么做?

1 个答案:

答案 0 :(得分:1)

角度的余弦为您提供了沿x方向拍摄的步骤,角度的正弦给出了沿y方向拍摄的步骤。采用这种方法而不是找到线的梯度会更好,因为对于垂直线,渐变是无限的。

您无法在计算机上找到所有点,因为它们数量无限,因此您必须决定步长和步数。这在下面的Python程序中有说明,它选择1步和100步的步长。

import math, matplotlib.pyplot as plt

def pts(x0,y0,theta):
    t = range(101) # t=0,1,2,3,4,5...,100
    x = [x0 + tt*math.cos(theta) for tt in t]
    y = [y0 + tt*math.sin(theta) for tt in t]
    return x,y

def degrees2radians(degrees):
    return degrees * math.pi/180

degrees = 45
x,y=pts(-100,-100, degrees2radians(degrees))
plt.plot(x, y, label='{} degrees'.format(degrees))

degrees = 90
x,y=pts(100,100, degrees2radians(degrees))
plt.plot(x, y, label='{} degrees'.format(degrees))

plt.xlim(-100,300)
plt.ylim(-100,300)
plt.legend()
plt.show()

和输出

enter image description here

下面的R程序采用了类似的方法。

drawline=function(x0,y0,theta) {
    t=0:100 # t = 0,1,2,3,4,5,...,100
    # x formed by stepping by cos theta each time
    x=x0 + t*cos(theta)
    # y formed by stepping by sin theta each time
    y=y0 + t*sin(theta)
    # plot
    rng=c(min(x,y),max(x,y)) # range
    plot(y~x,xlim=rng,ylim=rng,type="l")
}

在这里,theta是弧度。所以drawline(-100,-100,pi/4)对应45度并给出第一个图,而drawline(100,100,pi/2)对应90度,并给出第二个图左侧所示的垂直线。

enter image description here

enter image description here