summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua')
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua149
1 files changed, 128 insertions, 21 deletions
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
index 1143659bfb..1e45a544db 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
@@ -1,7 +1,7 @@
-- tkz_elements_lines.lua
--- date 23/12/24
--- version 1.72c
--- Copyright 2023 Alain Matthes
+-- date 2024/01/16
+-- version 1.82c
+-- 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
-- of this license or (at your option) any later version.
@@ -51,6 +51,10 @@ function line: distance (pt)
return point.mod(projection(self,pt)-pt)
end
+function length(a,b)
+ return point.abs (a-b)
+end
+
function line: slope ()
return slope_(self.pa,self.pb)
end
@@ -118,6 +122,36 @@ end
function line: normalize_inv ()
return normalize_ (self.pb,self.pa)
end
+
+function line: _east (d)
+ local d = d or 1
+ return self.pb+ d/self.length * (self.pb-self.pa)
+end
+
+function line: _west (d)
+ local d = d or 1
+ return self.pa+ d/self.length * (self.pa-self.pb)
+end
+
+function line: _north_pa (d)
+ local d = d or 1
+ return d/self.length * ( self.north_pa - self.pa ) + self.pa
+end
+
+function line: _south_pa (d)
+ local d = d or 1
+ return d/self.length *( self.south_pa - self.pa ) + self.pa
+end
+
+function line: _south_pb (d)
+ local d = d or 1
+ return d/self.length *( self.south_pb - self.pb ) + self.pb
+end
+
+function line: _north_pb (d)
+ local d = d or 1
+ return d/self.length *( self.north_pb - self.pb ) + self.pb
+end
-------------- transformations -------------
function line: translation_pt ( pt )
return translation_ ( self.pb-self.pa,pt )
@@ -262,7 +296,7 @@ function line: ll_from ( pt )
end
function line: ortho_from ( pt )
- return line : new (pt,pt+(self.pb-self.pa)*point(0,1))
+ return line : new (pt+(self.pb-self.pa)*point(0,-1),pt+(self.pb-self.pa)*point(0,1))
end
function line: mediator ()
@@ -304,12 +338,10 @@ function line: equilateral (swap)
if swap then
return triangle : new (self.pa,self.pb,rotation_ (self.pa,-math.pi/3,self.pb))
else
- return triangle : new (self.pa,self.pb,rotation_ (self.pa,math.pi/3,self.pb))
-
+ return triangle : new (self.pa,self.pb,rotation_ (self.pa,math.pi/3,self.pb))
end
end
-
function line: isosceles (phi,swap)
local pta,ptb
if swap == nil then
@@ -324,9 +356,55 @@ function line: isosceles (phi,swap)
ptb = rotation_ (self.pb,-phi,self.pa)
return triangle : new (self.pa,self.pb, intersection_ll_ (self.pa,pta,self.pb,ptb ))
end
-
end
+function line: two_angles (alpha,beta)
+ local pta,ptb,pt
+ pta = rotation_ (self.pa,alpha,self.pb)
+ ptb = rotation_ (self.pb,-beta,self.pa)
+ pt = intersection_ll_ (self.pa,pta,self.pb,ptb)
+ return triangle : new (self.pa,self.pb,pt)
+end
+
+function line: school ()
+ local pta,ptb,pt
+ pta = rotation_ (self.pa,math.pi/6,self.pb)
+ ptb = rotation_ (self.pb,-math.pi/3,self.pa)
+ pt = intersection_ll_ (self.pa,pta,self.pb,ptb)
+ return triangle : new (self.pa,self.pb,pt)
+end
+
+function line: half ()
+ local x,pt
+ x = midpoint_(self.pa,self.pb)
+ pt = rotation_ (self.pb,-math.pi/2,x)
+ return triangle : new (self.pa,self.pb,pt)
+end
+
+function line: sss (a,b)
+ local pta,ptb,i,j
+ pta = self.pa + point ( a, 0 )
+ ptb = self.pb + point ( -b , 0)
+ i,j = intersection_cc_ (self.pa,pta,self.pb,ptb)
+ return triangle : new (self.pa,self.pb,i),triangle : new (self.pa,self.pb,j)
+end
+
+function line: ssa (a,phi)
+ local x,y,pt
+ x = rotation_ (self.pb,-phi,self.pa)
+ y = self.pa + polar_ ( a , self.slope)
+ i,j = intersection_lc_ (self.pb,x,self.pa,y)
+ return triangle : new (self.pa,self.pb,i),triangle : new (self.pa,self.pb,j)
+end
+
+function line: sas (a,phi)
+ local x,pt
+ x = self.pa + polar_ ( a , self.slope)
+ pt = rotation_ (self.pa,phi,x)
+ return triangle : new (self.pa,self.pb,pt)
+end
+---- sacred triangles ----
+
function line: gold (swap)
local pt
if swap == nil then
@@ -341,6 +419,16 @@ else
end
end
+function line: sublime ()
+ local pta,ptb,pt
+ pta = rotation_ (self.pa,2*math.pi/5,self.pb)
+ ptb = rotation_ (self.pb,-2*math.pi/5,self.pa)
+ pt = intersection_ll_ (self.pa,pta,self.pb,ptb)
+ return triangle : new (self.pa,self.pb,pt)
+end
+
+line.euclid = line.sublime
+
function line: euclide (swap)
if swap == nil then
swap = false
@@ -352,20 +440,39 @@ else
end
end
-function line: golden (swap)
- local pt
- local pta,ptb
- if swap == nil then
- swap = false
- end
-if swap then
- pt = rotation_ (self.pa,-2*math.pi/5,self.pb)
- return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzphi)
-else
- pt = rotation_ (self.pa,2*math.pi/5,self.pb)
- return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzphi)
- end
+function line: divine ()
+ local pta,ptb,pt,h
+ pta = rotation_ (self.pa,math.pi/5,self.pb)
+ ptb = rotation_ (self.pb,-math.pi/5,self.pa)
+ pt = intersection_ll_ (self.pa,pta,self.pb,ptb)
+ return triangle : new (self.pa,self.pb,pt)
+end
+
+function line: cheops ()
+ local m,n,pt
+ m = midpoint_ (self.pa,self.pb)
+ n = rotation_ (m,- math.pi/2,self.pa)
+ pt = m + (n-m)* tkzsqrtphi
+ return triangle : new (self.pa,self.pb,pt)
end
+
+function line: egyptian ()
+ local n,pt
+ n = rotation_ (self.pb,- math.pi/2,self.pa)
+ pt = self.pb + (n-self.pb)/point.mod(n-self.pb)*self.length* 0.75
+ return triangle : new (self.pa,self.pb,pt)
+end
+line.pythagoras = line.egyptian
+line.isis = line.egyptian
+
+function line: golden ()
+ local n,pt
+ n = rotation_ (self.pb,- math.pi/2,self.pa)
+ pt = self.pb + (n-self.pb)/tkzphi
+ return triangle : new (self.pa,self.pb,pt)
+end
+
+
------------------------------
-- Result -> couple of points
------------------------------