22import numpy as np
33import pandas as pd
44
5- def ellipse_function (lateral_contact_data , test = 0 , minP = None , maxP = None , minS = None , maxS = None ):
5+
6+ def ellipse_function (
7+ lateral_contact_data , test = 0 , minP = None , maxP = None , minS = None , maxS = None
8+ ):
69 import math
7- if minP == None :
8- minP = lateral_contact_data ['coord1' ].min ()
9- if maxP == None :
10- maxP = lateral_contact_data ['coord1' ].max ()
11- if minS == None :
12- minS = lateral_contact_data ['coord2' ].abs ().min ()
13- if maxS == None :
14- maxS = lateral_contact_data ['coord2' ].max ()
15-
16- a = (maxP - minP )/ 2
17- b = (maxS - minS )/ 10
18- # b = abs(minS)
19-
20- po = minP + (maxP - minP )/ 2
21-
22- p_locations = lateral_contact_data .loc [:,'coord1' ].copy ().to_numpy ()
23- # s_values = lateral_contact_data.loc[:,'coord2'].copy().to_numpy()
24-
25- s = np .zeros ([len (p_locations ),2 ])
26-
10+
11+ if minP == None :
12+ minP = lateral_contact_data ["coord1" ].min ()
13+ if maxP == None :
14+ maxP = lateral_contact_data ["coord1" ].max ()
15+ if minS == None :
16+ minS = lateral_contact_data ["coord2" ].abs ().min ()
17+ if maxS == None :
18+ maxS = lateral_contact_data ["coord2" ].max ()
19+
20+ a = (maxP - minP ) / 2
21+ b = (maxS - minS ) / 10
22+ # b = abs(minS)
23+
24+ po = minP + (maxP - minP ) / 2
25+
26+ p_locations = lateral_contact_data .loc [:, "coord1" ].copy ().to_numpy ()
27+ # s_values = lateral_contact_data.loc[:,'coord2'].copy().to_numpy()
28+
29+ s = np .zeros ([len (p_locations ), 2 ])
30+
2731 for i in range (len (p_locations )):
2832 if minP < p_locations [i ] < maxP :
29- s [i ,0 ] = b * math .sqrt (1 - pow ((p_locations [i ] - po )/ a , 2 )) # max side
30- s [i ,1 ] = - b * math .sqrt (1 - pow ((p_locations [i ] - po )/ a , 2 )) # min side
31- # elif test == 1:
32- # s[i,:] = lateral_contact_data.loc[i,'coord2']
33+ s [i , 0 ] = b * math .sqrt (1 - pow ((p_locations [i ] - po ) / a , 2 )) # max side
34+ s [i , 1 ] = - b * math .sqrt (1 - pow ((p_locations [i ] - po ) / a , 2 )) # min side
35+ # elif test == 1:
36+ # s[i,:] = lateral_contact_data.loc[i,'coord2']
3337 else :
34- s [i ,:] = 0
38+ s [i , :] = 0
3539
3640 return s
3741
38- def rectangle_function (lateral_contact_data , minP = None , maxP = None , minS = None , maxS = None ):
42+
43+ def rectangle_function (
44+ lateral_contact_data , minP = None , maxP = None , minS = None , maxS = None
45+ ):
3946 import math
40- if minP == None :
41- minP = lateral_contact_data ['coord1' ].min ()
42- if maxP == None :
43- maxP = lateral_contact_data ['coord1' ].max ()
44- if minS == None :
45- minS = lateral_contact_data ['coord2' ].min ()
46- if maxS == None :
47- maxS = lateral_contact_data ['coord2' ].max ()
48-
49- p_locations = lateral_contact_data .loc [:,'coord1' ].copy ().to_numpy ()
50- s = np .zeros ([len (p_locations ),2 ])
51-
47+
48+ if minP == None :
49+ minP = lateral_contact_data ["coord1" ].min ()
50+ if maxP == None :
51+ maxP = lateral_contact_data ["coord1" ].max ()
52+ if minS == None :
53+ minS = lateral_contact_data ["coord2" ].min ()
54+ if maxS == None :
55+ maxS = lateral_contact_data ["coord2" ].max ()
56+
57+ p_locations = lateral_contact_data .loc [:, "coord1" ].copy ().to_numpy ()
58+ s = np .zeros ([len (p_locations ), 2 ])
59+
5260 for i in range (len (p_locations )):
5361 if minP < p_locations [i ] < maxP :
54- s [i ,0 ] = maxS # max side
55- s [i ,1 ] = minS # min side
62+ s [i , 0 ] = maxS # max side
63+ s [i , 1 ] = minS # min side
5664 else :
57- s [i ,:] = 0
65+ s [i , :] = 0
5866
5967 return s
6068
61- def parallelepiped_function (othercontact_data , mean_growth = None , minP = None , maxP = None , minS = None , maxS = None , vertex = None ):
62-
69+
70+ def parallelepiped_function (
71+ othercontact_data ,
72+ mean_growth = None ,
73+ minP = None ,
74+ maxP = None ,
75+ minS = None ,
76+ maxS = None ,
77+ vertex = None ,
78+ ):
79+
6380 if mean_growth == None :
64- mean_growth = othercontact_data .loc [:,'coord1' ].mean ()
65-
66- data_ps = np .array ([othercontact_data .loc [:,'coord1' ], othercontact_data .loc [:,'coord2' ]]).T
67-
68- conceptual_growth = np .ones ([len (data_ps ),2 ]) * mean_growth
69-
81+ mean_growth = othercontact_data .loc [:, "coord1" ].mean ()
82+
83+ data_ps = np .array (
84+ [othercontact_data .loc [:, "coord1" ], othercontact_data .loc [:, "coord2" ]]
85+ ).T
86+
87+ conceptual_growth = np .ones ([len (data_ps ), 2 ]) * mean_growth
88+
7089 return conceptual_growth
7190
7291
73- def obliquecone_function (othercontact_data , mean_growth = None , minP = None , maxP = None , minS = None , maxS = None , vertex = None ):
92+ def obliquecone_function (
93+ othercontact_data ,
94+ mean_growth = None ,
95+ minP = None ,
96+ maxP = None ,
97+ minS = None ,
98+ maxS = None ,
99+ vertex = None ,
100+ ):
74101 import math
75-
76- ps_locations = othercontact_data .loc [:,[ ' coord1' , ' coord2' ]].to_numpy ()
77-
78- a = (maxP - minP )/ 2 # semi-major axis
79- b = (maxS - minS )/ 2 # semi-minor axis
80- a2 = pow (a ,2 )
81- b2 = pow (b ,2 )
82-
83- po = minP + a # p coordinate of ellipsis centre
84- so = minS + b # s coordinate of ellipsis centre
85-
86- alpha = vertex [0 ] # p coordinate of vertex
87- beta = vertex [1 ] # g coordinate of vertex
88- gamma = vertex [2 ] # s coordinate of vertex
89-
90- growth = np .zeros ([len (ps_locations ),2 ]) # container for results
91-
102+
103+ ps_locations = othercontact_data .loc [:, [ " coord1" , " coord2" ]].to_numpy ()
104+
105+ a = (maxP - minP ) / 2 # semi-major axis
106+ b = (maxS - minS ) / 2 # semi-minor axis
107+ a2 = pow (a , 2 )
108+ b2 = pow (b , 2 )
109+
110+ po = minP + a # p coordinate of ellipsis centre
111+ so = minS + b # s coordinate of ellipsis centre
112+
113+ alpha = vertex [0 ] # p coordinate of vertex
114+ beta = vertex [1 ] # g coordinate of vertex
115+ gamma = vertex [2 ] # s coordinate of vertex
116+
117+ growth = np .zeros ([len (ps_locations ), 2 ]) # container for results
118+
92119 for i in range (len (ps_locations )):
93- p = ps_locations [i ,0 ]
94- s = ps_locations [i ,1 ]
95-
120+ p = ps_locations [i , 0 ]
121+ s = ps_locations [i , 1 ]
122+
96123 A = alpha - po
97- B = beta * ( p - alpha )
124+ B = beta * ( p - alpha )
98125 C = gamma - so
99- D = beta * ( s - gamma )
100-
101- F = pow (A * b , 2 ) + pow (C * a , 2 ) - a2 * b2
102- G = 2 * ( B * A * b2 + C * D * a2 )
103- H = pow (b * B , 2 ) + pow (a * D , 2 )
104-
126+ D = beta * ( s - gamma )
127+
128+ F = pow (A * b , 2 ) + pow (C * a , 2 ) - a2 * b2
129+ G = 2 * ( B * A * b2 + C * D * a2 )
130+ H = pow (b * B , 2 ) + pow (a * D , 2 )
131+
105132 constant_g2 = F
106- constant_g = - 2 * F * beta - G
107- constant_1 = F * pow (beta ,2 ) + G * beta + H
108-
109- discriminant = pow (constant_g ,2 ) - 4 * constant_g2 * constant_1
110-
111- growth [i ,0 ] = - (constant_g + math .sqrt (discriminant ))/ ( 2 * constant_g2 )
112- growth [i ,1 ] = - (constant_g - math .sqrt (discriminant ))/ ( 2 * constant_g2 )
113-
114- return growth
133+ constant_g = - 2 * F * beta - G
134+ constant_1 = F * pow (beta , 2 ) + G * beta + H
135+
136+ discriminant = pow (constant_g , 2 ) - 4 * constant_g2 * constant_1
137+
138+ growth [i , 0 ] = - (constant_g + math .sqrt (discriminant )) / ( 2 * constant_g2 )
139+ growth [i , 1 ] = - (constant_g - math .sqrt (discriminant )) / ( 2 * constant_g2 )
140+
141+ return growth
0 commit comments