// File: /workspace/github_cpp_makefile_star2_O1/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 0x5aafe
xorpd %xmm6, %xmm6
movsd 0x105d4(%rip), %xmm7    # 0x6b070
movsd 0x105b3(%rip), %xmm8    # 0x6b058
movsd 0x105ba(%rip), %xmm9    # 0x6b068
movapd %xmm0, %xmm5
ucomisd %xmm5, %xmm6
jbe 0x5aacb
movapd %xmm5, %xmm10
addsd %xmm7, %xmm10
ucomisd %xmm10, %xmm6
ja 0x5aabd
jmp 0x5aae7
ucomisd %xmm7, %xmm5
movapd %xmm5, %xmm10
jb 0x5aae7
movapd %xmm5, %xmm10
addsd %xmm9, %xmm10
ucomisd %xmm7, %xmm10
jae 0x5aadb
cvttsd2si %xmm10, %eax
cltq
addsd (%rdi,%rax,8), %xmm4
addsd %xmm8, %xmm5
ucomisd %xmm5, %xmm2
ja 0x5aab2
pushq %rbp
movq %rsp, %rbp
ucomisd %xmm5, %xmm3
jbe 0x5ab24
movsd 0x10560(%rip), %xmm3    # 0x6b070
xorpd %xmm6, %xmm6
movapd %xmm5, %xmm2
addsd %xmm3, %xmm2
ucomisd %xmm2, %xmm6
ja 0x5ab18
jmp 0x5ab50
ucomisd 0x10544(%rip), %xmm5    # 0x6b070
movapd %xmm5, %xmm2
jb 0x5ab50
movsd 0x1052e(%rip), %xmm3    # 0x6b068
movsd 0x1052e(%rip), %xmm6    # 0x6b070
movapd %xmm5, %xmm2
addsd %xmm3, %xmm2
ucomisd %xmm6, %xmm2
jae 0x5ab46
cvttsd2si %xmm2, %eax
cltq
addsd (%rdi,%rax,8), %xmm4
movapd %xmm5, %xmm2
addsd %xmm0, %xmm2
mulsd 0x10d0d(%rip), %xmm2    # 0x6b878
ucomisd %xmm5, %xmm1
jbe 0x5ad18
movsd 0x104db(%rip), %xmm6    # 0x6b058
xorpd %xmm7, %xmm7
movsd 0x104e6(%rip), %xmm8    # 0x6b070
movsd 0x104ad(%rip), %xmm9    # 0x6b040
movsd 0x104fc(%rip), %xmm10   # 0x6b098
movsd 0x10cd3(%rip), %xmm11   # 0x6b878
movsd 0x104ba(%rip), %xmm12   # 0x6b068
movapd %xmm4, %xmm3
addsd %xmm6, %xmm5
ucomisd %xmm5, %xmm7
jbe 0x5abcf
movapd %xmm5, %xmm13
addsd %xmm8, %xmm13
ucomisd %xmm13, %xmm7
ja 0x5abc1
jmp 0x5abec
ucomisd %xmm8, %xmm5
movapd %xmm5, %xmm13
jb 0x5abec
movapd %xmm5, %xmm13
addsd %xmm12, %xmm13
ucomisd %xmm8, %xmm13
jae 0x5abe0
ucomisd %xmm0, %xmm7
jbe 0x5ac05
movapd %xmm0, %xmm14
addsd %xmm8, %xmm14
ucomisd %xmm14, %xmm7
ja 0x5abf7
jmp 0x5ac22
ucomisd %xmm8, %xmm0
movapd %xmm0, %xmm14
jb 0x5ac22
movapd %xmm0, %xmm14
addsd %xmm12, %xmm14
ucomisd %xmm8, %xmm14
jae 0x5ac16
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 0x5ad08
ucomisd %xmm3, %xmm4
jbe 0x5ad08
movapd %xmm0, %xmm2
addsd %xmm6, %xmm2
ucomisd %xmm2, %xmm7
jbe 0x5ac76
movapd %xmm2, %xmm3
addsd %xmm8, %xmm3
ucomisd %xmm3, %xmm7
ja 0x5ac69
jmp 0x5ac91
ucomisd %xmm8, %xmm2
movapd %xmm2, %xmm3
jb 0x5ac91
movapd %xmm2, %xmm3
addsd %xmm12, %xmm3
ucomisd %xmm8, %xmm3
jae 0x5ac85
ucomisd %xmm2, %xmm1
jbe 0x5aca5
cvttsd2si %xmm3, %eax
cltq
ucomisd (%rdi,%rax,8), %xmm9
ja 0x5ac5b
movapd %xmm5, %xmm3
ucomisd %xmm3, %xmm7
jbe 0x5acc2
movapd %xmm3, %xmm13
addsd %xmm8, %xmm13
ucomisd %xmm13, %xmm7
ja 0x5acb4
jmp 0x5acdf
ucomisd %xmm8, %xmm3
movapd %xmm3, %xmm13
jb 0x5acdf
movapd %xmm3, %xmm13
addsd %xmm12, %xmm13
ucomisd %xmm8, %xmm13
jae 0x5acd3
ucomisd %xmm2, %xmm3
jbe 0x5acfb
cvttsd2si %xmm13, %eax
cltq
ucomisd (%rdi,%rax,8), %xmm9
jbe 0x5acfb
addsd %xmm10, %xmm3
jmp 0x5aca9
addsd %xmm3, %xmm2
mulsd %xmm11, %xmm2
movapd %xmm4, %xmm3
addsd %xmm6, %xmm0
ucomisd %xmm5, %xmm1
ja 0x5abb2
jmp 0x5ad1c
movapd %xmm4, %xmm3
movapd %xmm2, %xmm0
movapd %xmm3, %xmm1
popq %rbp
retq