// File: /workspace/github_cpp_makefile_star2_O1/istellartech[P]OpenTsiolkovsky/src/coordinate_transform.cpp
// Function: distance_surface(Eigen::Matrix<double, 3, 1, 0, 3, 1>, Eigen::Matrix<double, 3, 1, 0, 3, 1>)
double distance_surface(Vector3d pos0_LLH_, Vector3d pos1_LLH_){
    double const earth_radius = 6378137; // 地球半径 m
    Vector3d pos0_ECEF_ = posECEF(pos0_LLH_);
    Vector3d pos1_ECEF_ = posECEF(pos1_LLH_);
    double theta = acos(pos0_ECEF_.dot(pos1_ECEF_) /
                        pos0_ECEF_.norm() / pos1_ECEF_.norm()); // radius
    return earth_radius * theta;
}

// Assembly:
pushq %rbx
subq $0x50, %rsp
movq %rsi, %rbx
movsd (%rdi), %xmm3
movsd 0x8(%rdi), %xmm2
movsd 0x10(%rdi), %xmm0
movsd %xmm0, 0x30(%rsp)
movsd 0x1989(%rip), %xmm0     # 0x27ce0
divsd %xmm0, %xmm3
movsd 0x1985(%rip), %xmm1     # 0x27ce8
mulsd %xmm1, %xmm3
movsd %xmm3, 0x10(%rsp)
divsd %xmm0, %xmm2
mulsd %xmm1, %xmm2
movsd %xmm2, 0x20(%rsp)
movapd %xmm3, %xmm0
callq 0x50f0
movsd %xmm0, 0x8(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x50f0
movsd 0x8(%rsp), %xmm1
mulsd 0x3ef5(%rip), %xmm1     # 0x2a298
mulsd %xmm0, %xmm1
addsd 0xc61(%rip), %xmm1      # 0x27010
xorpd %xmm0, %xmm0
ucomisd %xmm0, %xmm1
movapd %xmm1, %xmm0
jb 0x263c3
sqrtsd %xmm0, %xmm0
jmp 0x263c8
callq 0x52e0
movsd 0x3cf8(%rip), %xmm1     # 0x2a0c8
divsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd 0x30(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x18(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x5690
mulsd 0x18(%rsp), %xmm0
movsd %xmm0, 0x28(%rsp)
movsd 0x20(%rsp), %xmm0
callq 0x5690
mulsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x48(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x5690
mulsd 0x18(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
movsd 0x20(%rsp), %xmm0
callq 0x50f0
mulsd 0x18(%rsp), %xmm0
movsd %xmm0, 0x40(%rsp)
movsd 0x8(%rsp), %xmm0
mulsd 0x3e4c(%rip), %xmm0     # 0x2a2a0
addsd 0x30(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x50f0
mulsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x38(%rsp)
movsd (%rbx), %xmm3
movsd 0x8(%rbx), %xmm2
movsd 0x10(%rbx), %xmm0
movsd %xmm0, 0x30(%rsp)
movsd 0x184d(%rip), %xmm0     # 0x27ce0
divsd %xmm0, %xmm3
movsd 0x1849(%rip), %xmm1     # 0x27ce8
mulsd %xmm1, %xmm3
movsd %xmm3, 0x10(%rsp)
divsd %xmm0, %xmm2
mulsd %xmm1, %xmm2
movsd %xmm2, 0x18(%rsp)
movapd %xmm3, %xmm0
callq 0x50f0
movsd %xmm0, 0x8(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x50f0
movsd 0x8(%rsp), %xmm1
mulsd 0x3db9(%rip), %xmm1     # 0x2a298
mulsd %xmm0, %xmm1
movapd %xmm1, %xmm0
addsd 0xb21(%rip), %xmm0      # 0x27010
ucomisd 0x1811(%rip), %xmm0     # 0x27d08
jb 0x264ff
sqrtsd %xmm0, %xmm0
jmp 0x26504
callq 0x52e0
movsd 0x3bbc(%rip), %xmm1     # 0x2a0c8
divsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movsd 0x30(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x28(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x5690
mulsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x18(%rsp), %xmm0
callq 0x5690
mulsd 0x20(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x5690
mulsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x28(%rsp)
movsd 0x18(%rsp), %xmm0
callq 0x50f0
mulsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
movsd 0x8(%rsp), %xmm0
mulsd 0x3d10(%rip), %xmm0     # 0x2a2a0
addsd 0x30(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x10(%rsp), %xmm0
callq 0x50f0
movapd %xmm0, %xmm6
mulsd 0x8(%rsp), %xmm6
movsd 0x48(%rsp), %xmm2
movapd %xmm2, %xmm4
mulsd 0x20(%rsp), %xmm4
movsd 0x40(%rsp), %xmm3
movapd %xmm3, %xmm1
mulsd 0x18(%rsp), %xmm1
movsd 0x38(%rsp), %xmm0
movapd %xmm0, %xmm5
mulsd %xmm6, %xmm5
addsd %xmm1, %xmm5
addsd %xmm4, %xmm5
mulsd %xmm2, %xmm2
mulsd %xmm3, %xmm3
mulsd %xmm0, %xmm0
addsd %xmm3, %xmm0
addsd %xmm2, %xmm0
xorpd %xmm2, %xmm2
ucomisd %xmm2, %xmm0
jb 0x2660b
sqrtsd %xmm0, %xmm0
jmp 0x2662c
movsd %xmm5, 0x10(%rsp)
movsd %xmm6, 0x8(%rsp)
callq 0x52e0
xorpd %xmm2, %xmm2
movsd 0x8(%rsp), %xmm6
movsd 0x10(%rsp), %xmm5
divsd %xmm0, %xmm5
movsd 0x20(%rsp), %xmm0
mulsd %xmm0, %xmm0
movsd 0x18(%rsp), %xmm1
mulsd %xmm1, %xmm1
mulsd %xmm6, %xmm6
addsd %xmm1, %xmm6
addsd %xmm0, %xmm6
ucomisd %xmm2, %xmm6
jb 0x2665f
xorps %xmm0, %xmm0
sqrtsd %xmm6, %xmm0
jmp 0x26674
movapd %xmm6, %xmm0
movsd %xmm5, 0x10(%rsp)
callq 0x52e0
movsd 0x10(%rsp), %xmm5
divsd %xmm0, %xmm5
movapd %xmm5, %xmm0
callq 0x5360
mulsd 0x3a3f(%rip), %xmm0     # 0x2a0c8
addq $0x50, %rsp
popq %rbx
retq