【问题标题】:How do I construct a point from x,y, line and angle?如何从 x、y、直线和角度构造一个点?
【发布时间】:2021-07-20 19:35:43
【问题描述】:

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

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

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

编辑:我只是想快速回顾一下我的问题:我应该如何构造一个与线段成一定角度的点。我已经制作了相对于 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

【问题讨论】:

    标签: python geometry angle


    【解决方案1】:

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

    lineAngle = math.atan2(y2 - y1, x2  - x1)
    

    结果是弧度,所以应用它

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

    【讨论】:

    • 非常感谢互联网上的好心人!这正是我想要的!我确实知道发生了什么,所以我能够(某种程度上)形成我的问题,但我不知道我真正在寻找什么。我想过取线的角度,但我没有完全做到,我放弃了这个想法。再次,非常感谢。通过我的研究,我发现有很多像我这样的人不希望他们的函数只针对轴工作,所以如果你愿意,你也可以发布一些答案给他们,或者,当然, 我能做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 2017-01-23
    • 2013-02-27
    • 2022-07-29
    • 2016-02-06
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多