Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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_Path_Point - Fatal编程技术网

Java,生成两点之间的点的直接路径

Java,生成两点之间的点的直接路径,java,path,point,Java,Path,Point,我目前有一个不好的方法来做这件事,它只是根据x/y坐标是在当前坐标的上方还是下方,将起点平移1/-1,然后将其添加到ArrayList中,直到起点。等于(end),这是一个不好的解决方案,因为它创建了一个非常糟糕的路径,看起来像下面的黑色路径 我试图在两点之间生成点的直接路径(与Graphics.drawLine生成的线类型相同) 我猜我需要使用数学类来获得角度,但我对数学API不是很熟悉。查看前面回答的问题以计算角度。然后使用距离公式计算距离 double dist = Math.sqr((

我目前有一个不好的方法来做这件事,它只是根据x/y坐标是在当前坐标的上方还是下方,将起点平移1/-1,然后将其添加到ArrayList中,直到起点。等于(end),这是一个不好的解决方案,因为它创建了一个非常糟糕的路径,看起来像下面的黑色路径

我试图在两点之间生成点的直接路径(与Graphics.drawLine生成的线类型相同)

我猜我需要使用数学类来获得角度,但我对数学API不是很熟悉。

查看前面回答的问题以计算角度。然后使用距离公式计算距离

double dist = Math.sqr((x2 - x1)^2 + (y2 - y1)^2);  //obviously wont compile but you get the idea.

一种有点天真的方法是计算出斜率的比率,而不是角度

比如:

float ratio = (y2 - y1) / (x2 - x1);
然后:

width=x2-x1;
对于(int i=0;i
如果float不是您需要的,那么您需要进行一些转换

您还需要处理x1==x2的特殊情况,否则将得到被零除的错误

使用此方法,直线越陡,生成的点就越少。如果您希望点的间距均匀,无论角度如何,都需要将sin/cos/tan分开


至少在主要的8个指南针方向上为线路编写单元测试,以消除任何故障。

这实际上是一个数学问题,而不是编程问题。您需要找到从
开始
结束
的向量,然后缩放它并将其添加到
开始
,以获得所需的点数

在伪代码中:

f(start,end,nPoints) -> (path)
   delta = (end-start) / nPoints //Find the best difference vector.
   current = start //Set the current point to the start.
   i = 0
   while(|current-end| < epsilon)
      current += delta
      path[i] = current
      i = i + 1
f(开始、结束、nPoints)->(路径)
delta=(结束-开始)/nPoints//查找最佳差分向量。
当前=开始//将当前点设置为开始点。
i=0
while(|当前结束|<ε)
电流+=增量
路径[i]=当前路径
i=i+1

我假设这些点是浮点(由于除法)
epslion
应该被选择为一个小值(取决于您的问题)来检查相等性(千万不要将
!=
用于浮点!)。

这是一个非常简单的概念,但您还不太清楚自己到底想要什么。根据定义,任意两点之间存在无限多个点(其中两点之间存在无限多个点,依此类推)

最简单的解决方案是计算点A和点B之间直线的公式,然后确定点之间的距离,并使用直线公式计算这些点

初等几何告诉我们,y的变化中两点之间的斜率大于x的变化。因此
m=(y1-y2)/(x1-x2)
,其中所有这些值都是双倍的,
x1
y1
属于同一点

那么两点之间直线的公式是
y-y1=m(x-x1)
。然后,您所要做的就是开始插入值,例如,
x
,获取结果
y
,然后绘制它


当然,这就是整件事背后的想法。你最好使用向量。

你能展示一下你现在是如何生成它的,这样我们就可以理解你正在使用的API(点类,路径类)。在我看来,这与其说是Java问题,不如说是三角问题。一旦你了解了数学,在Math API中查找相关函数就很简单了。我不明白。为什么不返回一个点数组,其中第一个点是起点,第二个点是终点?您只能进行长度为1的步骤?如果已解决,请接受答案。如果没有一个答案是全面的,写下你自己的答案并接受它!我以为斜率是Y的变化而不是X的变化?所以
(y2-y1)/(x2-x1)
?当斜率为无穷大时,你必须小心。你能解释一下被零除的特殊情况吗?怎么可能solved@mario当x1==x2时,
x2-x1
==0,那么我提供的代码会得到一个除以零的结果。但是你知道你想画一条简单的垂直线,所以只要使用
if
(或其他什么)来画垂直线,而不是运行会中断的代码。
f(start,end,nPoints) -> (path)
   delta = (end-start) / nPoints //Find the best difference vector.
   current = start //Set the current point to the start.
   i = 0
   while(|current-end| < epsilon)
      current += delta
      path[i] = current
      i = i + 1