6

我正在尝试将下面的等式转换为编程代码。目的是找到两条线的交点。并提示

(y1 - y2)x - (x1 - x2)y = (y1 - y2)x1 - (x1 - x2)y1

(y3 - y4)x - (x3 - x4)y = (y3 - y4)x3 - (x3 - x4)y3

我被告知要使用 cramers 规则,但 cramers 规则有 6 个差异变量。我将从 4 个不同的点作为 8 个变量(x1、y1、x2、y2、x3、y3、x4、y4)开始

我正在使用 Java。任何帮助,将不胜感激。这个网站上的所有问题都是针对不同类型的线性方程,代码很复杂,我没有找到任何与我相关的东西。

这就是我所拥有的,不多,但从上面的方程到可编程的东西的转变真的让我很难过。

import java.util.Scanner;
public class E325 {
    public static void main(String[] args) {
    /* 
     * The purpose of this program is to find the intersect
     * of two lines given by the user by four points
     * 
     * Get the four points. x1,y1 x2,y2 x3,y3 x4,y4
     */
    Scanner input = new Scanner(System.in);
    System.out.print("Enter x1 y1, x2 y2, x3 y3, x4 y4: ");
    double x1 = input.nextDouble();
    double y1 = input.nextDouble();
    double x2 = input.nextDouble();
    double y2 = input.nextDouble();
    double x3 = input.nextDouble();
    double y3 = input.nextDouble();
    double x4 = input.nextDouble();
    double y4 = input.nextDouble();

    }
}
4

3 回答 3

4

我不知道矩阵,所以我会以不同的方式解决它。

您知道足以计算每行的 m 和 b

m = (y2-y1)/(x2-x1)

b = y1 - m(x1)

计算一条线的 m 和 b,计算另一条线的 m' 和 b'。

现在在交叉点处,两条线上的 x,y 相同,因此 y = mx + b 和 y = m'x + b'。所以

mx + b = m'x + b'

x = (m'x + b' - b)/m

将 x 代入 mx + b 以获得该 x 的 y。

您仍然必须确保您找到的 x,y 在您的行 SEGMENTS 上;除非这些线是平行的,否则它们会在某个地方相交,但不一定在您开始的线段的端点之间。

于 2012-09-27T04:02:22.280 回答
1

(y1 - y2)x - (x1 - x2)y = (y1 - y2)x1 - (x1 - x2)y1
(y3 - y4)x - (x3 - x4)y = (y3 - y4)x3 - (x3 - x4)y3

我被告知要使用 cramers 规则,但 cramers 规则有 6 个差异变量。

不,那是完全错误的。Cramer 规则是一种求解 Ax = b 形式方程的简单技术,但其中 A 是 NxN 矩阵,x 和 b 是 N 个向量。您需要做的是将这两个方程表示为矩阵表达式。我会给你与上面对应的左侧。我将把右边和克莱默规则的应用留给你。

        A            *   x    = b

⌈ y1-y2   -(x1-x2) ⌉   ⌈ x ⌉
|                  | * |   |
⌊ y3-y4   -(x3-x4) ⌋   ⌊ y ⌋

将该矩阵 A 与向量 [x,y] 相乘得到

⌈ y1-y2   -(x1-x2) ⌉   ⌈ x ⌉   ⌈ (y1-y2)*x - (x1-x2)*y ⌉
|                  | * |   | = |                       |
⌊ y3-y4   -(x3-x4) ⌋   ⌊ y ⌋   ⌊ (y3-y4)*x - (x3-x4)*y ⌋

请注意,此结果与您的方程式对的左侧完全相同。

于 2012-10-13T14:11:47.760 回答
0

一条线经过两点。

你有四个点和两条线。

众所周知,直线方程:

y = m*x + b

其中m是斜率,b是 y 截距。

如果你有两行,它们看起来像这样:

-m1*x + y = b1
-m2*x + y = b2

你可以看到矩阵方程,不是吗?

[ -m1    1 ]{x} = {b1} 
[ -m2    1 ]{y}   {b2}

将其反转以求解两条线相交的 (x, y)。如果您不能反转矩阵,则意味着它们不相交。

克莱默法则?当然,写一个 2x2 的案例很容易。LU 分解会更一般。

于 2012-09-27T00:57:46.040 回答