【问题标题】:Solve system of two equations in Android / java在Android / java中求解两个方程组
【发布时间】:2012-03-22 17:45:43
【问题描述】:

我有两个方程(直线公式的距离和斜率)

d = sqrt( (x2 - x1)^2 + (y2 - y1)^2 )
m = (y2 - y1) / (x2 - x1)

已知:d、m、x1、y1
未知:x2,y2

问题是距离方程不是线性的......

有没有办法在java中编码(使用Android兼容库)来解决?我试着做简单的猜测,但它太慢了。

谢谢

编辑:三角形代码

        Point p1 = new Point();
        Point p2 = new Point();
        projection.toPixels(gp1, p1);
        projection.toPixels(gp2, p2);

        Point p3 = new Point();
        double slope = (p2.y - p1.y) / (p2.x - p1.x);
        double x = 0;
        if (p2.y - p1.y >= 0 && p2.x - p1.x >= 0) {
            x = - Math.sqrt(600 / (1 + slope*slope)) + p2.x;
        } else if (p2.y - p1.y >= 0 && p2.x - p1.x < 0) {
            x = Math.sqrt(600 / (1 + slope*slope)) + p2.x;
        } else if (p2.y - p1.y < 0 && p2.x - p1.x >= 0) {
            x = - Math.sqrt(600 / (1 + slope*slope)) + p2.x;
        } else if (p2.y - p1.y < 0 && p2.x - p1.x < 0) {
            x = Math.sqrt(600 / (1 + slope*slope)) + p2.x;
        }
        double y = -slope*p2.x + slope*x + p2.y;

        p3.set((int) x, (int) y);

        double inverseSlope = 0;
        if (slope == 0) {
            inverseSlope = Double.MAX_VALUE;
        } else {
            inverseSlope = -1 / slope;
        }

        x = -Math.sqrt(300 / (1 + inverseSlope*inverseSlope)) + p3.x;
        y = -Math.sqrt(300 / (1 + inverseSlope*inverseSlope))*inverseSlope + p3.y;

        Point p4 = new Point();
        p4.set((int) x, (int) y);

        x = Math.sqrt(300 / (1 + inverseSlope*inverseSlope)) + p3.x;
        y = Math.sqrt(300 / (1 + inverseSlope*inverseSlope))*inverseSlope + p3.y;
        Point p5 = new Point();
        p5.set((int)x, (int) y);
        Path path = new Path();
        path.moveTo(p2.x, p2.y);
        path.lineTo(p4.x, p4.y);
        path.moveTo(p4.x, p4.y);
        path.lineTo(p5.x, p5.y);
        path.moveTo(p5.x, p5.y);
        path.lineTo(p2.x, p2.y);
        path.moveTo(p2.x, p2.y);
        canvas.drawPath(path, mPaint);

看起来它是由斜率引起的,它总是一个整数,所以当它

【问题讨论】:

  • 你的括号不匹配,你的意思是:sqrt((x2 - x1)^2 + (y2 - y1)^2) * m = (y2-y1)/(x2 -x1 )
  • 请不要在接受答案后更改您的问题,下次重新开始一个新问题...
  • 好的,所以这里有一些代码可以满足您的实际需求:studio.sketchpad.cc/WjZ7UqIq4F 当您处理空间中的方向时,使用坡度通常是个坏主意,因为您必须处理所有角落大多数情况下(无限和零)明确。用向量来思考——即点、角度和距离——而不是。它将简化您在纸上的方程式生成的代码。如果您查看我的代码,您会发现它除了勾股定理和鼻窦的基本定义之外没有使用任何东西。最后的想法:命名你的变量!
  • 非常感谢 - 很高兴知道。

标签: java android


【解决方案1】:

请复习下面的代数:

定义

x = x2-x1

y = y2-y1

然后

m * x = y

d^2 = x^2 + m^2 * x^2 = (1 + m^2) * x^2

因此

x = sqrt(d^2 / (1 + m^2))

然后

x2 - x1 = sqrt(d^2 / (1 + m^2))

所以

x2 = sqrt(d^2 / (1 + m^2) + x1

同样

y = sqrt(d^2 / (1 + m^2)) * m

y2 = sqrt(d^2 / (1 + m^2)) * m + y1

所以答案是:

x2 = sqrt(d^2 / (1 + m^2)) + x1

y2 = sqrt(d^2 / (1 + m^2)) * m + y1

【讨论】:

    【解决方案2】:

    您正在寻找的“图书馆”称为数学 :)

    你可以问 wolfram alpha: http://www.wolframalpha.com/input/?i=solve+d+%3D+sqrt%28+%28x2+-+x1%29%5E2+%2B+%28y2+-+y1%29%5E2+%29%2C+m+%3D+%28y2+-+y1%29+%2F+%28x2+-+x1%29+over+the+reals (不要问我为什么它知道 x2 和 y2 很有趣)

    可以手动做这些事情,但要非常小心不要丢下标志。即使这些东西是在学校教的,他们也很少尊重细节。请注意,在这种情况下,有两种可能的解决方案,您需要确保 d > 0 在所有情况下!

    【讨论】:

    • 所以基本上我使用这些公式来绘制一个三角形:我已经编辑了我的问题以显示我用来绘制它的代码。它画得很好,除非线的斜率小于一定量,否则三角形不会被绘制。任何想法为什么没有绘制三角形?
    • 好吧,代码还有更多问题。试试这个交互式版本,看看我的意思:studio.sketchpad.cc/WjZ7UqIq4F。问题是,如果 x 坐标对齐,则斜率定义不明确,因为您基本上除以零。 (我会在几秒钟内发布一些建设性的东西)
    • 很抱歉没有发布新问题 - 我注意到并修复了它,但斜率为 0,而实际上斜率为 0.9,我猜是因为精度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    相关资源
    最近更新 更多