查找高度与基准面相交的点(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度角,从一个顶点的高度与底面相交的点找到直线,然后使用该直线的直角三角形的边来找到坐标。