二维直线路径 LOS 制导
题目
无限直线路径 : 若 ,输出 DEGENERATE。不是航点切换、避障或海流补偿。 判题对首个输出角度使用环绕角误差 ,因此 与 等价;仍要求输出在 内(容差允许边界舍入)。第二个输出横向误差按普通浮点规则比较。
输入
;;角度单位 rad。
输出
;退化路径输出 DEGENERATE。
示例
输入
-3.75083734625231 1.3242494039467196 -3.75083734625231 1.3242494039467196 3.6306381965027157 0.1420738550790599 0.10053092483031315
期望输出
DEGENERATE
在线 C++17 练习
在浏览器编译运行,代码不上传;首次下载约 28 MB。
尚未运行
运行环境
Clang 22 / C++17 / WASI,支持本题所需标准库;不支持线程、C++ 异常或任意宿主系统访问。每例 2 秒、256 MiB 线性内存、64 KiB 输出;编译器另占浏览器内存,不适合低内存设备。初次加载最多等待 120 秒,可随时停止。
草稿保存在本浏览器。测试公开,属于本地自测而非防作弊竞赛判题;参考解答不参与运行。所有运行资产均由本站提供。
编译器来源与开源许可参考实现(完成后再展开)
对照自己的推导,检查状态更新顺序、边界条件与单位,而不只比较最终输出。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <vector>
#include <array>
#include <queue>
#include <tuple>
#include <limits>
using namespace std;
// Reference implementation: optional; solve the starter before opening.
int main() {
cout << setprecision(17);
double ax,ay,bx,by,x,y,D;
cin>>ax>>ay>>bx>>by>>x>>y>>D;
if(hypot(bx-ax,by-ay)<1e-10) {
cout<<"DEGENERATE";
return 0;
}
double chi=atan2(by-ay,bx-ax),e=-(x-ax)*sin(chi)+(y-ay)*cos(chi),p=chi-atan2(e,D);
cout<<atan2(sin(p),cos(p))<<" "<<e;
}