TopCoder problem "Parallelograms" used in TCHS09 Round 3 (Division I Level One)



Problem Statement

    

A parallelogram is a quadrilateral with two sets of parallel sides.

You are given three distinct points A(xA,yA), B(xB,yB) and C(xC,yC) in the plane.

Consider all non-degenerate parallelograms such that A, B, and C are three of its vertices. Your method should return the difference between the largest and the smallest possible perimeter of such a parallelogram. If there is no such parallelogram, return -1 instead.

 

Definition

    
Class:Parallelograms
Method:getDifference
Parameters:int, int, int, int, int, int
Returns:double
Method signature:double getDifference(int xA, int yA, int xB, int yB, int xC, int yC)
(be sure your method is public)
    
 

Constraints

-xA, yA, xB, yB, xC and yC will be between -5,000 and 5,000, inclusive.
-A, B, and C will be three different points.
 

Examples

0)
    
0
0
0
1
1
0
Returns: 0.8284271247461898
For this input there are three possible parallelograms, with the fourth vertex at (1,1), (1,-1), or (-1,1). In the first case, we get a 1 by 1 square with a perimeter of 4. In both the second and third cases, we get a parallelogram with side lengths 1 and sqrt(2), with a perimeter of approximately 4.828427.
1)
    
0
0
4
0
0
3
Returns: 4.0
In this case the largest possible perimeter is 18 and the smallest possible perimeter is 14.
2)
    
0
0
1
0
47
0
Returns: -1.0
No parallelogram can have three vertices on the same line. Therefore, the answer for this test case is -1.
3)
    
1
2
3
4
8
7
Returns: 11.547796284592874
4)
    
2
-1
-7
2
-1
0
Returns: -1.0
One more example of three points on the same line.

Problem url:

http://www.topcoder.com/stat?c=problem_statement&pm=10284

Problem stats url:

http://www.topcoder.com/tc?module=ProblemDetail&rd=13730&pm=10284

Writer:

misof

Testers:

PabloGilberto , Olexiy , ivan_metelsky

Problem categories:

Geometry, Simple Math