University stuff.
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

Sequential.java 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. class Sequential extends Oblig4 {
  2. Sequential(NPunkter17 points) {
  3. super(points);
  4. name = "Sequential";
  5. }
  6. @Override
  7. void solve() {
  8. findMinMaxXY();
  9. MAX_X = x[maxX];
  10. MAX_Y = y[maxY];
  11. coHull = pointsRightOf(maxX, minX);
  12. coHull.append(pointsRightOf(minX, maxX));
  13. for (int i = 0; i < coHull.size(); ++i) {
  14. System.out.print(coHull.get(i)+" ");
  15. }
  16. System.out.println("");
  17. }
  18. void findMinMaxXY() {
  19. minX = 0;
  20. maxX = 0;
  21. minY = 0;
  22. maxY = 0;
  23. for (int i = 1; i < n; ++i) {
  24. int px = x[i];
  25. if (px < x[minX])
  26. minX = i;
  27. if (px > x[maxX])
  28. maxX = i;
  29. int py = y[i];
  30. if (py < y[minY])
  31. minY = i;
  32. if (py > y[maxY])
  33. maxY = i;
  34. }
  35. }
  36. IntList pointsRightOf(int p1, int p2) {
  37. int p3 = -1;
  38. double p3dist = 0;
  39. int a = lineA(p1, p2);
  40. int b = lineB(p1, p2);
  41. int c = lineC(p1, p2);
  42. for (int i = 0; i < n; ++i) {
  43. if (i == p1 || i == p2)
  44. continue;
  45. double line = lineEquation(a, b, c, i);
  46. if (line > 0)
  47. continue;
  48. double dist = Math.abs(dist(line, a, b));
  49. if (dist > p3dist) {
  50. p3dist = dist;
  51. p3 = i;
  52. }
  53. }
  54. if (p3 == -1) {
  55. IntList l = new IntList(2);
  56. l.add(p1);
  57. return l;
  58. }
  59. IntList l = pointsRightOf(p1, p3);
  60. l.append(pointsRightOf(p3, p2));
  61. return l;
  62. }
  63. }