如何计算两个点,每个点在一条线上,与给定点距离相等?

时间:2016-09-03 14:29:40

标签: algorithm geometry

我有一套五点:a,b,c,d,e。我想计算下面三角形的角Q,R。棘手的部分是Q-e和R-e之间的距离必须相等。

enter image description here

我使用直线 L(x)= kx + m 的公式,如this cute webpage所示。第一交叉点P计算如下。

double k_ab = (b.Y - a.Y) / (b.X - a.X);
double m_ab = a.Y - k_ab * a.X;
double k_cd = (d.Y - c.Y) / (d.X - c.X);
double m_cd = c.Y - k_cd * c.X;

double p = (m_cd - m_ab) / (k_ab - k_cd);
Point P = new Point(p, k_ab * p + m_ab);

然后,我卡住了。由于我不知道点Q的精确x坐标,我必须将它用作变量。即使在纸上,我也会因为移动部件和子计算过多而导致脑部发生故障。我感觉我已经选择了一种糟糕而低效的方法解决问题,所以如果有人建议如何重新解决问题以使解决方案更加明显,我会很高兴。

2 个答案:

答案 0 :(得分:1)

以下是如何找到Q和R的x值:

f(x)成为包含ab的行的等式。

g(x)成为包含cd的行的等式。

然后f(Q_x) - e_y == e_y - g(R_x)Q_x - e_x == e_x - R_x

z = Q_x - e_x

要计算z,请求解f(e_x + z) - e_y = e_y - g(e_x - z),即

k_ab * (e.x + z - a.x) + a.y - e.y = e.y - c.y - k_cd * (e.x - z - c.x)

k_ab * (e.x + z - a.x) + k_cd * (e.x - z - c.x) = 2 * e.y - a.y - c.y

k_ab * (e.x - a.x) + k_cd * (e.x - c.x) + k_ab * z - k_cd * z = "

z * (k_ab - k_cd) = 2 * e.y - k_ab * (e.x - a.x) - k_cd * (e.x - c.x) - a.y - c.y

最后

z = (2 * e.y - k_ab * (e.x - a.x) - k_cd * (e.x - c.x) - a.y - c.y) / (k_ab - k_cd)

Q_x = e_x + zR_x = e_x - z。我相信你可以从这里找出其余部分。

Try it here

Example

答案 1 :(得分:1)

我不知道以下是否属实,但是如果有三角测量的人确认了它,它可能会有所帮助。我只是想帮助我掌握基本的三角知识。

您知道Pe。绘制包含这两个点的直线,并与其垂直交叉。此垂线将在两个点AB中穿过两条初始线。让我们使用距离(A,e)(e,B)

如果它们相等,则e位于QPR平分线中。 Q = AR = B

Picture1

这就是我不知道的。如果(A,e)x(e,B)倍,则角度PQR也会比xPRQ倍。在示例中,我将x设置为3.三角形为180º,如您所知QPR(这是问题的一部分),PQR将是(x / x+1) * (180º - QPR)并且PRQ = (1 / x+1) * (180º - QPR)

Picture2

了解这个角度,您知道跨越QeR的线条的渐变。让它通过e,你会知道QR这条线穿过另外两条线。