【问题标题】:solving two linear equation in program [closed]在程序中求解两个线性方程
【发布时间】:2013-09-28 04:35:54
【问题描述】:

我有两条线 UV 和 PQ,分别是 U(15,10) V(50,25) 和 P(40,10) 和 Q(30,30)。

我正在寻找这两个点之间的交点。 我正在为此形成两个线性方程:

当量 1:

Ux + t(Vx-Ux) = Px +s(Qx-Px)

eq2

我想用 C 程序求解这些方程,得到 t 或 s 的值。

我使用了第二个等式中的t 并将其代入第一个等式中,得到了一个找到 s 的公式。但它没有成功。如何在程序中解决这个问题?

【问题讨论】:

  • “我想开车去上班,但没有成功。您有什么建议吗?”您究竟尝试了什么?你期望会发生什么?发生了什么?
  • [[ab][cd]][st] = [AB] --> [[d -b] [-ca]][AB]/det() = [st]跨度>

标签: c linear-algebra linear-equation


【解决方案1】:

使用这个等式Intersection of 2 Lines。您可以使用长扩展形式,也可以抽象出一个计算 2x2 行列式的函数。小心使用整数,你可能会溢出。

【讨论】:

  • 这是无限长的行。但我想找到两条线段的交点。
  • 然后检查交点的 x 和 y 是否在线段的 x 和 y 之间。
【解决方案2】:
int s,sa,sb;

好的,sa 是一个整数。

sa=1/((Vx-Ux)*(Qy-Py)-(Qx-Px)*(Vy-Uy));

由于这些都是整数,因此您将使用整数数学计算整数的倒数。如果整数为零,则结果为无穷大,如果为一,则为负一,如果为负一,则结果为无穷大,否则为零。所以sa 只有三个可能的值,否则你会崩溃。

也许您应该考虑不使用整数数学?也许是float sa;sa = 1.0 / (...

【讨论】:

  • 我总是把 Sa 设为零。
  • @Rdvsm 现在说得通了,不是吗。
  • 那怎么解决呢?
  • 看我最后一段。不要使用整数数学。使用floats 和浮点常量。
【解决方案3】:

求UV和PQ的梯度

UV的梯度是:m = (Vy-Uy)/(Vx-Ux)。然后使用y = mx + c 找到c,因为我们知道y、m、x 的值。为 PQ 再次执行该步骤。

当你有两个方程后,你可以通过代入找到交点。最后,将其应用到您的 c 代码中。

【讨论】:

  • 我不想使用 mx+c ,你能提出解决上述问题的方法吗?
  • 上述公式对吗?
【解决方案4】:

OP 的评论说“找到两条线段的交点”。

由于 OP 提供了伪代码,我假设需要类似 C 的伪代码。

  1. 将每一行更改为参数化形式 P(t) = b + m*t(使用double
    UV_m.x = V.x - U.x
    UV_m.y = V.y - U.y
    UV_b.x = U.x
    UV_b.y = U.y
    // same for PQ
    // Now your have 2 2-dimensional equations.
    // Puv(t1) = UV_b + UV_m * t1 and
    // Ppq(t2) = PQ_b + PQ_m * t2

  2. 假设Puv(t1) == Ppq(t2) 对于某些t1,t2(即它们不平行)。
    UV_b.x + UV_m.y * t1 = PQ_b.x + PQ_m.x * t2
    UV_b.y + UV_m.y * t1 = PQ_b.y + PQ_m.y * t2

  3. 求解二维矩阵方程(我假设OP可以求解二维矩阵,否则建议)如果确定为0.0,则线是平行的,将其作为特殊情况处理。 (它们可能是共同不雅的,可能/可能不会重叠。)

    [UV_m.x - PQ_m.x][t1] = [PQ_b.x - UV_b.x]
    [UV_m.y - PQ_m.y][t2] = [PQ_b.y - UV_b.y]

  4. 此时,如果t1t2 0.0 <= t <= 1.0 范围内,则这些段相交! Puv(t1) = UV_b + UV_m * t1发现找到交点很简单。

这个方法可以很好地处理垂直线。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多