-- tkz_elements_functions_points.lua -- date 2025/03/04 -- version 3.34c -- 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. function id() for i, k in pairs(z) do if _G[i] == k then else _G[i] = k end end end function polar_(radius, phi) return point(radius * math.cos(phi), radius * math.sin(phi)) end function polar(radius, phi) return polar_(radius, phi) end function polar_deg(radius, phi) return polar_(radius, phi * math.pi / 180) end function barycenter_(...) local cp = table.pack(...) local sum = 0 local weight = 0 for i = 1, cp.n do sum = sum + cp[i][1] * cp[i][2] weight = weight + cp[i][2] end return sum / weight end function rotation_(c, a, pt) local z = point(math.cos(a), math.sin(a)) return z * (pt - c) + c end -- Define the set_rotation_ function function set_rotation_(c, angle, ...) local tp = table.pack(...) local t = {} for i = 1, tp.n do table.insert(t, rotation_(c, angle, tp[i])) end return table.unpack(t) end function symmetry_(c, pt) return 2 * c - pt end function set_symmetry_(c, ...) local tp = table.pack(...) local t = {} for i = 1, tp.n do table.insert(t, symmetry_(c, tp[i])) end return table.unpack(t) end function homothety_(c, t, p) return c + t * (p - c) end function set_homothety_(c, coeff, ...) local tp = table.pack(...) local t = {} for i = 1, tp.n do table.insert(t, homothety_(c, coeff, tp[i])) end return table.unpack(t) end function translation_(a, p) return a + p end function set_translation_(u, ...) local tp = table.pack(...) local t = {} for i = 1, tp.n do table.insert(t, (u + tp[i])) end return table.unpack(t) end function random_point_(lower, upper) math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 6))) x = math.random(lower, upper) y = math.random(lower, upper) return point(x, y) end function midpoints_(...) local arg = table.pack(...) local n = arg.n local t = {} for i = 1, n - 1 do table.insert(t, (arg[i] + arg[i + 1]) / 2) end table.insert(t, (arg[n] + arg[1]) / 2) return table.unpack(t) end