modules¶
geometor.durer¶
GEOMETOR Dürer: Exact symbolic constructions & bilingual codex for Underweysung der Messung (1525).
Provides 100% exact SymPy + geometor.model constructions across all Four Books (Vier Bücher)
of Albrecht Dürer’s Underweysung der Messung, mit dem Zirckel un[d] Richtscheyt, in Linien Ebnen
unnd gantzen Corporen (Nuremberg, 1525; 2nd ed. 1538; Camerarius Latin ed. 1532):
Book I (
geometor.durer.conics_perspective): 12-sector Archimedean spirals (Schneckenlinien) and two-view descriptive geometry of conic sections (Elipsis / Eierlini, Parabola / Brennspiegellini, Hiperbole / Gabellini).Book II (
geometor.durer.polygons): Exact comparison of Dürer’s Single-Aperture (“Rusty Compass”) Pentagon with Euclid’sQ(phi)regular pentagon, plus cubic-impossibility and quadrature audits for workshop7-,11-, and13-gons andpi = 25/8.Book III (
geometor.durer.typography): Compass-and-straightedge Roman Antiqua capitals (A,O,Q) in the10 x 10square and modular Gothic Textura minuscules.Book IV (
geometor.durer.polyhedra,geometor.durer.conics_perspective): Planar fold-out polyhedral nets for Platonic & Archimedean solids, Delian cube duplication, and central perspective projection onto the glass picture plane.
Submodules¶
Attributes¶
Classes¶
Single cross-corpus concordance link from Dürer's Underweysung to GEOMETOR. |
|
Loaded JSON apparatus registries for |
|
Exact symbolic audit of Dürer's Book I two-view orthographic conic sections (Figs. 34–37). |
|
Symbolic verification of Plato's / Sporus's two-mean-proportionals cube duplication. |
|
Exact rational perspective projection of a 3D cube onto Dürer's Book IV glass frame. |
|
Exact 12-sector Archimedean spiral (Schneckenlini, Book I, Figs. 7 & 17) over |
|
Exact symbolic construction & cubic-impossibility audit for Dürer's Book II heptagon. |
|
Exact symbolic result comparing Dürer's single-aperture pentagon with Euclid's pentagon. |
|
Exact algebraic vs. trigonometric audit for one of Dürer's Book II workshop rules. |
|
Historical & combinatorial catalog entry for Dürer's Book IV solids (Figs. 29–43). |
|
Single regular polygon face in an unfolded 2D planar polyhedral net. |
|
Exact 2D planar fold-out net for a Platonic or Archimedean polyhedron. |
|
Exact symbolic construction of Dürer's Roman Antiqua capital |
|
Exact symbolic construction of Dürer's Roman Antiqua |
|
Exact modular construction of Dürer's Gothic Textura minuscules |
Functions¶
|
Locate |
|
Load all five JSON apparatus files from |
|
Construct Dürer's Book I elevation + ground-plan + true-section diagram for the ellipse. |
|
Project a 3D cube in |
|
Construct Dürer's Book I Archimedean spiral over |
|
Construct Dürer's workshop regular heptagon in the unit circle and audit its cubic residual. |
|
Construct Dürer's single-aperture pentagon and Euclid's exact pentagon on base |
|
Construct all 6 exact symbolic planar polyhedral nets from Dürer's Book IV. |
|
Populate a |
|
Write |
|
Generate all 10 interactive |
|
Serialize a |
|
Construct Dürer's Roman capital |
|
Construct Dürer's Roman capital |
|
Construct Dürer's Roman capital |
|
Construct Dürer's modular Textura minuscules |
Package Contents¶
- class geometor.durer.ConcordanceEntry¶
Single cross-corpus concordance link from Dürer’s Underweysung to GEOMETOR.
- id: str¶
- book: int¶
- unit: str¶
- durer_locus: str¶
- german_term: str¶
- latin_1532_term: str¶
- english_title: str¶
- classification: str¶
- sister_repos: tuple[str, ...]¶
- algebraic_field: str¶
- summary: str¶
- class geometor.durer.UnderweysungApparatus¶
Loaded JSON apparatus registries for
resources/underweysung/.- sources_manifest: dict[str, Any]¶
- concordance: tuple[ConcordanceEntry, ...]¶
- persons: dict[str, dict[str, Any]]¶
- citations: dict[str, dict[str, Any]]¶
- glossary: dict[str, dict[str, Any]]¶
- geometor.durer.default_resources_dir() pathlib.Path¶
Locate
resources/underweysung/relative to the repository root.
- geometor.durer.load_apparatus(resources_dir: str | pathlib.Path | None = None) UnderweysungApparatus¶
Load all five JSON apparatus files from
resources/underweysung/.
- class geometor.durer.ConicSectionsResult¶
Exact symbolic audit of Dürer’s Book I two-view orthographic conic sections (Figs. 34–37).
- model: geometor.model.Model¶
- cone_radius: sympy.Integer¶
- cone_height: sympy.Integer¶
- ellipse_stations: tuple[tuple[int, sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr], ...]¶
- ellipse_semi_major: sympy.Expr¶
- ellipse_semi_minor: sympy.Expr¶
- ellipse_focal_distance: sympy.Expr¶
- ellipse_eccentricity: sympy.Expr¶
- ellipse_bilateral_symmetry_verified: bool¶
- parabola_focal_length: sympy.Expr¶
- hyperbola_semi_transverse: sympy.Integer¶
- hyperbola_semi_conjugate: sympy.Integer¶
- class geometor.durer.DelianCubeCertificate¶
Symbolic verification of Plato’s / Sporus’s two-mean-proportionals cube duplication.
- given_g: sympy.Expr¶
- given_e: sympy.Expr¶
- first_mean_c: sympy.Expr¶
- second_mean_d: sympy.Expr¶
- volume_ratio: sympy.Expr¶
- proportion_verified: bool¶
- class geometor.durer.PerspectiveApparatusResult¶
Exact rational perspective projection of a 3D cube onto Dürer’s Book IV glass frame.
- model: geometor.model.Model¶
- eye_3d: tuple[sympy.Integer, sympy.Integer, sympy.Integer]¶
- picture_plane_x: sympy.Integer¶
- vanishing_point: sympy.geometry.Point¶
- cube_vertices_3d: dict[str, tuple[sympy.Integer, sympy.Integer, sympy.Integer]]¶
- projected_vertices_2d: dict[str, sympy.geometry.Point]¶
- harmonic_cross_ratio_3d: sympy.Rational¶
- harmonic_cross_ratio_2d: sympy.Expr¶
- cross_ratio_invariant_verified: bool¶
- delian_cube: DelianCubeCertificate¶
- class geometor.durer.SpiralVoluteResult¶
Exact 12-sector Archimedean spiral (Schneckenlini, Book I, Figs. 7 & 17) over
Q(sqrt(3)).- model: geometor.model.Model¶
- center: sympy.geometry.Point¶
- outer_radius: sympy.Integer¶
- sector_count: int¶
- spiral_points: tuple[sympy.geometry.Point, ...]¶
- radii: tuple[sympy.Expr, ...]¶
- geometor.durer.construct_durer_conic_sections(model: geometor.model.Model | None = None) ConicSectionsResult¶
Construct Dürer’s Book I elevation + ground-plan + true-section diagram for the ellipse.
Also computes exact focal and asymptotic invariants for Dürer’s Parabola (Brennspiegellini) and Hiperbole (Gabellini).
- geometor.durer.construct_durer_perspective_apparatus(model: geometor.model.Model | None = None) PerspectiveApparatusResult¶
Project a 3D cube in
Q^3onto Dürer’s picture planex = 0from eyeE(-12, 3, 5).Verifies:
Exact rational screen coordinates
(y', z') in Q^2for all 8 cube vertices.Exact convergence of all 4 depth edges at principal vanishing point
V_x = (3, 5).Exact projective cross-ratio invariance
CR(P4', P8'; P6', V_x) = -1(harmonic range!).Exact algebraic verification of Plato’s / Sporus’s two mean proportionals (Book IV, Fig. 50) for doubling the cube (
g = 1, e = 2 => c = 2^(1/3), d = 2^(2/3), c^3 = 2).
- geometor.durer.construct_durer_spiral_volute(turns: int = 2, model: geometor.model.Model | None = None) SpiralVoluteResult¶
Construct Dürer’s Book I Archimedean spiral over
Q(sqrt(3))using 12 angular sectors.Dürer divides the outer circle into 12 radial rays (
1..12, every30°) and divides the outer radiusR = 12into12 * turnsequal radial stepsr_k = k / turns, plottingP_k = (r_k * cos(k * 30°), r_k * sin(k * 30°))with 100% exact coordinates inQ(sqrt(3)).
- geometor.durer.PHI: sympy.Expr¶
- class geometor.durer.HeptagonWorkshopReport¶
Exact symbolic construction & cubic-impossibility audit for Dürer’s Book II heptagon.
- model: geometor.model.Model¶
- center: sympy.geometry.Point¶
- circumcircle: sympy.geometry.Circle¶
- equilateral_chord_top: sympy.geometry.Point¶
- equilateral_chord_bottom: sympy.geometry.Point¶
- radius_midpoint: sympy.geometry.Point¶
- workshop_vertices: tuple[sympy.geometry.Point, ...]¶
- durer_chord_quadrance: sympy.Rational¶
- minimal_polynomial_expr: sympy.Expr¶
- minimal_polynomial_at_durer: sympy.Rational¶
- eisenstein_prime: int¶
- quadrature_circle_diameter_over_side: sympy.Expr¶
- quadrature_implied_pi: sympy.Rational¶
- workshop_catalog: tuple[WorkshopPolygonEntry, ...]¶
- class geometor.durer.PentagonComparisonResult¶
Exact symbolic result comparing Dürer’s single-aperture pentagon with Euclid’s pentagon.
- model: geometor.model.Model¶
- base_a: sympy.geometry.Point¶
- base_b: sympy.geometry.Point¶
- durer_vertices: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]¶
- euclid_vertices: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]¶
- durer_aux_points: dict[str, sympy.geometry.Point]¶
- durer_side_quadrances: tuple[sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr]¶
- euclid_side_quadrances: tuple[sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr]¶
- euclid_diagonal_quadrance: sympy.Expr¶
- durer_base_diagonal_quadrance: sympy.Expr¶
- durer_shoulder_diagonal_quadrance: sympy.Expr¶
- durer_base_spread: sympy.Expr¶
- euclid_base_spread: sympy.Expr¶
- durer_equilateral: bool¶
- durer_equiangular: bool¶
- euclid_regular: bool¶
- property durer_base_interior_deg: float¶
Numerical evaluation (degrees) of Dürer’s interior angle at A and B.
- property base_angle_error_deg: float¶
Signed error (degrees) of Dürer’s base interior angle relative to exact 108°.
- property base_angle_error_arcmin: float¶
Signed error (arcminutes) of Dürer’s base interior angle relative to exact 108°.
- class geometor.durer.WorkshopPolygonEntry¶
Exact algebraic vs. trigonometric audit for one of Dürer’s Book II workshop rules.
- n_sides: int¶
- durer_label: str¶
- classification: str¶
- exact_chord_over_r: sympy.Expr¶
- exact_quadrance_over_r2: sympy.Expr¶
- true_chord_over_r_float: float¶
- relative_chord_error: float¶
- central_angle_durer_deg: float¶
- central_angle_true_deg: float¶
- geometor.durer.construct_durer_heptagon_workshop(model: geometor.model.Model | None = None) HeptagonWorkshopReport¶
Construct Dürer’s workshop regular heptagon in the unit circle and audit its cubic residual.
In Book II, Figs. 11 & 15, Dürer sets the heptagon chord equal to the half-side of the inscribed equilateral triangle:
s_7 = sqrt(3)/2 * R(Q_Durer = 3/4forR = 1). The true regular heptagon chord quadranceQ_7 = 2*(1 - cos(2*pi/7))is a root of the Eisenstein-irreducible cubicP_7(q) = q^3 - 7*q^2 + 14*q - 7 = 0, yielding the exact non-zero rational residualP_7(3/4) = -1/64.
- geometor.durer.construct_durer_vs_euclid_pentagon(model: geometor.model.Model | None = None) PentagonComparisonResult¶
Construct Dürer’s single-aperture pentagon and Euclid’s exact pentagon on base
AB.- Parameters:
model (Model | None) – Optional existing
geometor.model.Model(created withauto_intersect=Falseif omitted).- Returns:
Exact symbolic coordinates, quadrances, spreads, and regularity audit.
- Return type:
- geometor.durer.DURER_BOOK4_SOLIDS_CATALOG: tuple[Book4SolidCatalogEntry, ...]¶
- class geometor.durer.Book4SolidCatalogEntry¶
Historical & combinatorial catalog entry for Dürer’s Book IV solids (Figs. 29–43).
- figure_num: int¶
- slub_page: int¶
- german_name_1525: str¶
- english_name: str¶
- family: str¶
- vertex_config: str¶
- vertices: int¶
- edges: int¶
- faces: int¶
- face_summary: str¶
- class geometor.durer.PolyhedralFace¶
Single regular polygon face in an unfolded 2D planar polyhedral net.
- face_id: str¶
- n_gon: int¶
- vertices: tuple[tuple[sympy.Expr, sympy.Expr], ...]¶
- class geometor.durer.PolyhedralNet¶
Exact 2D planar fold-out net for a Platonic or Archimedean polyhedron.
- key: str¶
- title: str¶
- durer_figure: str¶
- family: str¶
- algebraic_field: str¶
- vertices_3d: int¶
- edges_3d: int¶
- faces_3d: int¶
- faces: tuple[PolyhedralFace, ...]¶
- fold_edges: tuple[tuple[tuple[sympy.Expr, sympy.Expr], tuple[sympy.Expr, sympy.Expr]], ...]¶
- cut_edges: tuple[tuple[tuple[sympy.Expr, sympy.Expr], tuple[sympy.Expr, sympy.Expr]], ...]¶
- unit_edge_verified: bool¶
- euler_characteristic: int¶
- seam_count_verified: bool¶
- non_overlapping_verified: bool¶
- geometor.durer.construct_durer_polyhedral_nets() dict[str, PolyhedralNet]¶
Construct all 6 exact symbolic planar polyhedral nets from Dürer’s Book IV.
- Returns:
Mapping from
'tetrahedron','cube','octahedron','dodecahedron','icosahedron', and'cuboctahedron'to verified exact planar nets.- Return type:
dict[str, PolyhedralNet]
- geometor.durer.polyhedral_net_to_model(net: PolyhedralNet, model: geometor.model.Model | None = None) geometor.model.Model¶
Populate a
geometor.model.Modelwith exact vertices, face polygons, and fold/cut seams.
- geometor.durer.EMBEDDED_SVG_STYLE: str = ''¶
- geometor.durer.export_svg(svg_text: str, output_path: str | pathlib.Path) pathlib.Path¶
Write
svg_texttooutput_pathcreating parent directories if needed.
- geometor.durer.generate_all_codex_figures(output_dir: str | pathlib.Path) list[pathlib.Path]¶
Generate all 10 interactive
.euclid-graphicSVG figures fordocsrc/_static/figures/.
- geometor.durer.render_model_svg(model: geometor.model.Model, *, width: int = 760, height: int = 560, padding: float = 48.0, math_bounds: tuple[float, float, float, float] | None = None, labeled_keys: dict[str, str] | None = None, extra_annotations: list[tuple[float, float, str]] | None = None, show_lines: bool = True, show_unlabeled_points: bool = False) str¶
Serialize a
Modelinto a crisp.euclid-graphicSVG string.
- class geometor.durer.RomanLetterAResult¶
Exact symbolic construction of Dürer’s Roman Antiqua capital
Ain a10 x 10square.- model: geometor.model.Model¶
- square_corners: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]¶
- thick_stroke: sympy.Integer¶
- thin_stroke: sympy.Rational¶
- outer_serif_radius: sympy.Rational¶
- inner_serif_radius: sympy.Rational¶
- counter_triangle: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]¶
- crossbar_quad: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]¶
- serif_centers: dict[str, sympy.geometry.Point]¶
- class geometor.durer.RomanLetterOQResult¶
Exact symbolic construction of Dürer’s Roman Antiqua
OorQin a10 x 10square.- letter: str¶
- model: geometor.model.Model¶
- square_corners: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]¶
- center_i: sympy.geometry.Point¶
- shifted_center_f: sympy.geometry.Point¶
- shifted_center_g: sympy.geometry.Point¶
- bowl_radius: sympy.Expr¶
- circle_f: sympy.geometry.Circle¶
- circle_g: sympy.geometry.Circle¶
- crossover_points: tuple[sympy.geometry.Point, sympy.geometry.Point]¶
- tail_points: tuple[sympy.geometry.Point, ...]¶
- class geometor.durer.TexturaMinusculesResult¶
Exact modular construction of Dürer’s Gothic Textura minuscules
i,n,m.- model: geometor.model.Model¶
- stem_width: sympy.Integer¶
- stacked_square_count: int¶
- diamond_side: sympy.Expr¶
- glyph_polygons: dict[str, list[tuple[tuple[sympy.Expr, sympy.Expr], ...]]]¶
- geometor.durer.construct_durer_roman_letter_A(model: geometor.model.Model | None = None) RomanLetterAResult¶
Construct Dürer’s Roman capital
Ainside the10 x 10squareABCD.Dürer labels the framing square (rechte fierung)
atop-left(0, 10),btop-right(10, 10),cbottom-left(0, 0),dbottom-right(10, 0), with midlinesef(vertical) andgh(horizontal), thick stroke1(1/10of10), thin stroke1/3, outer foot serifs of radius10/7, and inner foot serifs of radius1/2.
- geometor.durer.construct_durer_roman_letter_O(model: geometor.model.Model | None = None) RomanLetterOQResult¶
Construct Dürer’s Roman capital
Oinside the10 x 10square.
- geometor.durer.construct_durer_roman_letter_Q(model: geometor.model.Model | None = None) RomanLetterOQResult¶
Construct Dürer’s Roman capital
Qinside the10 x 10square.
- geometor.durer.construct_durer_textura_minuscules(model: geometor.model.Model | None = None) TexturaMinusculesResult¶
Construct Dürer’s modular Textura minuscules
i,n, andmfrom unit squares.In Book III (p. 136), Dürer constructs
ifirst because nearly the entire Gothic minuscule alphabet is generated combinatorially from its modular stem. Forn(two stems) andm(three stems), adjacent stems touch corner-to-corner at their45°diamond caps! Wait: look at the spacing when adjacent top diamonds touch corner-to-corner: Top diamond of stem 1 has right corner atx0 + 1/3 + sqrt(2)/2and left corner atx0 + 1/3 - sqrt(2)/2, so corner-to-corner contact spaces consecutive stems by exact pitchsqrt(2)(leaving interior counter gapsqrt(2) - 1 ≈ 0.414 < 1, matching Dürer’s exact words: “so wirt das felt schlemer zwischen den zügen dann ein zug des pustaben preyt ist”!).
- geometor.durer.__version__ = '0.1.0'¶