@@ -1904,6 +1904,19 @@ def cost(x, func=tree_cost_2, d_min=d_min, terminal=terminal,
19041904 dists = numpy .array ([numpy .linalg .norm (lines [0 , 0 :3 ] - x ),
19051905 numpy .linalg .norm (lines [0 , 3 :6 ] - x ),
19061906 numpy .linalg .norm (lines [1 , 3 :6 ] - x )])
1907+ vec1 = distal - x
1908+ vec2 = terminal - x
1909+ vec3 = proximal - x
1910+ vec1 = vec1 / numpy .linalg .norm (vec1 )
1911+ vec2 = vec2 / numpy .linalg .norm (vec2 )
1912+ vec3 = vec3 / numpy .linalg .norm (vec3 )
1913+ angle1 = numpy .arctan2 (numpy .dot (vec1 , vec3 ))* (180 / numpy .pi )
1914+ angle2 = numpy .arctan2 (numpy .dot (vec2 , vec3 ))* (180 / numpy .pi )
1915+ #angle3 = numpy.arccos(numpy.dot(vec3, vec1))*(180/numpy.pi)
1916+ if angle1 > 90 or angle2 > 90 :
1917+ angle_penalty = penalty
1918+ else :
1919+ angle_penalty = 0.0
19071920 triad_penalty = numpy .max ([0.0 , - 1.0 * numpy .min (dists - d_min )])/ d_min * penalty
19081921 #[TODO] angle penalty
19091922 #[TODO] require that resulting parent vessel is at least a certain length? remove buffer region around triad
@@ -1924,7 +1937,7 @@ def cost(x, func=tree_cost_2, d_min=d_min, terminal=terminal,
19241937 #assert results > tree_scale, '{} results < {} tree_scale'.format(results, tree_scale)
19251938 #return (((np.clip(numpy.nan_to_num(results - scale, nan=2*scale+penalty), 0, 2*scale+penalty) + triad_penalty))/(scale+penalty))# + 1.0
19261939 #return -1/np.clip(numpy.nan_to_num(results - scale, nan=2*scale+penalty), 0, 2*scale+penalty)
1927- return - 1 / np .clip (numpy .nan_to_num (results + triad_penalty , nan = 2 * scale + penalty ), 0 , 2 * scale + penalty )
1940+ return - 1 / np .clip (numpy .nan_to_num (results + triad_penalty + angle_penalty , nan = 2 * scale + penalty ), 0 , 2 * scale + penalty )
19281941 #return results
19291942 #return results
19301943 #return value
0 commit comments