#P17082. 简单几何题
简单几何题
1007. 简单几何题
题目描述
小 D 生活在被无尽海洋覆盖的星球上。由于行星所处的恒星系统引力极其混沌,它的自转轴和公转轨道处于极度的不稳定状态。这导致太阳光直射的方向都是完全随机的。行星的表面可以被视作三维欧几里得空间中的单位球面 S 2 =
{(x, y, z) ∈ R3: x2 + y 2 + z 2 = 1}。连接球面上任意两点(不为对跖点)的大圆上的劣弧,被称为短大圆弧。
这颗星球上仅有一块古老且连续的大陆 P,P 是一个球面简单多边形。它是由 n 条短大圆弧首尾相连构成的闭合区域,其边界不自交。同时,这块大陆整体被严格包含在某个开半球之内。当太阳光在星球上的直射点为 s 时,星球上处于白天的区域被定义为
Hs = {x ∈ S 2: s ⋅ x > 0}。界定白天与黑夜的大圆 s ⋅ x = 0 称为晨
昏线。为了在变幻莫测的气候中生存,小 D 致力于建立精确的行星气象模型。小 D 的核心任务是:在给定大陆形状与任意太阳直射点 s 时,计算这块大陆有多少比例的面积恰好沐浴在阳光之中。即求出以下百分比:
Area(P ∩ Hs )⋅ 100%Area(P )
球面面积:Area(P ) 指区域在单位球面上的表面积。在单位球上,一个边界大圆平面之间的二面角分别为 α, β, γ 的球面三角形,其球面面
积等于 α + β + γ − π,可结合上图理解。
输入格式
输入包含多组测试数据。第一行包含一个整数 T (1 ≤ T ≤ 500),表示测试数据的组数。对于每组测试数据:第一行包含两个整数 n, q (3 ≤ n ≤ 500, 1 ≤ q ≤ 500),分别表示大陆多边形的顶点数和查询的太阳方向数。接下来的 n 行,每行包含三个整数 x, y, z,表示多边形的顶点。第 i个顶点对应的实际球面坐标为 (
y,x2 +y 2 +z 2
x,x2 +y 2 +z 2
z)。x2 +y 2 +z 2
顶点按相对于球体外侧的逆时针顺序给出。接下来的 q 行,每行包含三个整数 x, y, z,表示一个查询的太阳直射点。对应的实际方向向量 s 为 (
xx2 +y 2 +z 2
,
yx2 +y 2 +z 2
,
zx2 +y 2 +z 2
)。
额外保证:
-
所有测试数据的 ∑ nq ≤ 5 × 106。
-
输入的所有坐标均满足 −105 ≤ x, y, z ≤ 105 且 (x, y, z) =
(0, 0, 0)。-
令 γ = 10−6 rad。对于多边形任意两个不同顶点 u, v,它们之间的球面距离 d(u, v) 满足 γ ≤ d(u, v) ≤ π − γ。
- 多边形边界不自交;相邻三点不共大圆;多边形总面积保证
Area(P ) ≥ 10−3。-
对于任意给定的直射点 s 和任意顶点 pi,保证点积 s ⋅ pi = 0,即
晨昏线不会穿过任何一个多边形顶点。-
存在向量 v 使得对任意 pi 满足 v ⋅ pi > 0,即多边形整体被包含
在某个开半球之内。
输出格式
本题使用 Special Judge 进行评测。对于每个查询,输出一行包含一个实数 r ∈ [0, 100],表示白天部分占总面积的百分比。如果你的输出为 x,标准答案为 y,当且仅当满足∣x−y∣−6时,你的答案将被视为正确。max(1,∣y∣) ≤ 10
样例输入
1
4 2
10 0 10
0 10 10
-10 0 10
0 5 10
0 -10 3
0 10 -3
样例输出
16.37693771831994469373
83.62306228168005500789
提示
下图为样例的俯视示意图,青色分界线为晨昏线(两次查询的方向恰好相反)。其中,深色区域为第一次查询对应的白天部分,而浅色区域为第二次查询对应的白天部分。
该多边形总面积的精确形式为 4 arctan ( 10+32 10 )。
第一次询问所对应的区域面积的精确形式为9 2)。4 arctan ( 274+85 10+2879+10 790
来源:官方题面 PDF(2026"钉耙编程"暑期联赛 第1场)