如何从 x、y、线和角度构建点?

How do I construct a point from x,y, line and angle?

我正在 python 中制作一个几何界面(目前使用 tkinter),但我偶然发现了一个主要问题:我需要一个能够 return 一个点的函数,即在一定的角与一定的线段,是该角的顶点相距一定长度。我们知道线段各点的坐标,以及我们希望该点所在的角度。我在下面附上了一张图片,以便更直观地了解我的问题。 问题:我可以用三角函数计算它,其中

    x, y = vertex.getCoords()
    endx = x + length * cos(radians(angle))
    endy = y + length * sin(radians(angle))
    p = Point(endx, endy)

我输入的角度是度数。只有当线段平行于横坐标时,该计算才成立。但至少可以说,我得到的角度大小非常奇怪。我希望该函数在前两个点位于 tkinter canvas 上的任何位置工作,无论角度如何。我对应该如何修复它感到非常迷茫。我发现了什么:我得到一个点作为输出,当它连接到顶点时,会形成一条与横坐标成所需角度的线。因此,当角度的第一条臂(腿、肩)与横坐标平行时,它会起作用,然后函数运行完美(由于交叉角)——Z 形。一旦我让它不平行,它就会变得很奇怪。这是因为我们取的是顶点的 y 轴,而不是垂直脚落脚的位置(附图上的 C1)。我数学还不错,欢迎大家post一些技术性的解答,我会理解的

编辑:我只是想快速回顾一下我的问题:我应该如何构造一个与线段成一定角度的点。我已经制作了相对于 X 轴和 Y 轴创建角度的函数,但我不知道如何根据输入的线制作它。这两个函数的一些代码:

def inRespectToXAxis(vertex, angle, length):
    x, y = vertex.getCoords()
    newx = x + length * cos(radians(angle))
    newy = y + length * sin(radians(angle))
    p = Point(abs(newx), abs(newy))
    return p

def inRespectToYAxis(vertex, length, angle):
    x, y = vertex.getCoords()
    theta_rad = pi / 2 - radians(angle)
    newx = x + length * cos(radians(angle))
    newy = y + length * sin(radians(angle))
    p = Point(newx, newy)
    return p

您似乎想添加线段角度以获得正确的结果。您可以使用线段末端坐标 (x1,y1)(x2,y2)

来计算它
lineAngle = math.atan2(y2 - y1, x2  - x1)

结果以弧度为单位,因此将其应用为

endx = x1 + length * cos(radians(angle) + lineAngle) etc