我有一个点(x0,y0)。我想找到从(x0,y0)开始的线上的所有点,它们相对于x轴成角度θ。我手上只有(x0,y0)和theta。而已。我该怎么做?
答案 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()
和输出
下面的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度,并给出第二个图左侧所示的垂直线。