2015-07-19 110 views
3

在Java中,我有一個類Line,它有兩個變量:mb,使得該行遵循公式mx + b。我有兩條這樣的路線。我如何找到兩條線的交點座標爲xy? (假設斜率不同)Java查找兩條線的交點

這裏是class Line

import java.awt.Graphics; 
import java.awt.Point; 

public final class Line { 
    public final double m, b; 

    public Line(double m, double b) { 
     this.m = m; 
     this.b = b; 
    } 

    public Point intersect(Line line) { 
     double x = (this.b - line.b)/(this.m - line.m); 
     double y = this.m * x + this.b; 
     return new Point((int) x, (int) y); 
    } 

    public void paint(Graphics g, int startx, int endx, int width, int height) { 
     startx -= width/2; 
     endx -= width/2; 
     int starty = this.get(startx); 
     int endy = this.get(endx); 
     Point points = Format.format(new Point(startx, starty), width, height); 
     Point pointe = Format.format(new Point(endx, endy), width, height); 
     g.drawLine(points.x, points.y, pointe.x, pointe.y); 
    } 

    public int get(int x) { 
     return (int) (this.m * x + this.b); 
    } 

    public double get(double x) { 
     return this.m * x + this.b; 
    } 
} 
+1

你已經得到了代碼:它不工作?另外,如果您試圖解決這些問題,請考慮用2 y = mx + b行的筆和紙做什麼。等於並求解x爲x定義一個通用解,然後使用任一線方程求解y。將公式轉換爲代碼 –

+0

您是否無法計算出公式?這是[math.se]。或者,您是否難以將您已知的公式轉換爲代碼?這不應該太難,而且已經完成了。 – Teepeemm

回答

7

讓我們假設你有這兩個功能:

y = m1*x + b1  
y = m2*x + b2 

要找到x-axis的交匯點上,我們做的事:

m1*x+b1 = m2*x+b2  
m1*x-m2*x = b2 - b2  
x(m1-m2) = (b2-b1)  
x = (b2-b1)/(m1-m2) 

要找到y,可以使用函數exp並將x替換爲其值(b2-b1)/(m1-m2)

所以:

y = m1 * [(b2-b1)/(m1-m2)] + b1 

你有(this.b - line.b),改變(line.b - this.b)

public Point intersect(Line line) { 
    double x = (line.b - this.b)/(this.m - line.m); 
    double y = this.m * x + this.b; 

    return new Point((int) x, (int) y); 
} 
+0

完美!我認爲這只是一個小錯誤,因爲我的數字很小。非常感謝! – HyperNeutrino

+2

請注意,此解決方案不適用於垂直線和平行線。在'm-line.m = 0'的情況下,它是未定義的。 –