Java 计算二维线性向量上的下一点

Java 计算二维线性向量上的下一点,java,math,vector,path,2d,Java,Math,Vector,Path,2d,我很确定这个问题可以用一些基本的三角方程来解决,但不幸的是,我无法解决 我需要的是: 给定二维两点的x,y坐标,我需要找到向量上从一点到另一点的下一点。基本上是找到最近的线性路径 例如:在上面的图像上,我们得到了两个点,我们希望从蓝点到红点沿着路径移动,因此我们需要在每一步找到下一个灰点,直到到达它为止 非常感谢您的帮助 看看看看谢谢大家的建议!我终于明白了。 这里是一个基本的Java实现,它可以在假设每一步移动1个点的情况下找到线性向量的下一个点 public int[] getNextL

我很确定这个问题可以用一些基本的三角方程来解决,但不幸的是,我无法解决

我需要的是:

给定二维两点的x,y坐标,我需要找到向量上从一点到另一点的下一点。基本上是找到最近的线性路径

例如:在上面的图像上,我们得到了两个点,我们希望从蓝点到红点沿着路径移动,因此我们需要在每一步找到下一个灰点,直到到达它为止


非常感谢您的帮助

看看

看看

谢谢大家的建议!我终于明白了。 这里是一个基本的Java实现,它可以在假设每一步移动1个点的情况下找到线性向量的下一个点

  public int[] getNextLinePoint(int x,int y,int x2, int y2) {
    int w = x2 - x;
    int h = y2 - y;
    int dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0;
    if (w<0) dx1 = -1; else if (w>0) dx1 = 1;
    if (h<0) dy1 = -1; else if (h>0) dy1 = 1;
    if (w<0) dx2 = -1; else if (w>0) dx2 = 1;
    int longest = Math.abs(w);
    int shortest = Math.abs(h);
    if (!(longest>shortest)) {
        longest = Math.abs(h);
        shortest = Math.abs(w);
        if (h<0) dy2 = -1; else if (h>0) dy2 = 1;
        dx2 = 0;            
    }
    int numerator = longest >> 1;
    numerator += shortest;
    if (!(numerator<longest)) {
        numerator -= longest;
        x += dx1;
        y += dy1;
    } else {
        x += dx2;
        y += dy2;
    }
    int[] res = {x, y};
    return res;
}
此代码以2元素int[]数组的形式返回下一个x,y坐标。
再次感谢大家

谢谢大家的建议!我终于明白了。 这里是一个基本的Java实现,它可以在假设每一步移动1个点的情况下找到线性向量的下一个点

  public int[] getNextLinePoint(int x,int y,int x2, int y2) {
    int w = x2 - x;
    int h = y2 - y;
    int dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0;
    if (w<0) dx1 = -1; else if (w>0) dx1 = 1;
    if (h<0) dy1 = -1; else if (h>0) dy1 = 1;
    if (w<0) dx2 = -1; else if (w>0) dx2 = 1;
    int longest = Math.abs(w);
    int shortest = Math.abs(h);
    if (!(longest>shortest)) {
        longest = Math.abs(h);
        shortest = Math.abs(w);
        if (h<0) dy2 = -1; else if (h>0) dy2 = 1;
        dx2 = 0;            
    }
    int numerator = longest >> 1;
    numerator += shortest;
    if (!(numerator<longest)) {
        numerator -= longest;
        x += dx1;
        y += dy1;
    } else {
        x += dx2;
        y += dy2;
    }
    int[] res = {x, y};
    return res;
}
此代码以2元素int[]数组的形式返回下一个x,y坐标。
再次感谢大家

听起来你需要得到斜率,你只需要找到两个给定点之间的点吗?那么你想要的就是Bresenham算法。虽然如果您计划用Java呈现它,您最好坚持使用内部Java实现,这将是硬件加速的。如果你必须根据某种算法给点上色,反别名?然后它可能会更复杂,但还是更好地使用内部Java函数。因此,建议您是否需要渲染它或开发算法。我需要它沿直线移动图像,因此我需要该算法。我已经在寻找布雷森汉姆的解决方案了。谢谢听起来你需要得到斜率,你只需要找到两个给定点之间的点吗?那么你想要的就是Bresenham算法。虽然如果您计划用Java呈现它,您最好坚持使用内部Java实现,这将是硬件加速的。如果你必须根据某种算法给点上色,反别名?然后它可能会更复杂,但还是更好地使用内部Java函数。因此,建议您是否需要渲染它或开发算法。我需要它沿直线移动图像,因此我需要该算法。我已经在寻找布雷森汉姆的解决方案了。谢谢