分支-02. 三角形判断(15)
给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
输入格式:
输入在一行中顺序给出6个[-100, 100]范围内的数字,即3个点的坐标x1, y1, x2, y2, x3, y3。
输出格式:
若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。
输入样例1:4 5 6 9 7 8输出样例1:
L = 10.13, A = 3.00输入样例2:
4 6 8 12 12 18输出样例2:
Impossible
代码实现:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.text.DecimalFormat; /** * @ClassName: Main * @author: ybl * @date 2014-9-6 下午3:30:32 * */ public class Main { static class Point { float x; float y; } private static boolean checkValid(Point p1) { if (p1.x >= -100 && p1.x <= 100 && p1.y >= -100 && p1.y <= 100) { return true; } return false; } private static double getLength(Point p1, Point p2) { return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2)); } public static void main(String[] args) { Point p1 = new Point(); Point p2 = new Point(); Point p3 = new Point(); while (true) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { String aString = reader.readLine(); boolean result = false; String space = " "; if (aString != null && aString.contains(space)) { String[] aStrings = aString.split(space); if (aStrings != null && aStrings.length == 6) { try { p1.x = (Float.parseFloat(aStrings[0])); p1.y = (Float.parseFloat(aStrings[1])); p2.x = (Float.parseFloat(aStrings[2])); p2.y = (Float.parseFloat(aStrings[3])); p3.x = (Float.parseFloat(aStrings[4])); p3.y = (Float.parseFloat(aStrings[5])); if (checkValid(p1) && checkValid(p2) && checkValid(p3)) { result = true; } } catch (Exception e) { // TODO: handle exception } } } if (result) { break; } else { System.out.println("Input error!Please try again..."); continue; } } catch (Exception e) { // TODO: handle exception } } double l1 = getLength(p1, p2); double l2 = getLength(p1, p3); double l3 = getLength(p2, p3); if(l1+l2<=l3 || l1+l3<=l2 || l2+l3<=l1){ System.out.println("Impossible"); } else { String L; DecimalFormat df = new DecimalFormat("##0.00"); L = df.format(l1 + l2 + l3); float A = (float) (0.5*(p1.x*p2.y+p2.x*p3.y+p3.x*p1.y-p1.x*p3.y-p2.x*p1.y-p3.x*p2.y)); System.out.println("L = " + L + ", " + "A = " + df.format(Math.abs(A))); } } }