Math 找到一个垂直于给定直线的点

Math 找到一个垂直于给定直线的点,math,equation,cartesian,Math,Equation,Cartesian,我想找到一个垂直于给定直线的点z(x3,y3)。在我的例子中,我得到了两个坐标A(x1,y1)和B(x2,y2)。我想找到点z,它垂直于AB线,距离B点,ABZ角是90。 这是我的C++代码。 double AB_slope=m;//了解它 //找到垂直于AB线的z点 双AZ_坡度=-1/m double x3=x2+规定的_距离*dx double y3=y2+规定的_距离*dy 但我不知道如何找到dx,dy和指定的距离。请帮帮我。让我把你的问题改成我想的,然后回答 你的分数是A=(x1,y1

我想找到一个垂直于给定直线的点z(x3,y3)。在我的例子中,我得到了两个坐标A(x1,y1)和B(x2,y2)。我想找到点z,它垂直于AB线,距离B点,ABZ角是90。 这是我的C++代码。
double AB_slope=m;//了解它

//找到垂直于AB线的z点

双AZ_坡度=-1/m

double x3=x2+规定的_距离*dx

double y3=y2+规定的_距离*dy


但我不知道如何找到dx,dy和指定的距离。请帮帮我。

让我把你的问题改成我想的,然后回答

你的分数是
A=(x1,y1)
B=(x2,y2)
。您希望找到一个点
Z=(x3,y3)
,使得
AZ
垂直于
AB
,并且
BZ
具有长度
h

A
B
的向量是
v=(x2-x1,y2-y1)
。一个易于计算的垂直向量是
w=(y2-y1,x1-x2)
。垂直于
AB
的穿过
A
的线表示为
F(s)=A+s*w=(x1+s*(y2-y1),y1+s*(x1-x2))
as
s
在实数范围内。因此,我们需要选择一个值
s
,使
F(s)
远离
B

根据毕达哥拉斯定理,从
F(s)
B
的长度的平方总是从
F(s)
A
的距离的平方,加上从
A
B
的距离的平方。从中我们得到了我们想要的混乱表达式:

h**2 = s**2 * ((y2 - y1)**2 + (x1-x2)**2) + ((x1 - x2)**2 + (y1 - y2)**2))
     = s**2 * ((x1 - x2)**2 + (y1 - y2)**2)) + ((x1 - x2)**2 + (y1 - y2)**2))
     = (s**2 + 1) * ((x1 - x2)**2 + (y1 - y2)**2))

(s**2 + 1) = h**2 / ((x1 - x2)**2 + (y1 - y2)**2))

s**2  = h**2 / ((x1 - x2)**2 + (y1 - y2)**2)) - 1

s = sqrt(h**2 / ((x1 - x2)**2 + (y1 - y2)**2)) - 1)

现在把
s
的表达式插回到
F(s)=(x1+s*(y2-y1),y1+s*(x1-x2))
中,你就得到了你的观点
Z
。另一个可能的答案是另一边的距离相同。

点不能垂直于线。这是一个数学问题,问它问题的条件是否包括
h
值,或者你只想找到穿过
a
并与
AB
正交的线的任何点?@devan,如果你需要帮助,你需要参与,并解释更多你想要的。有无限多的点距离B(假设现实的h>AB)事实上,所有这些点的集合描述了一个以a为中心的圆。@Lance Roberts在三维空间中,这些点的集合将描述一个圆。在4维空间中,它将形成一个球体。但是给出的代码是针对二维的,然后你会得到2分。我给出的技巧可以找到这些点。好的,在2D中肯定是+1。(虽然我们可能永远不知道OP真正想要什么)。@B请你澄清一下这个答案中
**
的含义好吗?e、 g.
h**2
@Styne666它表示幂运算。在许多C派生的编程语言(例如C、C++、java、perl、Ruby、…)中,意味着XOR,所以使用**代替幂运算。