我想生成所有这些果岭。我知道我错了
我使用以下代码
import java.util.ArrayList;
import java.util.List;
public class classA {
static final int startX = 52760;
static final int startY = 72440;
static final int endX = 52520;
static final int endY = 71896;
static final List<String> coordinates = new ArrayList<>();
public static void main(String[] args)
{
calculate(startX, startY, endX, endY);
coordinates.forEach(System.out::println);
}
private static void calculate(int _startX, int _startY, int _endX, int _endY)
{
final int _x = (_startX + _endX) / 2;
final int _y = (_startY + _endY) / 2;
coordinates.add(_x + "," + _y);
if (coordinates.size() != 8)
calculate(startX, startY, _x, _y);
}
}
我可以理解,代码会计算&#39; next&#39;的起始值。结束值(以中心为单位)但我无法对其进行配置
输出
我该怎么做?谢谢!
答案 0 :(得分:2)
在每一步中,您实际上将距离分成两半:
final int _x = (_startX + _endX) / 2;
final int _y = (_startY + _endY) / 2;
这也是你在(开始,中间)等中心看到中间第一个点和下一个点的确切原因。
您想要实现的目标称为linear interpolation。
你需要将距离分成相等大小的(8 + 1) = 9
部分(中间8个部分,总共9个部分)。您可以使用
(end - start) / 9
然后你反复将其添加到start
并获得所有积分。或者(为了更精确)使用乘法
start + i * ((end - start) / 9)
接收i
- 新点。
此外,您不应使用整数除法,因为它总是向下舍入。要获得准确的结果,您应该转换为double
,然后计算结果,最后转换回int
以显示值。
代码如下:
private static void calculate(int startX, int startY, int endX, int endY) {
int amount = 8;
// Compute the distance to each point
double wholeDistanceX = endX - startX;
double distanceX = wholeDistanceX / (amount + 1);
double wholeDistanceY = endY - startY;
double distanceY = wholeDistanceY / (amount + 1);
// Add all new points
for (int i = 1; i <= amount; i++) {
// Compute current point
double currentX = startX + i * distanceX;
double currentY = startY + i * distanceY;
// Create the point
coordinates.add((int) currentX + "," + (int) currentY);
}
}
请注意,在Java中,您通常不会在变量前面使用_
。
这是我刚绘制的快速图像,应该有助于理解方程式:
您会看到第一个和最后一个点位于start
和end
。距离为end - start
。距离除9
的距离与第一个点到第二个点的距离一样长。因此,第六点位于
start + 6 * ((end - start) / 9)