summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
blob: 63f5190f0238255152c9514f0fcf67a6f2518ffd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
-- tkz_elements_functions_maths.lua
-- 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
-- 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.

-- constant
tkzphi      = (1+math.sqrt(5))/2
tkzinvphi   = (math.sqrt(5)-1)/2
tkzsqrtphi  =  math.sqrt(tkzphi)
---------------------------------------------------------------------------
function round(num, idp)
  return topoint(string.format("%." .. (idp or 0) .. "f", num))
end

function tkzround( num, idp )
	local mult = 10 ^ ( idp or 0 )
	return math.floor( num * mult + 0.5 ) / mult
end  

function dot_product (a,b,c)
   return (b-a)..(c-a)
end

function Cramer33(a1,a2,a3,b1,b2,b3,c1,c2,c3)
  return a1*b2*c3+a3*b1*c2+a2*b3*c1-a3*b2*c1-a1*b3*c2-a2*b1*c3
end

function Cramer22(a1,a2,b1,b2)
  return a1*b2-a2*b1
end

function aligned ( m,a,b )
    local z
    z = (b-a)/(m-b)
      if math.abs(z.im) < tkz_epsilon
        then
            return true
        else
            return false
        end
end 

function islinear (z1,z2,z3)
     local dp
    dp = (z2-z1) ^ (z3-z1)
    if math.abs(dp) < tkz_epsilon 
    then 
        return true
    else 
        return false
    end
end

function isortho (z1,z2,z3)
   local dp
   dp = (z2-z1) .. (z3-z1)
   if math.abs(dp) < tkz_epsilon 
    then 
        return true
    else 
        return false
    end
end

function parabola (a,b,c)
   local xa,xb,xc,ya,yb,yc
   xa = a.re
   ya = a.im
   xb = b.re
   yb = b.im
   xc = c.re
   yc = c.im
   D = (xa-xb)*(xa-xc)*(xb-xc)
   A = (xc*(yb-ya) + xb*(ya-yc)+xa*(yc-yb))/D
   B = (xc*xc*(ya-yb)+xb*xb*(yc-ya)+xa*xa*(yb-yc))/D
   C = (xb*xc*(xb-xc)*ya + xc*xa*(xc-xa)*yb +xa*xb*(xa-xb)*yc)/D
   return A,B,C
end

function value (v)
   return scale * v
end

function real (v)
   return v/scale
end

function get_angle (a,b,c)
  return angle_normalize_(get_angle_( a,b,c ))
end 
   
function get_angle_( a,b,c )
	 return point.arg ((c-a)/(b-a))
end

function angle_normalize (a)
return angle_normalize_ (a)
end

function angle_normalize_ (a)
    while a < 0 do
        a = a + 2*math.pi
    end
    while a >= 2*math.pi do
        a = a - 2*math.pi
    end
    return a
end

function barycenter (...)
   return barycenter_ (...)
end

function swap(a,b)
   local t=a
   a=b
   b=t
   return a,b
end

function format_number(number, decimal_places)
    local format_string = string.format("%%.%df", decimal_places)
    return string.format(format_string, number)
end