Java给出3个点,做三角形判断

问题:

给定平面上任意三个点的坐标(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.text.DecimalFormat;
import java.util.Scanner;


//点
class Point{
	//x坐标
	private double x;
	//y坐标
	private double y;
	
	public Point(double x, double y)
	{
		this.x=x;
		this.y=y;
	}

	public double getX() {
		return x;
	}

	public void setX(double x) {
		this.x = x;
	}

	public double getY() {
		return y;
	}

	public void setY(double y) {
		this.y = y;
	}
}

//直线
class Line
{
	private Point point1;
	private Point point2;
	//斜率
	private double slope;
	private double length;
	
	public Line(Point point1 , Point point2)
	{
		this.point1=point1;
		this.point2=point2;
		this.slope=(point1.getY()-point2.getY())/(point1.getX()-point2.getX());
		this.length=Math.sqrt( Math.pow(Math.abs(point1.getY()-point2.getY()), 2)+Math.pow(Math.abs(point1.getX()-point2.getX()), 2));
	}
	
	public double getSlope() {
		return slope;
	}
	
	public boolean  isParallel(Line line)
	{
		if(this.slope==line.getSlope())
			return true;
		return false;
	}

	public double getLength() {
		return length;
	}

	
	
}


/*	给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
 *	1. 不存在平行的两条直线
 *	2. 两边之和大于第三边 
	3. 两边直插小雨第三边
 * */
public class Main {

	public static void main(String[] args) {
		
		//控制台输入
		Scanner scanner = new Scanner(System.in);
		double x1,x2,x3,y1,y2,y3;
		//从控制台获得3个坐标点(x1,y1),(x2,y2),(x3,y3)
		x1=scanner.nextDouble();
		y1=scanner.nextDouble();
		x2=scanner.nextDouble();
		y2=scanner.nextDouble();
		x3=scanner.nextDouble();
		y3=scanner.nextDouble();
		//构造成3个Point对象
		Point point1 = new Point(x1,y1);
		Point point2 = new Point(x2,y2);
		Point point3 = new Point(x3,y3);
		//得到3条直线
		Line line1 = new Line(point1,point2);
		Line line2 = new Line(point1,point3);
		Line line3 = new Line(point2,point3);
		//存储三条直线的长度
		double len1 = line1.getLength();
		double len2 = line2.getLength();
		double len3 = line3.getLength();
		
		//判断三条直线是存在平行
		if( line1.isParallel(line2) || line1.isParallel(line3) || line2.isParallel(line3))
		{
			System.out.println("Impossible");
		}
		//判断不平行的三条直线是否能构成三角形
		else if( (len1+len2)<len3 || (len1+len3)<len2 || (len2+len3)<len1 || Math.abs(len1-len2)>len3 || Math.abs(len1-len3)>len2 || Math.abs(len2-len3)>len1)
		{
			System.out.println("Impossible");
		}
		else
		{
			//求周长
			double L = line1.getLength()+line2.getLength()+line3.getLength();
			double P = L/2.0;
			//求面积
			double S = Math.sqrt(P*(P-line1.getLength())*(P-line2.getLength())*(P-line3.getLength()));
			//结果保留两位小数
			DecimalFormat df = new DecimalFormat("#0.00");
			System.out.println("L = "+df.format(L)+", A = "+df.format(S));
			
			
			
		}
		
		
		

			
	}

}




  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值