需要帮助在Java中查找两个方程的交集

时间:2015-02-23 18:02:27

标签: java

我看到其他人发布了这个问题,但没有说得对,所以他没有得到任何帮助,所以我想我会尝试更直接。

以下是向我们提出的问题:

//在名为Intersect.java的文件中编写并提交您的代码。使用IO模块读取输入。使用System.out.println()打印您的答案。

编写一个程序来计算2个方程之间的交集:

度数-2(二次)多项式,即

y = dx ^ 2 + fx + g

其中d,f和g是常数

和1度(线性)等式,即

y = mx + b

其中m是斜率,b是常数

以上只是文本,而不是可能出现在Java程序中的代码。

询问用户每个等式中的常数值。输出交叉点作为有序对(x,y)或"无"如果不存在。以下是一个示例运行。

java Intersect

输入常数d: 五 输入常量f: -3 输入常数g: 2 输入常数m: 1 输入常数b: 3

交叉路口是: (1,4) (-0.20,2.8) //

主要问题本质上是要求我们编写一个代码,要求用户输入各个常数和两个方程的斜率,一个是二次多项式,另一个是点斜率的线性方程。

我知道我们必须在代码中使用二次方程式,但我不知道如何对其进行实际编码。

一旦我们让用户输入常数,在这种情况下5(d,f,g,m,b; m是斜率)我们需要让代码运行计算以将这些常量输入到上面的例子中(y = dx ^ 2 + fx + g | y = mx + b)并返回" none"如果没有交叉点,或者它确实相交,则它与它相交的有序对(x,y)。

我已经知道如果输入0作为常量它返回(NaN,NaN),我也知道需要将其重新写入None。

到目前为止,我只有以下内容:

public class Intersect {     public static void main(String [] args){

    System.out.println("Enter the constant d:");
    int d = IO.readInt();

    System.out.println("Enter the constant f:");
    int f = IO.readInt();

    System.out.println("Enter the constant g:");
    int g = IO.readInt();

    System.out.println("Enter the constant m:");
    int m = IO.readInt();

    System.out.println("Enter the constant b:");
    int b = IO.readInt();

如果有人能够对此有所了解,那就太棒了,谢谢!

EDIT1:

到目前为止,我已将代码更改为以下内容,但是,我仍然不知道如何让它返回给我一个答案:

public class Intersect {     public static void main(String [] args){

    System.out.println("Enter the constant d:");
    int d = IO.readInt();

    System.out.println("Enter the constant f:");
    int f = IO.readInt();

    System.out.println("Enter the constant g:");
    int g = IO.readInt();

    System.out.println("Enter the constant m:");
    int m = IO.readInt();

    System.out.println("Enter the constant b:");
    int b = IO.readInt();


    //y = dx^2 + fx + g
    //y = mx + b

    //mx + b = dx^2 + fx + g

    //x^2 * (d)  +   x * ( f - m )  +  ( g - b )

    int A = d;
    int B =  f - m;
    int C =  g - b;


    double x1 = - B + Math.sqrt(  B^2  -  4 * A * C ) / (2 * A);
    double x2 = - B - Math.sqrt(  B^2  -  4 * A * C ) / (2 * A);


    double y1 = m * x1 + b;
    double y2 = m * x1 + b; 

}

另外,eclipse告诉我x2,y1和y2根本没用过。 我知道我需要使用System.out.println()但是我不明白我可以把它放在那里以使答案成为有序对。此外,我尝试设置一个If语句让答案返回None而不是NaN但是它返回NaN None。

2 个答案:

答案 0 :(得分:0)

我猜......

//y = dx^2 + fx + g
//y = mx + b

//mx + b = dx^2 + fx + g

//x^2 * (d)  +   x * ( f - m )  +  ( g - b )

A = d
B =  f - m 
C =  g - b 


x1 = - B + sqr(  B^2  -  4 * A * C ) / (2 * A)
x2 = - B - sqr(  B^2  -  4 * A * C ) / (2 * A)


y1 = m * x1 + b
y2 = m * x1 + b

答案 1 :(得分:0)

您需要考虑很多特殊情况 我希望我能把它们弄好。

所以在初始化值之后你可以把它放在:

// calculating some useful values.
        double t = -(f - m) / (2.0 * d);
        double u = t * t - (g - b) / (double) d;

        // the first polynomial is linear, so both terms are.
        if (d == 0) {
            // both linear functions have the same slope.
            if (f == m) {
                // both functions are shifted the same amount along the y-Axis.
                if (g == b)
                    // the functions lie on top of each other.
                    System.out.println("There is an infinite amount intersections");
                // the functions are shifted different amounts along the y-Axis.
                else
                    // the lines are parallel.
                    System.out.println("There are no intersections");
            }
            // both linear functions have different slopes.
            else {
                // solve linear equation.
                double x = (b - g) / (double) (f - m);
                double y = m * x + b;
                System.out.println("The intersection is: (" + x + "," + y + ")");
            }
        }
        // the functions do not cross each other.
        else if (u < 0)
            System.out.println("There are no intersections");
        // the linear function is a tangent to the quadratic function.
        else if (u == 0) {
            // solve equation.
            double x = t;
            double y = m * x + b;
            System.out.println("The intersection is: (" + x + "," + y + ")");
        }
        // the linear function intersects the quadratic function at two points.
        else {
            // solve quadratic equation.
            double x1 = t + Math.sqrt(u);
            double x2 = t - Math.sqrt(u);
            double y1 = m * x1 + b;
            double y2 = m * x2 + b;
            System.out.println("The intersections are: (" + x1 + "," + y1 + ") (" + x2 + "," + y2 + ")");
        }