簡體   English   中英

在Android / Java中求解兩個方程式的系統

[英]Solve system of two equations in Android / java

我有兩個方程式(直線公式的距離和斜率)

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);

似乎是由於斜率始終是整數引起的,因此當它小於1時為0,這不好。

請查看下面的代數:

限定

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

您要查找的“庫”稱為數學:)

您可以詢問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 + the + reals (不要問我為什么知道x2和y2是相互干擾的)

可以手動執行此類操作,但請務必小心,不要掉落跡象。 即使這些東西是在學校教的,他們也很少尊重細節。 請注意,在這種情況下,有兩種可能的解決方案,您需要確保在所有情況下d> 0!

第一個解決方案第二解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM