线性方程 Java

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

我被告知要使用克莱姆法则,但克莱姆法则有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();

    }
}

我不知道你从哪里得到的Cramer法则适用或有“6个不同变量”的想法。而且这些点要么是已知的,所以它们不是变量,要么你需要最小二乘拟合。你的信息从头到尾都是错误的。 - duffymo
很难想象一个不太友好的用户界面。也许输入四对坐标。 - stark
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位于您的线段上;除非线平行,否则它们将在某个地方相交,但不一定在您开始的线段端点之间。


1
x - y = x1 - y1 x - y = x3 - y3
你需要做的不是使用Cramer法则,而是将这两个方程式转化成矩阵表达式。Cramer法则是解决Ax = b形式的方程的简单技术,其中A是一个NxN矩阵,x和b是N向量。我会给你左侧对应于以上的矩阵表达式,右侧和应用Cramer法则留给你自己去完成。
        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 ⌋

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

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分解则更为一般化。


LU分解是一种非常强大的技术,但提问者正在询问一个高中或大一水平的问题。他还没有学习过矩阵分解,可能至少还需要几年才会学到。 - David Hammen
我们都无法从问题中推断出OP的年龄。有些年长的人并不懂数学或线性代数。我宁愿提供正确的信息,因为这关乎到所有阅读答案的人,而不仅仅是OP。 - duffymo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接