Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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
查找高度与基准面相交的点(Python)_Python_Geometry - Fatal编程技术网

查找高度与基准面相交的点(Python)

查找高度与基准面相交的点(Python),python,geometry,Python,Geometry,仅给定锐角三角形顶点的坐标,如何高效快速地找到特定顶点的高度与相对底面相交的点的坐标 仅使用数学、numpy或scipy的解决方案将非常有用。考虑顶点位于点A、B和C的三角形,您希望找到从顶点C延伸的高度与直线AB相交的位置 首先,你可以确定AB线的方程,有A点和B点,Ay;和Bx,由。假设你可以通过Ay/Bx Ax计算斜率 现在直线的格式是Y=MX+B,其中M是刚刚计算的斜率,B是Y截距,所以:Y_截距_AB=Ay-斜率_AB*Ax。所以AB的方程是Y=slope_AB*X+Y_interce

仅给定锐角三角形顶点的坐标,如何高效快速地找到特定顶点的高度与相对底面相交的点的坐标


仅使用数学、numpy或scipy的解决方案将非常有用。

考虑顶点位于点A、B和C的三角形,您希望找到从顶点C延伸的高度与直线AB相交的位置

首先,你可以确定AB线的方程,有A点和B点,Ay;和Bx,由。假设你可以通过Ay/Bx Ax计算斜率

现在直线的格式是Y=MX+B,其中M是刚刚计算的斜率,B是Y截距,所以:Y_截距_AB=Ay-斜率_AB*Ax。所以AB的方程是Y=slope_AB*X+Y_intercept_AB

好,现在,从C到它与AB线相交处的高度的斜率,我们称之为点D,高度线CD是AB斜率的负倒数;所以斜率CD=-1/斜率AB

现在,假设CD线上有一个点C和它的斜率,你可以得到CD的方程,方法和AB相同。首先,找到它的Y-截距:Y-截距\ U CD=Cy-斜率\ U CD*Cx

所以CD的方程是Y=slope\u CD*X+Y\u intercept\u CD

现在你们有AB线和CD线的方程:

Y = slope_AB * X + Y_intercept_AB
Y = slope_CD * X + Y_intercept_CD
你的问题简化为找到这些线的相交点,也就是点D

根据上述方程式,由于右侧和右侧都等于Y,我们可以将它们设置为彼此相等:

slope_AB * X + Y_intercept_AB = slope_CD * X + Y_intercept_CD
现在只需要解决X的问题

这将给出ddx的X值。对于Y值,使用任一直线方程。让我们使用AB的一个:

Dy = slope_AB * Dx + Y_intercept_AB
把它们放在一起,假设一个三角形a=-4,2,B=0,6,C=6,-4:

印刷品:

AB: slope: 1.0, intercept: 6.0
CD: slope: -1.0, intercept: 2.0
Intersection at (-2.0, 4.0)

还有一件事:这将被零除,当A点和B点的X值相同时失败,因为它被Ax Bx除,Ax Bx将为零;但这只是一个开始。

需要的点是顶点的正交投影,比如说顶点C到包含相反边的直线上,比如说AB

要找到投影点,请获取AB和AC的向量

 AB = (B - A)    //in coordinates ab.x = b.x-a.x, ab.y = b.y-a.y
 AC = (C - A)
t =(AB * AC) / (AB * AB) 
t =((b.x-a.x)*(c.x-a.x) + (b.y-a.y)*(c.y-a.y)) / ((b.x-a.x)*(b.x-a.x) + (b.y-a.y)*(b.y-a.y))
用AB和AC的标量积求参数

 AB = (B - A)    //in coordinates ab.x = b.x-a.x, ab.y = b.y-a.y
 AC = (C - A)
t =(AB * AC) / (AB * AB) 
t =((b.x-a.x)*(c.x-a.x) + (b.y-a.y)*(c.y-a.y)) / ((b.x-a.x)*(b.x-a.x) + (b.y-a.y)*(b.y-a.y))
投影点坐标

 P = A + AB * t
 p.x = a.x + (b.x-a.x) * t
 p.y = a.y + (b.y-a.y) * t
就这些

def orthoProjection(ax, ay, bx, by, cx, cy):
    abx = bx - ax
    aby = by - ay
    acx = cx - ax
    acy = cy - ay
    t = (abx * acx + aby * acy) / (abx * abx + aby * aby)
    px = ax + t * abx
    py = ay + t * aby
    return px, py

print(orthoProjection(0, 0, 4, 4, -1, 5))
>>(2.0, 2.0)

到目前为止你尝试了什么?你的尝试有什么问题?我已经计算了高度的长度,但是我很难得到它与基地相交的点的坐标。我想知道是否有一种算法可以找到这些坐标。我试图为任何三角形创建一个通用的解决方案。我想我可以使用高度的长度和90度角,从一个顶点的高度与底面相交的点找到直线,然后使用该直线的直角三角形的边来找到坐标。