Задан выпуклый многоугольник и семейство параллельных переносов в плоскости; сформулируйте и докажите критерии, при которых существует ненулевой вектор сдвига, переводящий многоугольник в положение самопересечения (самопокрытия), примените к разрезанию и упаковке
Определения и обозначения. Пусть P⊂R2P\subset\mathbb R^2P⊂R2 — выпуклый ограниченный многоугольник с непустой внутренностью. Для вектора сдвига v∈R2v\in\mathbb R^2v∈R2 обозначим сдвиг множества через P+v={x+v: x∈P}P+v=\{x+v:\;x\in P\}P+v={x+v:x∈P}. Введём разностное тело (Minkowski difference) D:=P−P={x−y: x,y∈P}.
D:=P-P=\{x-y:\;x,y\in P\}. D:=P−P={x−y:x,y∈P}. Критерии пересечения / «самопокрытия». 1) Для любого вектора vvv верно P∩(P+v)≠∅ ⟺ v∈D.
P\cap(P+v)\neq\varnothing\iff v\in D. P∩(P+v)=∅⟺v∈D.
Доказательство: если z∈P∩(P+v)z\in P\cap(P+v)z∈P∩(P+v), то z=xz=xz=x и z=y+vz=y+vz=y+v для некоторых x,y∈Px,y\in Px,y∈P, значит v=x−y∈Dv=x-y\in Dv=x−y∈D. Обратно, если v=x−y∈Dv=x-y\in Dv=x−y∈D, то y+v=x∈Py+v=x\in Py+v=x∈P, т.е. P∩(P+v)≠∅P\cap(P+v)\neq\varnothingP∩(P+v)=∅. 2) Пересечение с непустой внутренностью (настоящее «перекрытие»): intP∩int(P+v)≠∅ ⟺ v∈intD.
\operatorname{int}P\cap\operatorname{int}(P+v)\neq\varnothing\iff v\in\operatorname{int}D. intP∩int(P+v)=∅⟺v∈intD.
Доказательство: множество DDD выпукло; если v∈intDv\in\operatorname{int}Dv∈intD, то в некоторой окрестности vvv все сдвиги представимы как разности точек интерьера PPP, откуда существует точка общей внутренности. Обратно, если внутренности пересекаются, то существует пара внутренних точек x,y∈intPx,y\in\operatorname{int}Px,y∈intP с v=x−yv=x-yv=x−y, значит v∈intDv\in\operatorname{int}Dv∈intD. 3) Касание границ (без внутреннего перекрытия): (P∩(P+v)≠∅ и intP∩int(P+v)=∅) ⟺ v∈∂D.
\bigl(P\cap(P+v)\neq\varnothing\ \text{и}\ \operatorname{int}P\cap\operatorname{int}(P+v)=\varnothing\bigr)\iff v\in\partial D. (P∩(P+v)=∅иintP∩int(P+v)=∅)⟺v∈∂D. Следствие (существование ненулевого сдвига с перекрытием). Так как 0∈intD0\in\operatorname{int}D0∈intD для любого выпуклого множества с непустой внутренностью, то в любой окрестности нуля есть ненулевые v∈intDv\in\operatorname{int}Dv∈intD. Следовательно всегда существует ненулевой вектор сдвига, при котором PPP и P+vP+vP+v имеют непустое внутреннее пересечение (т. е. «самопокрытие» в смысле перекрытия). Применение к разрезанию и упаковке. - Критерий некроссинговой упаковки (транслевантной упаковки): пусть набор сдвигов T⊂R2T\subset\mathbb R^2T⊂R2 даёт упаковку копий P+T={P+t: t∈T}P+T=\{P+t:\;t\in T\}P+T={P+t:t∈T} с непересекающимися внутренностями тогда и только тогда, когда для любых разных t1,t2∈Tt_1,t_2\in Tt1,t2∈Tt1−t2∉intD.
t_1-t_2\notin\operatorname{int}D. t1−t2∈/intD.
Иначе разность лежит в intD\operatorname{int}DintD и соответствующие копии перекрываются. - Тесселяция (упаковка с покрытием) решёткой. Пусть Λ\LambdaΛ — решётка. Необходимые и (при допустимых условиях по границе) достаточные условия, чтобы семейство {P+λ:λ∈Λ}\{P+\lambda:\lambda\in\Lambda\}{P+λ:λ∈Λ} давало тесселяцию R2\mathbb R^2R2: a) Λ∩intD={0}\Lambda\cap\operatorname{int}D=\{0\}Λ∩intD={0} (чтобы внутренности копий не пересекались); b) area(P)=detΛ\operatorname{area}(P)=\det\Lambdaarea(P)=detΛ (чтобы суммарная площадь копий равнялась площади плоскости в пределах фундаментального параллелограмма). При выполнении (a) и (b) и при условии, что граница PPP имеет нулевую меру, упаковка автоматически покрывает плоскость. - Разрезание (диссекция) и реконструкция. При разрезании PPP на части, которые затем переводят сдвигами viv_ivi, для получения безперекрывающей сборки необходимо выбирать сдвиги так, чтобы разности между сдвигами не попадали в intD\operatorname{int}DintD. Для получения сознательного перекрытия (наложения частей) выбирают сдвиги из intD\operatorname{int}DintD; для касания по краю — сдвиги из ∂D\partial D∂D. Для симметричных многоугольников критерии упрощаются: если PPP центрально-симметричен, то D=2PD=2PD=2P, и условия сводятся к простому масштабированию. Замечания по практическому вычислению. Множество D=P−PD=P-PD=P−P — выпуклый (центрально-симметричный) многоугольник, его границу легко получить как Minkowski сумму P+(−P)P+(-P)P+(−P). Поэтому в конкретной задаче вычисление запрещённой области сдвигов и проверка условий сводятся к простому вычислению геометрии DDD. Таким образом: проверка существования ненулевого сдвига, приводящего к самопересечению/перекрытию, сводится к проверке принадлежности этого сдвига разностному телу D=P−PD=P-PD=P−P; критерии для упаковки и тесселяции формулируются через исключение разностей сдвигов из intD\operatorname{int}DintD и через равенство площадей при тесселяции.
D:=P−P={x−y: x,y∈P}. D:=P-P=\{x-y:\;x,y\in P\}.
D:=P−P={x−y:x,y∈P}.
Критерии пересечения / «самопокрытия».
1) Для любого вектора vvv верно
P∩(P+v)≠∅ ⟺ v∈D. P\cap(P+v)\neq\varnothing\iff v\in D.
P∩(P+v)=∅⟺v∈D. Доказательство: если z∈P∩(P+v)z\in P\cap(P+v)z∈P∩(P+v), то z=xz=xz=x и z=y+vz=y+vz=y+v для некоторых x,y∈Px,y\in Px,y∈P, значит v=x−y∈Dv=x-y\in Dv=x−y∈D. Обратно, если v=x−y∈Dv=x-y\in Dv=x−y∈D, то y+v=x∈Py+v=x\in Py+v=x∈P, т.е. P∩(P+v)≠∅P\cap(P+v)\neq\varnothingP∩(P+v)=∅.
2) Пересечение с непустой внутренностью (настоящее «перекрытие»):
intP∩int(P+v)≠∅ ⟺ v∈intD. \operatorname{int}P\cap\operatorname{int}(P+v)\neq\varnothing\iff v\in\operatorname{int}D.
intP∩int(P+v)=∅⟺v∈intD. Доказательство: множество DDD выпукло; если v∈intDv\in\operatorname{int}Dv∈intD, то в некоторой окрестности vvv все сдвиги представимы как разности точек интерьера PPP, откуда существует точка общей внутренности. Обратно, если внутренности пересекаются, то существует пара внутренних точек x,y∈intPx,y\in\operatorname{int}Px,y∈intP с v=x−yv=x-yv=x−y, значит v∈intDv\in\operatorname{int}Dv∈intD.
3) Касание границ (без внутреннего перекрытия):
(P∩(P+v)≠∅ и intP∩int(P+v)=∅) ⟺ v∈∂D. \bigl(P\cap(P+v)\neq\varnothing\ \text{и}\ \operatorname{int}P\cap\operatorname{int}(P+v)=\varnothing\bigr)\iff v\in\partial D.
(P∩(P+v)=∅ и intP∩int(P+v)=∅)⟺v∈∂D.
Следствие (существование ненулевого сдвига с перекрытием). Так как 0∈intD0\in\operatorname{int}D0∈intD для любого выпуклого множества с непустой внутренностью, то в любой окрестности нуля есть ненулевые v∈intDv\in\operatorname{int}Dv∈intD. Следовательно всегда существует ненулевой вектор сдвига, при котором PPP и P+vP+vP+v имеют непустое внутреннее пересечение (т. е. «самопокрытие» в смысле перекрытия).
Применение к разрезанию и упаковке.
- Критерий некроссинговой упаковки (транслевантной упаковки): пусть набор сдвигов T⊂R2T\subset\mathbb R^2T⊂R2 даёт упаковку копий P+T={P+t: t∈T}P+T=\{P+t:\;t\in T\}P+T={P+t:t∈T} с непересекающимися внутренностями тогда и только тогда, когда для любых разных t1,t2∈Tt_1,t_2\in Tt1 ,t2 ∈T t1−t2∉intD. t_1-t_2\notin\operatorname{int}D.
t1 −t2 ∈/intD. Иначе разность лежит в intD\operatorname{int}DintD и соответствующие копии перекрываются.
- Тесселяция (упаковка с покрытием) решёткой. Пусть Λ\LambdaΛ — решётка. Необходимые и (при допустимых условиях по границе) достаточные условия, чтобы семейство {P+λ:λ∈Λ}\{P+\lambda:\lambda\in\Lambda\}{P+λ:λ∈Λ} давало тесселяцию R2\mathbb R^2R2:
a) Λ∩intD={0}\Lambda\cap\operatorname{int}D=\{0\}Λ∩intD={0} (чтобы внутренности копий не пересекались);
b) area(P)=detΛ\operatorname{area}(P)=\det\Lambdaarea(P)=detΛ (чтобы суммарная площадь копий равнялась площади плоскости в пределах фундаментального параллелограмма).
При выполнении (a) и (b) и при условии, что граница PPP имеет нулевую меру, упаковка автоматически покрывает плоскость.
- Разрезание (диссекция) и реконструкция. При разрезании PPP на части, которые затем переводят сдвигами viv_ivi , для получения безперекрывающей сборки необходимо выбирать сдвиги так, чтобы разности между сдвигами не попадали в intD\operatorname{int}DintD. Для получения сознательного перекрытия (наложения частей) выбирают сдвиги из intD\operatorname{int}DintD; для касания по краю — сдвиги из ∂D\partial D∂D. Для симметричных многоугольников критерии упрощаются: если PPP центрально-симметричен, то D=2PD=2PD=2P, и условия сводятся к простому масштабированию.
Замечания по практическому вычислению. Множество D=P−PD=P-PD=P−P — выпуклый (центрально-симметричный) многоугольник, его границу легко получить как Minkowski сумму P+(−P)P+(-P)P+(−P). Поэтому в конкретной задаче вычисление запрещённой области сдвигов и проверка условий сводятся к простому вычислению геометрии DDD.
Таким образом: проверка существования ненулевого сдвига, приводящего к самопересечению/перекрытию, сводится к проверке принадлежности этого сдвига разностному телу D=P−PD=P-PD=P−P; критерии для упаковки и тесселяции формулируются через исключение разностей сдвигов из intD\operatorname{int}DintD и через равенство площадей при тесселяции.