[英]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.