用Java写一个函数,曲线是由若干个点组成的,输入一个点的横坐标,输出前后四个点的坐标
时间: 2024-05-15 19:17:08 浏览: 144
假设曲线上的点已经按照横坐标从小到大排好序,可以使用二分查找法找到给定横坐标对应的点的位置,然后再输出前后四个点的坐标。
以下是Java代码:
```java
public static void printFourPoints(double x, double[] xs, double[] ys) {
int pos = binarySearch(x, xs);
if (pos < 0) {
System.out.println("找不到对应点");
return;
}
int start = Math.max(0, pos - 4);
int end = Math.min(xs.length - 1, pos + 4);
for (int i = start; i <= end; i++) {
System.out.println("(" + xs[i] + ", " + ys[i] + ")");
}
}
private static int binarySearch(double x, double[] xs) {
int left = 0;
int right = xs.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (xs[mid] == x) {
return mid;
} else if (xs[mid] < x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
其中,`printFourPoints`函数接受三个参数,分别是给定点的横坐标`x`,所有点的横坐标数组`xs`,所有点的纵坐标数组`ys`。函数首先使用`binarySearch`函数找到给定横坐标对应的点的位置`pos`,然后根据`pos`计算出前后四个点的起始位置`start`和结束位置`end`。最后,循环输出前后四个点的坐标。
`binarySearch`函数使用经典的二分查找法,返回给定横坐标在横坐标数组中的位置,如果找不到,则返回-1。
阅读全文