301 type Tangent = Point; |
301 type Tangent = Point; |
302 |
302 |
303 fn exp(self, tangent : &Self::Tangent) -> Self { |
303 fn exp(self, tangent : &Self::Tangent) -> Self { |
304 let mut face = self.face; |
304 let mut face = self.face; |
305 let mut point = self.point; |
305 let mut point = self.point; |
306 let mut dest = self.point + tangent; |
306 let mut tan = *tangent; |
307 loop { |
307 let dest = loop { |
|
308 let dest = point + tan; |
308 let (next_face, cross) = face.find_crossing(&point, &dest); |
309 let (next_face, cross) = face.find_crossing(&point, &dest); |
309 if next_face == face { |
310 if next_face == face { |
310 break |
311 break dest |
311 } |
312 } |
|
313 tan -= cross-point; |
312 point = next_face.convert_adjacent(face, &cross).unwrap(); |
314 point = next_face.convert_adjacent(face, &cross).unwrap(); |
313 dest = next_face.convert_adjacent(face, &dest).unwrap(); |
315 //dest = next_face.convert_adjacent(face, &dest).unwrap(); |
314 face = next_face; |
316 face = next_face; |
315 } |
317 }; |
316 OnCube { face, point : dest } |
318 OnCube { face, point : dest } |
317 } |
319 } |
318 |
320 |
319 fn log(&self, other : &Self) -> Self::Tangent { |
321 fn log(&self, other : &Self) -> Self::Tangent { |
320 self.log_dist(other).0 |
322 self.log_dist(other).0 |