Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将点捕捉到直线_Java_Line_Point - Fatal编程技术网

Java 将点捕捉到直线

Java 将点捕捉到直线,java,line,point,Java,Line,Point,我有两个GPS坐标,它们连接在一起形成一条线。我也有一个GPS点,它靠近线路,但从来都不在线路上。我的问题是,我如何找到最近的点在直线上到给定的点?< P>,它是C++的,但它应该易于移植。(希望他不介意我转载): public static Point2D nearestpoint online(双ax、双ay、双bx、双by、双px、双py、, 布尔型clampToSegment,Point2D dest){ //谢谢你! // https://stackoverflow.com/quest

我有两个GPS坐标,它们连接在一起形成一条线。我也有一个GPS点,它靠近线路,但从来都不在线路上。我的问题是,我如何找到最近的点在直线上到给定的点?

< P>,它是C++的,但它应该易于移植。(希望他不介意我转载):

public static Point2D nearestpoint online(双ax、双ay、双bx、双by、双px、双py、,
布尔型clampToSegment,Point2D dest){
//谢谢你!
// https://stackoverflow.com/questions/1459368/snap-point-to-a-line-java
如果(dest==null){
dest=新点2d.Double();
}
双apx=px-ax;
双apy=py-ay;
双abx=bx-ax;
双aby=Y-Y;
双ab2=abx*abx+aby*aby;
双ap_ab=apx*abx+apy*aby;
双t=ap_ab/ab2;
if(夹紧段){
if(t<0){
t=0;
}否则如果(t>1){
t=1;
}
}
目的地设置位置(ax+abx*t,ay+aby*t);
返回目的地;
}
试试这个:

ratio = (((x1-x0)^2+(y1-y0)^2)*((x2-x1)^2 + (y2-y1)^2) - ((x2-x1)(y1-y0) - (x1-x0)(y2-y1))^2)^0.5
        -----------------------------------------------------------------------------------------
                                            ((x2-x1)^2 + (y2-y1)^2)

xc = x1 + (x2-x1)*ratio;
yc = y1 + (y2-y1)*ratio;

Where:
    x1,y1 = point#1 on the line
    x2,y2 = point#2 on the line
    x0,y0 = Another point near the line
    xc,yx = The nearest point of x0,y0 on the line
    ratio = is the ratio of distance of x1,y1 to xc,yc and distance of x1,y1 to x2,y2
    ^2    = square
    ^0.5  = square root
这个公式是在我们找到从点x0,y0到直线(x1,y1->x2,y3)的距离后推导出来的。 看

我已经在这里测试了这段代码(我在上面给你的这段代码),但几年前我就用过类似的方法,所以你可以试试。

你可以用它

  • 创建一个(您的行)
  • 创建(要捕捉到直线的点)
  • 使用该方法获取直线上的点
非常简单的代码示例:

// create Line: P1(0,0) - P2(0,10)
LineSegment ls = new LineSegment(0, 0, 0, 10);
// create Point: P3(5,5)
Coordinate c = new Coordinate(5, 5);
// create snapped Point: P4(0,5)
Coordinate snappedPoint = ls.closestPoint(c);

对gamedev归档内容来说是的。该算法对我来说是正确的——这里它被移植到Java:这对于GPS坐标来说是不准确的。。。。。。有人知道如何使用GPS坐标吗?我在任何地方都找不到。这似乎只适用于线段上的点,而不是穿过两个点的整个线。注意到,绝对精确地,你必须考虑测地线距离,这意味着当它们远离赤道时,两个任意点之间有点“螺旋”线。但是让我们假设这些点彼此非常遥远,或者它们是吗;oP
// create Line: P1(0,0) - P2(0,10)
LineSegment ls = new LineSegment(0, 0, 0, 10);
// create Point: P3(5,5)
Coordinate c = new Coordinate(5, 5);
// create snapped Point: P4(0,5)
Coordinate snappedPoint = ls.closestPoint(c);