11#![ allow( dead_code) ]
22
3- use core:: num;
4-
53use crate :: circle:: Circle ;
64use crate :: line:: Line ;
75use crate :: point:: point;
@@ -13,45 +11,13 @@ pub enum DistLineCircleConfig {
1311 TwoPairs ( f64 , Point , Point , Point , Point ) ,
1412}
1513
16-
17-
18-
19-
20-
21-
22-
23-
24-
25-
26-
27-
28-
29-
30-
31-
32-
3314pub fn distance_line_circle ( line : & Line , circle : & Circle ) -> DistLineCircleConfig {
3415 let mut parameter: [ f64 ; 2 ] = [ 0.0 ; 2 ] ;
3516 let mut closest: [ [ Point ; 2 ] ; 2 ] = [ [ point ( 0.0 , 0.0 ) ; 2 ] ; 2 ] ;
3617 let num_closest_pairs;
37-
38-
39- let delta = line. origin - circle. c ;
40-
41-
42-
4318
44-
45-
19+ let delta = line. origin - circle. c ;
4620
47-
48-
49-
50-
51-
52-
53-
54-
5521 const ZERO : f64 = 0.0 ;
5622 let direction = line. dir ;
5723 let radius = circle. r ;
@@ -62,42 +28,22 @@ pub fn distance_line_circle(line: &Line, circle: &Circle) -> DistLineCircleConfi
6228 let r_sqr = radius * radius;
6329 let test = dot_perp_dir_del * dot_perp_dir_del - r_sqr * dot_dir_dir;
6430 if test >= ZERO {
65-
66-
67-
68-
69-
70-
71-
72-
73-
74-
75-
7631 num_closest_pairs = 1 ;
7732 parameter[ 0 ] = -dot_dir_del / dot_dir_dir;
7833 closest[ 0 ] [ 0 ] = delta + direction * parameter[ 0 ] ;
7934 closest[ 0 ] [ 1 ] = closest[ 0 ] [ 0 ] ;
8035
81-
8236 if test > ZERO {
8337 closest[ 0 ] [ 1 ] . normalize ( ) ;
8438 closest[ 0 ] [ 1 ] = closest[ 0 ] [ 1 ] * radius;
8539 }
8640 } else {
87-
88-
89-
90-
91-
92-
9341 let a0 = delta. dot ( delta) - radius * radius;
9442 let a1 = dot_dir_del;
9543 let a2 = dot_dir_dir;
9644 let discr = max ( a1 * a1 - a0 * a2, ZERO ) ;
9745 let sqrt_discr = discr. sqrt ( ) ;
9846
99-
100-
10147 let temp = -dot_dir_del
10248 + if dot_dir_del > ZERO {
10349 -sqrt_discr
@@ -111,28 +57,30 @@ pub fn distance_line_circle(line: &Line, circle: &Circle) -> DistLineCircleConfi
11157 ( parameter[ 1 ] , parameter[ 0 ] ) = ( parameter[ 0 ] , parameter[ 1 ] ) ;
11258 }
11359
114-
11560 closest[ 0 ] [ 0 ] = delta + direction * parameter[ 0 ] ;
11661 closest[ 0 ] [ 1 ] = closest[ 0 ] [ 0 ] ;
11762 closest[ 1 ] [ 0 ] = delta + direction * parameter[ 1 ] ;
11863 closest[ 1 ] [ 1 ] = closest[ 1 ] [ 0 ] ;
11964 }
12065
121-
122-
12366 for j in 0 ..num_closest_pairs {
12467 for i in 0 ..2 {
12568 closest[ j] [ i] = closest[ j] [ i] + circle. c ;
12669 }
12770 }
12871
129- let diff = closest[ 0 ] [ 0 ] - closest[ 0 ] [ 1 ] ;
130- let distance = ( closest[ 0 ] [ 0 ] - closest[ 0 ] [ 1 ] ) . norm_imp ( ) ;
72+ let distance = ( closest[ 0 ] [ 0 ] - closest[ 0 ] [ 1 ] ) . norm ( ) ;
13173
13274 if num_closest_pairs == 2 {
13375 DistLineCircleConfig :: OnePair ( distance, closest[ 0 ] [ 0 ] , closest[ 0 ] [ 1 ] )
13476 } else {
135- DistLineCircleConfig :: TwoPairs ( distance, closest[ 0 ] [ 0 ] , closest[ 0 ] [ 1 ] , closest[ 1 ] [ 0 ] , closest[ 1 ] [ 1 ] )
77+ DistLineCircleConfig :: TwoPairs (
78+ distance,
79+ closest[ 0 ] [ 0 ] ,
80+ closest[ 0 ] [ 1 ] ,
81+ closest[ 1 ] [ 0 ] ,
82+ closest[ 1 ] [ 1 ] ,
83+ )
13684 }
13785}
13886
@@ -153,7 +101,6 @@ fn max(a: f64, b: f64) -> f64 {
153101
154102#[ cfg( test) ]
155103mod tests_distance_line_circle {
156- use super :: * ;
157104
158105 #[ test]
159106 fn test_distance_line_circle ( ) { }
0 commit comments