-- tkz_elements_parallelogram.lua -- date 2025/05/25 -- version 4.00c -- Copyright 2025 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 -- of this license or (at your option) any later version. -- The latest version of this license is in -- http://www.latex-project.org/lppl.txt -- and version 1.3 or later is part of all distributions of LaTeX -- version 2005/12/01 or later. -- This work has the LPPL maintenance status “maintained”. -- The Current Maintainer of this work is Alain Matthes. --------------------------------------------------------------------------- -- Parallelogram --------------------------------------------------------------------------- parallelogram = {} parallelogram.__index = parallelogram function parallelogram:new(za, zb, zc, zd) local d local zi = midpoint_(za, zc) local zj = midpoint_(zb, zd) if point.abs(zj - zi) < tkz_epsilon then else tex.error("it's not a parallelogram") end local type = "parallelogram" local center = midpoint_(za, zc) local ab = line:new(za, zb) local bc = line:new(zb, zc) local cd = line:new(zc, zd) local da = line:new(zd, za) local ac = line:new(za, zc) local bd = line:new(zb, zd) local o = { pa = za, pb = zb, pc = zc, pd = zd, ab = ab, ac = ac, bc = bc, da = da, cd = cd, bd = bd, center = center, type = type, } setmetatable(o, self) return o end setmetatable(parallelogram, { __call = function(cls, ...) return cls:new(...) end }) function parallelogram:get() return self.pa, self.pb, self.pc, self.pd end function parallelogram:fourth(za, zb, zc) local zd = zc + (za - zb) return parallelogram:new(za, zb, zc, zd) end return parallelogram