Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 以特定角度沿直线的所有点_Math_Line_Point_Angle - Fatal编程技术网

Math 以特定角度沿直线的所有点

Math 以特定角度沿直线的所有点,math,line,point,angle,Math,Line,Point,Angle,我得到一个点(x0,y0)。我想找到从(x0,y0)开始的直线上的所有点,它与x轴成θ角。我手头只有(x0,y0)和θ。没别的了。我该怎么做呢?角度的余弦给出了x方向的步数,正弦给出了y方向的步数。最好采用这种方法,而不是寻找直线的梯度,因为对于垂直直线,梯度是无限的 你无法在计算机上找到所有的点,因为它们的数量是无限的,所以你必须决定步长和步数。下面的Python程序对此进行了说明,它选择了1和100步的步长 导入数学,matplotlib.pyplot作为plt def pts(x0,y0,

我得到一个点(x0,y0)。我想找到从(x0,y0)开始的直线上的所有点,它与x轴成θ角。我手头只有(x0,y0)和θ。没别的了。我该怎么做呢?

角度的余弦给出了x方向的步数,正弦给出了y方向的步数。最好采用这种方法,而不是寻找直线的梯度,因为对于垂直直线,梯度是无限的

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

导入数学,matplotlib.pyplot作为plt
def pts(x0,y0,θ):
t=范围(101)#t=0,1,2,3,4,5…,100
x=[x0+tt*math.cos(θ)表示t中的tt]
y=[y0+tt*t中tt的数学sin(θ)]
返回x,y
def度数2半径(度):
返回度*math.pi/180
度=45度
x、 y=pts(-100,-100,度2半径(度))
plt.plot(x,y,label='{}度'。格式(度))
度=90度
x、 y=pts(100100,度2半径(度))
plt.plot(x,y,label='{}度'。格式(度))
plt.xlim(-100300)
plt.ylim(-100300)
plt.legend()
plt.show()
和产出

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

drawine=函数(x0,y0,θ){
t=0:100#t=0,1,2,3,4,5,…,100
#每次按cosθ步进形成的x
x=x0+t*cos(θ)
#每次由sinθ步进形成的y
y=y0+t*sin(θ)
#密谋
rng=c(最小(x,y),最大(x,y))#范围
绘图(y~x,xlim=rng,ylim=rng,type=“l”)
}
这里,
theta
以弧度为单位。因此,
drawine(-100,-100,pi/4)
对应45度并给出第一个绘图,而
drawine(100100,pi/2)
对应90度并给出第二个绘图左侧显示的垂直线


这个问题更适合你。你会得到更深入的答案。干杯@MBlanc实际上更像是一个计算问题。对于一个数学家来说,点数是无限的,我认为这是不需要的。对于有限数量的点,您可能需要。但是最好使用适当的库函数
drawLine(x0,y0,x0+r*cos(angle),y0+r*sin(angle))
。我面临的另一个问题是,我需要沿着从(x0,y0)开始的线以角度θ生成整数坐标,比如10个,因为我正在处理图像。如果我在角的余弦或正弦上使用floor或ceil,我可能会多次生成相同的坐标。我该怎么做?@user3488947在这种情况下,你可以使用Salix alba评论中提到的en.wikipedia.org/wiki/Bresenham's_line_算法。但是Bresenham的算法需要两点。是吗?@user3488947要得到第二点,你可以使用我的答案:只需使用适当的步长执行一步。