Лабораторная работа №3.2. Исходный код
Класс Info
package Lab4;
public class Info {
public static void infolab (int numberLab) {
String info="Лабораторная работа №"+numberLab+" Выполнил: Позняков Д.А. Группа: ЗИВТ-171";
String labinfo = "Программа, позволяющая вычислить среднюю площадь, минимальный периметр и набиольшую гипотенузу \n"+
"у обычных и прямоугольных треугольник. \n"+
"Позволяет ввести количество обычных и прямоугольных треугольников, задаются случайные значения точек.";
System.out.println(info);
System.out.println(labinfo);
System.out.println();
}
}
Класс Point 2 D
package Lab4;
public class Point2D {
private float x,y;
public Point2D(float x, float y) {
this.x = x;
this.y = y;
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
}
Класс Triangle
package Lab4;
public class Triangle {
private Point2D a,b,c;
public Triangle(Point2D a, Point2D b, Point2D c) {
this.a = a;
this.b = b;
this.c = c;
}
public Point2D getA() {
return a;
}
public void setA(Point2D a) {
this.a = a;
}
public Point2D getB() {
return b;
}
public void setB(Point2D b) {
this.b = b;
}
public Point2D getC() {
return c;
}
public void setC(Point2D c) {
this.c = c;
}
//Вычисление стороны треугольника
public float side(Point2D a, Point2D b){
return (float) Math.sqrt(Math.pow(b.getX()-a.getX(),2)+Math.pow(b.getY()-a.getY(),2));
}
//Проверка существования треугольника через стороны треугольника
public boolean exist(){
if( side(a,b)+side(b,c)>side(c,a) && side(b,c)+side(c,a)>side(a,b) && side(c,a)+side(a,b)>side(b,c)) {
return true;
}
return false;
}
//Вычисление угла
public float angle(Point2D a, Point2D b){
// return (float) Math.acos((a.getX()*b.getX()+a.getY()*b.getY())/ (Math.sqrt(Math.pow(a.getX(),2)+Math.pow(b.getX(),2))*Math.sqrt(Math.pow(a.getY(),2)+Math.pow(b.getY(),2))));
return (float) Math.abs(Math.toDegrees(Math.atan2(b.getX()-a.getX(),b.getY()-a.getY())));
}
//Вычисление периметра
public float perimeter(){
return side(a,b)+side(b,c)+side(c,a);
}
|
|
//Площадь прямоугольника
public float space(){
return (float) Math.sqrt( perimeter()/2*(perimeter()/2-side(a,b))*(perimeter()/2- side(b,c))*(perimeter()/2- side(c,a)));
}
}
Класс LineTriangle
package Lab4;
public class LineTriangle extends Triangle {
public LineTriangle(Point2D a, Point2D b, Point2D c) {
super(a, b, c);
}
public boolean linaAngle(){
if(angle(getA(),getB())==90 ||angle(getB(),getC())==90||angle(getC(),getA())==90 ){
return true;
}
return false;
}
}
Класс Main
package Lab4;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Info.infolab(4);
Scanner scan = new Scanner(System.in);
boolean outb = true;
do {
String out;
//Ввод количества треугольников
System.out.print("Введите количество треугольников: ");
int counttriangle = scan.nextInt();
//Ввод количества прямоугольных треугольников
System.out.print("Введите количество прямоугольных треугольников: ");
int countlinetriangle = scan.nextInt();
//Объявление перменных: рандомных данных, количество сущ. треугольников, массива треугольников и площади
Random rand = new Random();
int randtriangle = 9, randlinetriangle = 3, existtriangle = 0;
Triangle[] triangles = new Triangle[counttriangle];
LineTriangle[] linetriangles = new LineTriangle[countlinetriangle];
float area = 0;
|
|
//Вызов метода создания треугольника, а именно координат точек через аргументы X и Y
for (int i = 0; i < counttriangle; i++) {
Point2D pointA = new Point2D(rand.nextInt(randtriangle), rand.nextInt(randtriangle));
Point2D pointB = new Point2D(rand.nextInt(randtriangle), rand.nextInt(randtriangle));
Point2D pointC = new Point2D(rand.nextInt(randtriangle), rand.nextInt(randtriangle));
triangles[i] = new Triangle(pointA, pointB, pointC);
//Вывод на экран координат треугольника. + проверка существования треугольника
String answer = triangles[i].exist() ? "Да" : "Нет";
System.out.println("Координаты треугольника: A {" + pointA.getX() + ";" + pointA.getY()
+ "}, B {" + pointB.getX() + ";" + pointB.getY() + "}, C {" + pointC.getX() + ";" + pointC.getY()
+ "}. Является треугольником? - " + answer);
}
//Считаем площадь и периметр на основе созданных треугольников
float perimet = triangles[0].perimeter();
for (int i = 0; i < triangles.length; i++) {
//Считаем площадь и периметр только тех треугольников, которые существуют.
if (triangles[i].exist()) {
existtriangle++;
//Считаем площадь
area = triangles[i].space() + area;
//Считаем периметр
if (perimet > triangles[i].perimeter()) {
perimet = triangles[i].perimeter();
}
}
}
|
|
//Пустая строка
System.out.println();
//Вызов метода создания прямоугольного треугольника, а именно координат точек через аргументы X и Y
for (int i = 0; i < countlinetriangle; i++) {
Point2D pointAp = new Point2D(rand.nextInt(randlinetriangle), rand.nextInt(randlinetriangle));
Point2D pointBp = new Point2D(rand.nextInt(randlinetriangle), rand.nextInt(randlinetriangle));
Point2D pointCp = new Point2D(rand.nextInt(randlinetriangle), rand.nextInt(randlinetriangle));
linetriangles[i] = new LineTriangle(pointAp, pointBp, pointCp);
String answer = linetriangles[i].exist() ? "Да" : "Нет";
//Вывод на экран координат прямоугольного треугольника. + проверка существования треугольника
System.out.println("Координаты прямоугольного треугольника: A {" + pointAp.getX() + ";" + pointAp.getY()
+ "}, B {" + pointBp.getX() + ";" + pointBp.getY() + "}, C {" + pointCp.getX() + ";" + pointCp.getY()
+ "}. Является прямоугольным треугольником? - " + answer);
}
//Считаем наибольшую гипотенузу прямоугольного треугольника
float hypotenuse = linetriangles[0].side(linetriangles[0].getA(), linetriangles[0].getB());
for (int i = 0; i < linetriangles.length; i++) {
//Считаем наибольшую гипотенузу только тех треугольников, которые существуют.
if (linetriangles[i].exist() && linetriangles[i].linaAngle()) {
existtriangle++;
//Считаем наибольшую гипотенузу
if (hypotenuse < linetriangles[i].side(linetriangles[0].getA(), linetriangles[0].getB())) {
hypotenuse = linetriangles[i].side(linetriangles[0].getA(), linetriangles[0].getB());
}
if (hypotenuse < linetriangles[i].side(linetriangles[0].getB(), linetriangles[0].getC())) {
hypotenuse = linetriangles[i].side(linetriangles[0].getB(), linetriangles[0].getC());
}
if (hypotenuse < linetriangles[i].side(linetriangles[0].getC(), linetriangles[0].getA())) {
hypotenuse = linetriangles[i].side(linetriangles[0].getC(), linetriangles[0].getA());
}
}
}
|
|
//Окончательное вычисление площади и вывод на экран площади, периметра и гипотенузы.
area /= 6;
System.out.println();
String formattedDoubleArea = String.format("%.2f", area);
System.out.println("Средняя площадь всех N треугольников: " + formattedDoubleArea);
String formattedDoublePerimet = String.format("%.2f", perimet);
System.out.println("Минимальный периметр из всех N треугольников: " + formattedDoublePerimet);
String formattedDoubleHypotenuse = String.format("%.2f", hypotenuse);
System.out.println("Наибольшая гипотенуза из всех M прямоугольных треугольников: " + formattedDoubleHypotenuse);
System.out.println();
System.out.print("Чтобы выйти введите 'Выйти', иначе введите 'Продолжить': ");
out = scan.nextLine();
out = scan.nextLine();
if (out.equals("Продолжить")) {
outb=true; } else {
outb=false;
}
} while (outb);
}
}
Приложение А5
Дата добавления: 2018-11-24; просмотров: 278; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!