diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua')
-rw-r--r-- | Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua | 72 |
1 files changed, 53 insertions, 19 deletions
diff --git a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua index c2802cd41fc..310b522788e 100644 --- a/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua +++ b/Master/texmf-dist/tex/latex/tkz-elements/tkz_elements_vector.lua @@ -1,6 +1,6 @@ -- tkz_elements_vectors.lua --- date 2024/01/16 --- version 1.82c +-- date 2024/02/04 +-- version 2.00c -- Copyright 2024 Alain Matthes -- This work may be distributed and/or modified under the -- conditions of the LaTeX Project Public License, either version 1.3 @@ -14,33 +14,67 @@ -- ---------------------------------------------------------------------------- vector = {} -function vector: new(z1, z2) - local type = 'vector' - local norm = point.abs (z2-z1) - local arg = point.arg (z2-z1) - local o = {st = z1, - ed = z2, - norm = norm, - arg = arg, - type = type } +function vector: new(za, zb) + local type = 'vector' + local slope = angle_normalize_(point.arg(zb-za)) + local norm = point.mod(zb-za) + local o = {t = za, + h = zb, + norm = norm, + slope = slope, + type = type } setmetatable(o, self) self.__index = self return o end +function vector.__add(v1,v2) + return v1 : add (v2) +end + +function vector.__sub(v1,v2) + local v = v2 : scale(-1) + return v1 : add (v) +end + +function vector.__unm(v) + return v : scale(-1) +end + +function vector.__mul(r,v) + return v : scale(r) +end + function vector: normalize () - local z = self.ed-self.st + local z = self.h-self.t local d = point.abs(z) local nz = point(z.re/d,z.im/d) - return nz + self.st + return vector : new (self.t,nz + self.t) end - function vector: add (v) - return vector :new (self.st+v.st, self.ed,v.ed) - end + function vector: add (ve) + return vector :new (self.t,self.h+ve.h-ve.t) + end - function vector: ortho () - return vector : new (self.st, rotation_(self.st,math.pi/2,self.ed)) - end +function vector: orthogonal (d) +local z +if d == nil then + return vector : new (self.t, rotation_(self.t,math.pi/2,self.h)) +else + z = self.t+ point (d*math.cos(self.slope),d*math.sin(self.slope)) + return vector : new (self.t, rotation_(self.t,math.pi/2,z)) +end +end + +function vector: scale (d) + local l,z + l = self.norm + z = self.t+ point (d*l*math.cos(self.slope),d*l*math.sin(self.slope)) + return vector : new (self.t,z ) +end +function vector: at (zc) + return vector :new (zc,zc+self.h-self.t) +end + return vector |