核心思路
计算中间点与前后点之间的斜率,不相同则说明是拐点。
若分母为0则取倒数。
代码细节
import java.util.*;
public class Main {
public static int calcuate(int x1,int y1,int x2,int y2){
int xie=0;
if (x2-x1!=0){
xie=(y2-y1)/(x2-x1);
}else {
xie=(x2-x1)/(y2-y1);//分母为0则斜率取倒数
}
return xie;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String[] str=scanner.nextLine().split(" ");
int[] num=new int[str.length];
for (int i = 0; i < str.length; i++) {
num[i]=Integer.parseInt(str[i]);
}
List<int[]> list=new ArrayList<>();
for (int i = 0; i < str.length; i+=2) {
list.add(new int[]{num[i],num[i+1]});
}
List<int[]> res=new ArrayList<>();
res.add(new int[]{num[0],num[1]});
for (int i = 0; i < list.size()-2; i++) {
int xie1= calcuate(list.get(i)[0],list.get(i)[1],list.get(i+1)[0],list.get(i+1)[1]);
int xie2= calcuate(list.get(i+1)[0],list.get(i+1)[1],list.get(i+2)[0],list.get(i+2)[1]);
if (xie1!=xie2){
res.add(new int[]{list.get(i+1)[0], list.get(i+1)[1]});
}
}
res.add(new int[]{num[num.length-2], num[num.length-1]});
Iterator<int[]> iterator= res.iterator();
while (iterator.hasNext()){
System.out.println(Arrays.toString(iterator.next()));
}
}
}