diff options
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.lua | 149 |
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 ------------------------------ |