package com.interview.books.topcoder.geometry; import com.interview.basics.model.geometry.Line; import com.interview.utils.FloatAssertion; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * Created_By: stefanie * Date: 15-1-5 * Time: 下午10:33 */ public class TC_G12_SymmetryLine { public int count(float[][] points){ List<Line> symmetry = new ArrayList(); Set<String> pointSet = new HashSet(); for(float[] point : points) pointSet.add(getKey(point)); for(int i = 0; i < points.length; i++){ for(int j = i + 1; j < points.length; j++){ Line line = new Line(points[i], points[j]).perpendicular(); boolean allHaveReflection = true; for(int k = 0; k < points.length; k++){ if(k == i || k == j) continue; float[] reflection = line.reflection(points[k]); if(!pointSet.contains(getKey(reflection))){ allHaveReflection = false; break; } } if(allHaveReflection) symmetry.add(line); } } return symmetry.size()/(points.length/2); } public String getKey(float[] point){ return FloatAssertion.toString(point[0]) + "-" + FloatAssertion.toString(point[1]); } public static void main(String[] args){ //0 0 2 1 0 5 -2 4 TC_G12_SymmetryLine line = new TC_G12_SymmetryLine(); float[][] points = new float[][]{ {0,0},{2,1},{0,5},{-2,4} }; System.out.println(line.count(points)); //2 points = new float[][]{ {0, 0},{100, 0},{50, 87} }; System.out.println(line.count(points)); //1 } }