@@ -18,6 +18,9 @@ pub struct PathPlanner {
1818 from : HashMap < usize , usize > ,
1919}
2020
21+ const MULTIPLIER : f64 = 10.0 ;
22+
23+
2124impl PathPlanner {
2225 pub fn new ( map : & ObstacleMap , start : ( f64 , f64 ) , goal : ( f64 , f64 ) ) -> Self {
2326 let mut vertices = map. as_vertices ( ) ;
@@ -78,11 +81,17 @@ impl PathPlanner {
7881 . unwrap_or ( & OrderedFloat ( std:: f64:: INFINITY ) )
7982 . clone ( ) ;
8083 for successor in self . successors . iter ( ) . cloned ( ) {
81- if self . obstacle . intersects ( & Line :: new ( self . vertices [ vertex] , self . vertices [ successor] ) ) {
82- continue ;
83- }
84+ let multiplier = if self . obstacle . intersects ( & Line :: new ( self . vertices [ vertex] , self . vertices [ successor] ) ) {
85+ if self . goal == successor || self . start == vertex {
86+ OrderedFloat ( MULTIPLIER )
87+ } else {
88+ continue ;
89+ }
90+ } else {
91+ OrderedFloat ( 1.0 )
92+ } ;
8493 let g_successor = self . g_score . get ( & successor) . unwrap_or ( & OrderedFloat ( std:: f64:: INFINITY ) ) . clone ( ) ;
85- let g_tentative = g_vertex + self . distance ( vertex, successor) ;
94+ let g_tentative = g_vertex + multiplier * self . distance ( vertex, successor) ;
8695 if g_tentative < g_successor {
8796 self . from . insert ( successor, vertex) ;
8897 self . g_score . insert ( successor, g_tentative) ;
@@ -100,20 +109,13 @@ impl PathPlanner {
100109 }
101110
102111 pub fn shortest_path ( mut self ) -> Vec < ( f64 , f64 ) > {
103- let mut closest_vertex = self . start ;
104- let mut closest_distance = OrderedFloat ( std:: f64:: INFINITY ) ;
105112 while let Some ( ( vertex, _) ) = self . open . pop ( ) {
106- if self . heuristic ( vertex) < closest_distance - EPSILON {
107- closest_vertex = vertex;
108- closest_distance = self . heuristic ( vertex) ;
109- }
110113 if vertex == self . goal {
111114 return self . reconstruct_path ( vertex) ;
112115 }
113116 self . successors . remove ( & vertex) ;
114117 self . expand_node ( vertex) ;
115118 }
116- self . from . insert ( self . goal , closest_vertex) ;
117- self . reconstruct_path ( self . goal )
119+ unreachable ! ( )
118120 }
119121}
0 commit comments