summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua')
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua72
1 files changed, 53 insertions, 19 deletions
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
index c2802cd41f..310b522788 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/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