1

特定の点が線上にあるかどうかを調べようとしています。私が試したのは. 線の傾きを見つけます。次に、線の初期座標 x1 と y1 で点の傾きを見つけます。両方の勾配が等しい場合、点は線上にあります。しかし、double または float を使用しているため、小数点以下 5 桁の値が得られ、勾配が等しくなることはありません。コードは次のとおりです。

line.slope == (yTouch-line.yTouch1)/(xTouch-line.xTouch1)

こんにちは、コメントを追加できません。エラー デルタとは何か教えてください。

4

2 に答える 2

0

幾何学用語を使ってみましょう。点が (x1, y1) と (x2, y2) で、点 2 から n 単位離れた点 (x3, y3) を見つけたい場合:

d = sqrt((x2-x1)^2 + (y2 - y1)^2) #distance
r = n / d #segment ratio

x3 = r * x2 + (1 - r) * x1 #find point that divides the segment
y3 = r * y2 + (1 - r) * y1 #into the ratio (1-r):r

リンクはこちら!ここに解決策があります

public static void checkForLineInaPoint(Double x1, Double y1, Double x2, Double y2)
{
    Double m = getSlope(x1,y1,x2,y2);
    Double c = getConstant(x1,y1,x2,y2,m);
    Double x3= new Double(10.001);
    Double y3= new Double(10.001);
    if(checkPointLiesonLine(x3,y3,m,c))
        System.out.print("Yes");
    else
        System.out.print("No");
}

private static boolean checkPointLiesonLine(Double x3, Double y3, Double m, Double c)
{
    Double temp = m*x3+c;
    return temp.compareTo(y3)==0;
}

private static Double getConstant(Double x1, Double y1, Double x2, Double y2, Double m)
{       
    return y1-m*x1;
}

private static Double getSlope(Double x1, Double y1, Double x2, Double y2)
{
    return (y2-y1)/(x2-x1);
}
于 2013-08-05T14:01:47.357 に答える