用坐标和角度绘制一条线

时间:2015-02-09 19:21:47

标签: python matplotlib plot

我基本上想要从坐标(x,y)绘制一条具有给定角度的线(计算切线值)。

使用像pl.plot([x1, x2], [y1, y2], 'k-', lw=1)这样的简单代码,我可以绘制两点之间的直线,但为此,我需要计算(x2,y2)坐标。我的(x1,y1)坐标是固定的,角度是已知的。计算(x2,y2)会在某个时刻出现问题所以我只想用(x1,y1)绘制一条角度(最好是长度)。

我提出的最简单的解决方案是使用y - y1 = m(x - X1)的点斜率函数。解释这些并搜索一下我使用了这段代码:

x1 = 10
y1 = -50
angle = 30

sl = tan(radians(angle))
x = np.array(range(-10,10))
y = sl*(x-x1) + y1

pl.plot(x,y)
pl.show

sl在这里是斜率,x1和y1是坐标。我需要解释自己,因为这被认为是一个糟糕的问题。

现在,关于我如何做/解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:4)

我不确定你想从解释中得到什么,但我认为这会做一些接近你所要求的事情。

如果您知道要使用的线的角度和长度,则应使用三角法来获取新点。

import numpy as np
import math
import matplotlib.pyplot as plt


def plot_point(point, angle, length):
     '''
     point - Tuple (x, y)
     angle - Angle you want your end point at in degrees.
     length - Length of the line you want to plot.

     Will plot the line on a 10 x 10 plot.
     '''

     # unpack the first point
     x, y = point

     # find the end point
     endy = length * math.sin(math.radians(angle))
     endx = length * math.cos(math.radians(angle))

     # plot the points
     fig = plt.figure()
     ax = plt.subplot(111)
     ax.set_ylim([0, 10])   # set the bounds to be 10, 10
     ax.set_xlim([0, 10])
     ax.plot([x, endx], [y, endy])

     fig.show()

答案 1 :(得分:1)

复数的标准模块,cmath,使它变得容易。

   import cmath

   pt = cmath.rect(r, angle)  
   x = pt.real  
   y = pt.imag

给定线的长度(或半径)、r 和以弧度为单位的角度,我们可以得到从原点开始的线的终点 x 和 y 坐标 (x, y) (0, 0).

  • 不从原点开始:如果线从任何其他点 (x1, y1) 开始,只需添加即可得到 (x2, y2) 作为 x2 = x1 + x 和 y2 = y1 + y

  • 度到弧度:如果角度以度为单位可用,则使用 math.radians(deg) 以获得相同的弧度。当然,使用前记得导入数学。

cmath.rect(r, phi) 是您将调用的函数。它返回一个复数!只需将其实部和虚部作为您需要的 x 和 y 值。