[英]Check if point is on line in Java Swing
我畫了一條線然后是一個點,然后我想檢查點是否在線上。 我在數組中采用了一個線坐標(因為有多個線)。 我想檢查最后一行的當前點嗎?
if (positionX1 == positionX2 && positionY1 == positionY2) {
float m = line.getSlope(
drawLines[currentLines - 1][2], drawLines[currentLines - 1][3],
drawLines[currentLines - 1][0], drawLines[currentLines - 1][1]);
m = Float.parseFloat(df.format(m));
float c = line.getIntercept(
drawLines[currentLines - 1][2], drawLines[currentLines - 1][3],
drawLines[currentLines - 1][0], drawLines[currentLines - 1][1]);
c = Math.round(c);
m1 = line.getSlope(positionX2, positionY2,
drawLines[currentLines - 1][0], drawLines[currentLines - 1][1]);
m1 = Float.parseFloat(df.format(m1));
System.out.println(m + " " + m1);
c1 = line.getIntercept(positionX2, positionY2,
drawLines[currentLines - 1][0], drawLines[currentLines - 1][1]);
c1 = Math.round(c1);
if (m == m1 && ((c == c1) || (c == c1 - 1) || (c == c1 + 1))) {
System.out.println("Point is on Line");
}
}
問題是當一個點靠近線的起點或一條線約為m1的垂直值時,c1的變化差別很大。 因此,檢測線上是否有點存在問題。 我該如何檢查這種情況?
如果點(xP,yP)在從(x1,y1)到(x2,y2)的線段上,則Line2D.ptSegDist(x1, y1, x2, y2, xP, yP)
返回0.0。 Line2D.ptLineDist
為無限線做同樣的事情。
就算法而言,一條線(除了具有x =常數之類的垂直的線之外)具有y = mx + b的形式。 如果你的觀點滿足那個等式,那么它就在線上。 因此,您只需要找到線的斜率值及其y軸截距,並檢查點的x和y值是否滿足每條線的方程。
編輯:
正如上面的注釋所指出的,你可以使用點斜率形式(斜率為(y2-y1)/(x2 / x1))而不是斜率截距形式。 這將為您提供一個方程式,該方程式僅取決於y,x以及更容易編碼的線的起點和終點(因為您通過其起點和終點定義線,至少在擺動中)。 我建議使用斜率截距形式的唯一原因是因為您已經嘗試在算法中使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.