// File: /workspace/github_cpp_makefile_star2_O3/wrighteagle2d[P]wrighteaglebase/Debug/../src/VisualSystem.cpp
// Function: VisualSystem::VisualRing::GetBestVisualAction(double, double, double)
VisualSystem::VisualAction
VisualSystem::VisualRing::GetBestVisualAction(const AngleDeg left_most,
                                              const AngleDeg right_most,
                                              const AngleDeg interval_length) {
  //区间定义成： [left, right]
  AngleDeg left = left_most;
  AngleDeg right = left;

  double sum = 0.0;

  for (; right < left + interval_length; ++right) {
    sum += Score(right);
  }
  sum += Score(right);

  double max = sum;
  AngleDeg best = (left + right) * 0.5;

  for (; right < right_most; ++right, ++left) {
    AngleDeg in = (Score(right + 1) - Score(left));

    sum += in;

    if (in < FLOAT_EPS)
      continue;

    if (sum > max) {
      max = sum;

      AngleDeg alpha = left + 1;
      while (Score(alpha) < FLOAT_EPS && alpha < right_most)
        alpha++;
      AngleDeg beta = right + 1;
      while (Score(beta) < FLOAT_EPS && beta > alpha)
        beta--;
      best = (alpha + beta) * 0.5;
    }
  }

  return VisualAction(best, max);
}

// Assembly:
addsd %xmm0, %xmm2
xorpd %xmm3, %xmm3
ucomisd %xmm0, %xmm2
movapd %xmm0, %xmm5
xorpd %xmm4, %xmm4
jbe 0x59294
xorpd %xmm6, %xmm6
movsd 0xfe3e(%rip), %xmm7     # 0x69070
movsd 0xfe1d(%rip), %xmm8     # 0x69058
movsd 0xfe24(%rip), %xmm9     # 0x69068
movapd %xmm0, %xmm5
ucomisd %xmm5, %xmm6
jbe 0x59261
movapd %xmm5, %xmm10
addsd %xmm7, %xmm10
ucomisd %xmm10, %xmm6
ja 0x59253
jmp 0x5927d
ucomisd %xmm7, %xmm5
movapd %xmm5, %xmm10
jb 0x5927d
movapd %xmm5, %xmm10
addsd %xmm9, %xmm10
ucomisd %xmm7, %xmm10
jae 0x59271
cvttsd2si %xmm10, %eax
cltq
addsd (%rdi,%rax,8), %xmm4
addsd %xmm8, %xmm5
ucomisd %xmm5, %xmm2
ja 0x59248
pushq %rbp
movq %rsp, %rbp
ucomisd %xmm5, %xmm3
jbe 0x592ba
movsd 0xfdca(%rip), %xmm3     # 0x69070
xorpd %xmm6, %xmm6
movapd %xmm5, %xmm2
addsd %xmm3, %xmm2
ucomisd %xmm2, %xmm6
ja 0x592ae
jmp 0x592e6
ucomisd 0xfdae(%rip), %xmm5     # 0x69070
movapd %xmm5, %xmm2
jb 0x592e6
movsd 0xfd98(%rip), %xmm3     # 0x69068
movsd 0xfd98(%rip), %xmm6     # 0x69070
movapd %xmm5, %xmm2
addsd %xmm3, %xmm2
ucomisd %xmm6, %xmm2
jae 0x592dc
cvttsd2si %xmm2, %eax
cltq
addsd (%rdi,%rax,8), %xmm4
movapd %xmm5, %xmm2
addsd %xmm0, %xmm2
mulsd 0x10577(%rip), %xmm2    # 0x69878
ucomisd %xmm5, %xmm1
jbe 0x594ae
movsd 0xfd45(%rip), %xmm6     # 0x69058
xorpd %xmm7, %xmm7
movsd 0xfd50(%rip), %xmm8     # 0x69070
movsd 0xfd17(%rip), %xmm9     # 0x69040
movsd 0xfd66(%rip), %xmm10    # 0x69098
movsd 0x1053d(%rip), %xmm11   # 0x69878
movsd 0xfd24(%rip), %xmm12    # 0x69068
movapd %xmm4, %xmm3
addsd %xmm6, %xmm5
ucomisd %xmm5, %xmm7
jbe 0x59365
movapd %xmm5, %xmm13
addsd %xmm8, %xmm13
ucomisd %xmm13, %xmm7
ja 0x59357
jmp 0x59382
ucomisd %xmm8, %xmm5
movapd %xmm5, %xmm13
jb 0x59382
movapd %xmm5, %xmm13
addsd %xmm12, %xmm13
ucomisd %xmm8, %xmm13
jae 0x59376
ucomisd %xmm0, %xmm7
jbe 0x5939b
movapd %xmm0, %xmm14
addsd %xmm8, %xmm14
ucomisd %xmm14, %xmm7
ja 0x5938d
jmp 0x593b8
ucomisd %xmm8, %xmm0
movapd %xmm0, %xmm14
jb 0x593b8
movapd %xmm0, %xmm14
addsd %xmm12, %xmm14
ucomisd %xmm8, %xmm14
jae 0x593ac
cvttsd2si %xmm13, %eax
cltq
cvttsd2si %xmm14, %ecx
movsd (%rdi,%rax,8), %xmm13
movslq %ecx, %rax
subsd (%rdi,%rax,8), %xmm13
addsd %xmm13, %xmm4
ucomisd %xmm13, %xmm9
ja 0x5949e
ucomisd %xmm3, %xmm4
jbe 0x5949e
movapd %xmm0, %xmm2
addsd %xmm6, %xmm2
ucomisd %xmm2, %xmm7
jbe 0x5940c
movapd %xmm2, %xmm3
addsd %xmm8, %xmm3
ucomisd %xmm3, %xmm7
ja 0x593ff
jmp 0x59427
ucomisd %xmm8, %xmm2
movapd %xmm2, %xmm3
jb 0x59427
movapd %xmm2, %xmm3
addsd %xmm12, %xmm3
ucomisd %xmm8, %xmm3
jae 0x5941b
ucomisd %xmm2, %xmm1
jbe 0x5943b
cvttsd2si %xmm3, %eax
cltq
ucomisd (%rdi,%rax,8), %xmm9
ja 0x593f1
movapd %xmm5, %xmm3
ucomisd %xmm3, %xmm7
jbe 0x59458
movapd %xmm3, %xmm13
addsd %xmm8, %xmm13
ucomisd %xmm13, %xmm7
ja 0x5944a
jmp 0x59475
ucomisd %xmm8, %xmm3
movapd %xmm3, %xmm13
jb 0x59475
movapd %xmm3, %xmm13
addsd %xmm12, %xmm13
ucomisd %xmm8, %xmm13
jae 0x59469
ucomisd %xmm2, %xmm3
jbe 0x59491
cvttsd2si %xmm13, %eax
cltq
ucomisd (%rdi,%rax,8), %xmm9
jbe 0x59491
addsd %xmm10, %xmm3
jmp 0x5943f
addsd %xmm3, %xmm2
mulsd %xmm11, %xmm2
movapd %xmm4, %xmm3
addsd %xmm6, %xmm0
ucomisd %xmm5, %xmm1
ja 0x59348
jmp 0x594b2
movapd %xmm4, %xmm3
movapd %xmm2, %xmm0
movapd %xmm3, %xmm1
popq %rbp
retq