我正在尝试将下面的等式转换为编程代码。目的是找到两条线的交叉点。和pront
(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个diff变量。我将从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();
}
}
答案 0 :(得分: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;除非这些线是平行的,否则它们会在某处相交,但不一定在您开始使用的线段的端点之间。
答案 1 :(得分: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个diff变量。
没有。那是完全错误的。 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 ⌋
请注意,此结果与您的方程对的左侧完全相同。
答案 2 :(得分: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分解会更加通用。