Subdividing finite plane complexes by affine lines #
Moise Chapter 2 cuts a polygonal region by the finitely many lines containing its edges. This file develops that construction from its local primitive: when an affine functional has opposite signs at the endpoints of an edge, its zero gives the new subdivision vertex on that edge.
Three affinely independent points form an affine basis of the plane.
Equations
- LeanEval.Topology.ClassificationOfSurfaces.Moise.affineBasisOfTriangle p hp = { toFun := p, ind' := hp, tot' := ⋯ }
Instances For
The affine equivalence carrying one ordered nondegenerate plane triangle to another.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The affine equivalence between ordered triangles carries corresponding line-map points to corresponding line-map points.
Set-valued version of the supporting-hyperplane face formula. Convex-hull membership uses only finitely many points, so the finite formula above applies to each witness.
Two finite convex hulls lying on opposite sides of an affine hyperplane intersect in their common zero face.
Vertex-indexed form of convexHull_inter_of_affine_separation. This is the form used when
checking the maximal triangles of a mesh.
The reference split of a triangle #
A point of the Euclidean plane with the displayed Cartesian coordinates.
Equations
Instances For
Vertices of the reference line split: the standard triangle vertices followed by one point on each edge issuing from the origin.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The first Cartesian coordinate, regarded as an affine functional.
Equations
Instances For
The second Cartesian coordinate, regarded as an affine functional.
Equations
Instances For
A line through (a,0) lying strictly between the other two rays of the reference split.
Its second coefficient is chosen between a and a / b.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The three triangles produced when a line meets the two edges issuing from the origin of the standard triangle.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A three-term nonnegative affine combination belongs to the corresponding triangle.
Cartesian membership criterion for the standard closed triangle.
The three reference triangles cover exactly the standard triangle.
The reference line split preserves the support of the standard triangle.
The reference split through one vertex #
The referenceEdgeSplitPosition declaration.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two-triangle reference mesh used when the cutting line passes through vertex 2.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The point where the affine functional f vanishes along the oriented edge from p to q.
The useful case is f p > 0 > f q.
Equations
- LeanEval.Topology.ClassificationOfSurfaces.Moise.affineCutPoint f p q = (AffineMap.lineMap p q) (f p / (f p - f q))
Instances For
The transported split of an arbitrary triangle #
The ordered vertices of the standard triangle.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The parameter at which a line cuts the edge from the positive vertex to a negative vertex.
Equations
- LeanEval.Topology.ClassificationOfSurfaces.Moise.triangleCutParameter f p q = f p / (f p - f q)
Instances For
The reference split transported to an arbitrary ordered triangle. The first vertex is on the positive side of the line and the other two are on its negative side.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Coherent cut vertices for a finite mesh #
The maximal triangles, packaged with their membership proof.
Instances For
A proof-independent ordering of the three vertices of a maximal triangle.
Equations
Instances For
A proof-independent ordering of the three vertices of a maximal triangle.
Equations
- M.orderedVertex t i = ↑((M.triangleEquiv t).symm i)
Instances For
Ordered pairs of old vertices whose values under f have opposite signs. Both orientations
are retained; their geometric cut positions are equal and are deduplicated in refinementPoints.
Equations
- M.crossingPairs f = {uv ∈ Finset.univ ×ˢ Finset.univ | f (M.position uv.1) * f (M.position uv.2) < 0}
Instances For
The geometric zero of f on an oppositely signed pair of old vertices.
Equations
- M.pairCutPosition f u v = LeanEval.Topology.ClassificationOfSurfaces.Moise.affineCutPoint f (M.position u) (M.position v)
Instances For
All old vertex positions together with all possible cut positions. Using geometric points as the new vertex labels automatically identifies the cut computed from the two orientations of one edge, and the same edge as seen from its two incident triangles.
Equations
- M.refinementPoints f = Finset.image M.position Finset.univ ∪ Finset.image (fun (uv : M.Vertex × M.Vertex) => M.pairCutPosition f uv.1 uv.2) (M.crossingPairs f)
Instances For
Vertex type used by the coherent refinement.
Equations
- M.RefinedVertex f = ↥(M.refinementPoints f)
Instances For
An old vertex as a vertex of the coherent refinement.
Equations
- M.oldRefinedVertex f v = ⟨M.position v, ⋯⟩
Instances For
The cut point of an oppositely signed pair as a vertex of the coherent refinement.
Equations
- M.cutRefinedVertex f u v huv = ⟨M.pairCutPosition f u v, ⋯⟩
Instances For
Identifying the coherent vertex pools for f and -f; geometrically this is the identity.
Equations
- M.refinedVertexNegEquiv f = { toFun := fun (v : M.RefinedVertex (-f)) => ⟨↑v, ⋯⟩, invFun := fun (v : M.RefinedVertex f) => ⟨↑v, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }
Instances For
The five vertices of the strict +-- model in the coherent global vertex pool.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Geometric identification of the strict five-point list with the affine image of the reference split.
The strict local model embedded into the shared refinement vertex type.
Equations
- M.strictLocalEmbedding f t h0 h1 h2 = { toFun := M.strictModelVertex f t h0 h1 h2, inj' := ⋯ }
Instances For
The strict local split, now using the coherent global vertex pool.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The strict -++ local split, obtained by applying the +-- model to -f and identifying
the two coherent vertex pools.
Equations
- M.strictNegativeLocalMesh f t h0 h1 h2 = (M.strictLocalMesh (-f) t ⋯ ⋯ ⋯).reindex Subtype.val ⋯ (M.refinedVertexNegEquiv f).toEmbedding ⋯
Instances For
The same strict model for an arbitrary ordering of three vertices.
The strictVertices declaration.
Equations
- M.strictVertices f v h0 h1 h2 = ![M.oldRefinedVertex f (v 0), M.oldRefinedVertex f (v 1), M.oldRefinedVertex f (v 2), M.cutRefinedVertex f (v 0) (v 1) ⋯, M.cutRefinedVertex f (v 0) (v 2) ⋯]
Instances For
The strictVerticesEmbedding declaration.
Equations
- M.strictVerticesEmbedding f v hv h0 h1 h2 = { toFun := M.strictVertices f v h0 h1 h2, inj' := ⋯ }
Instances For
The strictMeshFor declaration.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The strictNegativeMeshFor declaration.
Equations
- M.strictNegativeMeshFor f v hv h0 h1 h2 = (M.strictMeshFor (-f) v hv ⋯ ⋯ ⋯).reindex Subtype.val ⋯ (M.refinedVertexNegEquiv f).toEmbedding ⋯
Instances For
The two-triangle model when vertex 2 lies on the cutting line.
The edgeModelPosition declaration.
Equations
Instances For
The edgeVertices declaration.
Equations
- M.edgeVertices f v h0 h1 = ![M.oldRefinedVertex f (v 0), M.oldRefinedVertex f (v 1), M.oldRefinedVertex f (v 2), M.cutRefinedVertex f (v 0) (v 1) ⋯]
Instances For
The edgeVerticesEmbedding declaration.
Equations
- M.edgeVerticesEmbedding f v hv h0 h1 = { toFun := M.edgeVertices f v h0 h1, inj' := ⋯ }
Instances For
The edgeMeshFor declaration.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The edgeNegativeMeshFor declaration.
Equations
- M.edgeNegativeMeshFor f v hv h0 h1 = (M.edgeMeshFor (-f) v hv ⋯ ⋯).reindex Subtype.val ⋯ (M.refinedVertexNegEquiv f).toEmbedding ⋯
Instances For
Choosing the local model from the signs #
A vertex ordering with one positive value followed by two negative values.
- perm : Equiv.Perm (Fin 3)
The
permdeclaration.
Instances For
A vertex ordering with one negative value followed by two positive values.
- perm : Equiv.Perm (Fin 3)
The
permdeclaration.
Instances For
A vertex ordering with one positive, one negative, and one zero value.
- perm : Equiv.Perm (Fin 3)
The
permdeclaration.
Instances For
A vertex ordering with one negative, one positive, and one zero value.
- perm : Equiv.Perm (Fin 3)
The
permdeclaration.
Instances For
The oldVerticesEmbedding declaration.
Equations
- M.oldVerticesEmbedding f v hv = { toFun := fun (i : Fin 3) => M.oldRefinedVertex f (v i), inj' := ⋯ }
Instances For
The unchangedMeshFor declaration.
Equations
- M.unchangedMeshFor f v hv = (LeanEval.Topology.ClassificationOfSurfaces.Moise.TriangleMesh.single (M.position ∘ v) hv).reindex Subtype.val ⋯ (M.oldVerticesEmbedding f v hv) ⋯
Instances For
The canonical local refinement mesh for one old triangle.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Every maximal triangle lies wholly on one closed side of the cutting line.
Equations
Instances For
Monochromaticity stated directly for triangles in the shared refined vertex pool.
Equations
- M.RefinedTrianglesMonochromatic f T = ∀ s ∈ T, (∀ x ∈ s, 0 ≤ f ↑x) ∨ ∀ x ∈ s, f ↑x ≤ 0
Instances For
The abstract three-triangle combinatorial pattern of a strict cut.
Equations
Instances For
The abstract two-triangle combinatorial pattern of a cut through vertex 2.
Equations
Instances For
The old vertex numbered i in a triangle, regarded as a refined vertex.
Equations
- M.localOldVertex f t i = M.oldRefinedVertex f (M.orderedVertex t i)
Instances For
The cut vertex on the pair of locally numbered vertices i,j.
Equations
- M.localCutVertex f t i j hij = M.cutRefinedVertex f (M.orderedVertex t i) (M.orderedVertex t j) hij
Instances For
Canonical local triangulation after cutting one old triangle by f. There are three
triangles when one vertex is strictly separated from the other two, two triangles when the line
passes through one vertex and cuts the opposite edge, and the old triangle when the line already
meets it in a face.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Cutting one old triangle by an affine line produces triangles contained in the two closed half-planes.
View a mesh whose vertex type is identified with the refined vertex pool as a family of triangles on that fixed pool.
Equations
- M.refinedMeshTriangles f N h = h ▸ N.triangles
Instances For
The maximal triangles selected by the certified local model, exposed on the fixed shared vertex pool.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A vertex used by a local line refinement is either an old vertex of its parent triangle or lies on the cutting line.
Barycentric traces on old parent edges #
The barycentric coordinate opposite the k-th edge of an old triangle.
Equations
Instances For
The two old geometric vertices of the edge opposite k.
Equations
- M.oppositeEdgePoints t k = Finset.image (M.position ∘ M.orderedVertex t) (Finset.univ.erase k)
Instances For
Vertices of a child triangle lying on the old edge opposite k.
Equations
- M.childEdgeTrace f t k s = {v ∈ s | (M.oppositeCoord t k) ↑v = 0}
Instances For
The finite one-dimensional calculation behind compatibility on a cut edge.
The cutting line contains no old edge of the mesh.
Equations
- M.TransverseToEdges f = ∀ (t : M.Triangle) (i j : Fin 3), i ≠ j → ¬(f (M.position (M.orderedVertex t i)) = 0 ∧ f (M.position (M.orderedVertex t j)) = 0)
Instances For
A nonnegative affine functional vanishing only at the i-th old vertex.
Equations
Instances For
All maximal triangles of the coherent line refinement.
Equations
- M.lineRefinementTriangles f = Finset.univ.biUnion fun (t : M.Triangle) => M.localMeshTriangles f t
Instances For
Subdivision of a finite triangle mesh by one affine line transverse to its old edges.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Cutting every triangle of a mesh by one affine line gives a subdivision of the original plane complex.
Successively subdivide a mesh by a finite list of affine lines.
Equations
- x✝.refineByLines [] = x✝
- x✝.refineByLines (g :: gs) = (x✝.lineRefinementMesh g).refineByLines gs
Instances For
Successive line cuts remain a subdivision of the original mesh.